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.elftextdata的总和。为什么会有如此巨大的差异? objcopy 会将哪些部分从 .elf 复制到 .bin

我在链接描述文件的 PROGBITS 部分之间发现了一些 NOBITS 部分。二进制文件会占用一个连续的地址space,所以NOBITS段的space由objcopy补零。我认为这是造成差异的根本原因。