我正在寻求了解底层计算。我注意到我编译的二进制文件比我想象的要大得多。所以我尝试构建尽可能最小的 c 程序,而不使用任何 stdlib 代码,如下所示:
void _start()
{
while(1) {};
}
Run Code Online (Sandbox Code Playgroud)
gcc -nostdlib -o minimal minimal.c
当我反汇编二进制文件时,它准确地显示了我所期望的内容,即三行汇编代码中的确切代码。
$ objdump -d minimal
minimal: file format elf64-x86-64
Disassembly of section .text:
0000000000001000 <_start>:
1000: 55 push %rbp
1001: 48 89 e5 mov %rsp,%rbp
1004: eb fe jmp 1004 <_start+0x4>
Run Code Online (Sandbox Code Playgroud)
但我的实际可执行文件大小仍然是 13856 字节。到底是什么,让它变得这么大?该文件中还有什么内容?操作系统是否需要超过这 6 字节的机器代码?
编辑 #1:
的输出size是:
$ size -A minimal
minimal :
section size addr
.interp 28 680
.note.gnu.build-id 36 708
.gnu.hash 28 744
.dynsym 24 776
.dynstr 1 …Run Code Online (Sandbox Code Playgroud)