gcc objcopy 生成的二进制文件的大小远大于 gcc 大小输出中 'text' 和 'data' 的总和
binary file generated by gcc objcopy has a size much larger than sum of 'text' and 'data' in gcc size output
我使用 objcopy -S -g -O binary test.elf test.bin
从 .elf
获取 .bin
文件。
$ ll test.bin
-rwxr-xr-x 1 hongzhuwang md_psw 1472320 Oct 28 19:07 test.bin
$ size test.elf
text data bss dec hex filename
173062 6328 6605424 6784814 67872e test.elf
test.bin
的大小明显大于test.elf
中text和data的总和。为什么会有如此巨大的差异? objcopy
会将哪些部分从 .elf
复制到 .bin
?
我在链接描述文件的 PROGBITS
部分之间发现了一些 NOBITS
部分。二进制文件会占用一个连续的地址space,所以NOBITS
段的space由objcopy
补零。我认为这是造成差异的根本原因。
我使用 objcopy -S -g -O binary test.elf test.bin
从 .elf
获取 .bin
文件。
$ ll test.bin
-rwxr-xr-x 1 hongzhuwang md_psw 1472320 Oct 28 19:07 test.bin
$ size test.elf
text data bss dec hex filename
173062 6328 6605424 6784814 67872e test.elf
test.bin
的大小明显大于test.elf
中text和data的总和。为什么会有如此巨大的差异? objcopy
会将哪些部分从 .elf
复制到 .bin
?
我在链接描述文件的 PROGBITS
部分之间发现了一些 NOBITS
部分。二进制文件会占用一个连续的地址space,所以NOBITS
段的space由objcopy
补零。我认为这是造成差异的根本原因。