gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-03 09:52:26 25 4
gpt4 key购买 nike

我正在寻求了解低级计算。我注意到编译后的二进制文件要比我认为的要大得多。因此,我尝试构建没有任何stdlib代码的最小的c程序,如下所示:

void _start()
{
while(1) {};
}
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>
但是我实际的可执行文件仍然是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 800
.text 6 4096
.eh_frame_hdr 20 8192
.eh_frame 52 8216
.dynamic 208 16176
.comment 18 0
Total 421

最佳答案

现代编译器和链接器并没有真正针对在完整规模的平台上生成超小型代码而进行过优化。不是因为工作困难,而是因为通常没有必要。不一定需要编译器或链接器添加其他代码(尽管可能会添加),但是它不会尝试将数据和代码打包到尽可能小的空间。
就您而言,我注意到您正在使用动态链接,即使实际上没有任何链接。使用“-static”将节省大约8kB。 “-s”(带)将消除更多。
我不知道gcc是否有可能制作真正最小的ELF可执行文件。在您的情况下,应该大约为400个字节,几乎所有字节都是各种ELF header ,节表等。
我不知道是否可以链接自己的网站(我敢肯定,如果没有的话,我会说正确的话),但是我有一篇文章介绍了如何通过从头开始用二进制文件生成一个ELF可执行文件:
http://kevinboone.me/elfdemo.html

关于c - 除了原始机器指令外,可执行文件中还有什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63980227/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com