小编sek*_*hor的帖子

除了原始机器指令之外,可执行文件中还有什么?

我正在寻求了解底层计算。我注意到我编译的二进制文件比我想象的要大得多。所以我尝试构建尽可能最小的 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)

c assembly executable gcc

5
推荐指数
2
解决办法
642
查看次数

标签 统计

assembly ×1

c ×1

executable ×1

gcc ×1