46得票4回答
.bss节中的零初始化变量在elf文件中占用空间吗?

如果我理解正确,ELF文件中的.bss部分用于为零初始化的变量分配空间。我们的工具链生成ELF文件,因此我的问题是:是否实际上需要将所有这些零保存在.bss部分中?当我分配一个全局10兆字节的数组时,ELF文件中会产生10兆字节的零,似乎这是一种非常浪费空间的方式。我在哪里看错了呢?

45得票2回答
为什么除了使用GOT之外,还需要存在PLT?

我知道在典型的ELF二进制文件中,函数通过过程链接表(PLT)被调用。函数的PLT条目通常包含一个跳转到全局偏移表(GOT)条目的指令。此条目将首先引用一些代码将实际函数地址加载到GOT中,并在第一次调用后包含实际函数地址(延迟绑定)。 确切地说,在进行延迟绑定之前,GOT条目指向PLT中的...

45得票5回答
如何彻底删除可执行文件

我希望尽可能地减少文件大小 - 在Linux上: 一个ELF文件。我只需要里面运行所需的内容。 我尝试使用strip命令:strip --strip-all elf 但是它似乎没有做好: nm 仍然显示很多内容,而且二进制文件仍然很大。我该怎么做?

44得票5回答
如何仅提取ELF节的原始内容?

我尝试过以下方法,但生成的文件仍然是ELF文件而不是纯粹的节内容。$ objcopy --only-section=<name> <infile> <outfile> 我只想获取该部分的内容。有没有工具可以做到这一点?有什么建议吗?

42得票5回答
如何获取“.a”文件的架构?

我有一个.a文件,想要获取它的架构信息。运行file myFile.a命令会返回file.a: current ar archive,如何获取更多关于该文件包含哪种架构的信息?

36得票2回答
为什么在x86_64 ABI中选择0x400000作为文本段的起始地址?

在这份文档的第27页中指出,文本段从0x400000开始。为什么选择了这个特定的地址?有什么原因吗?在Linux上的GNU ld也选择了同样的地址。$ ld -verbose | grep -i text-segment PROVIDE (__executable_start = SEGM...

36得票1回答
gcc会向Linux ELF添加哪些功能?

当使用gcc将类似hello-world的C(或ASM)程序进行链接时,它会将一些内容添加到最终的可执行目标文件中。我只知道有运行时动态链接器和_start入口点,但这些添加的函数是什么类型呢? 00000000004003f0 t deregister_tm_clones 00000000...

34得票1回答
可执行文件中常见字符串的含义是什么?

在 Mach-O 64 位可执行文件和 ELF 64 位 LSB 可执行文件中,似乎存在一些长的类似字母数字串,它们与其他非字母数字符号一起出现:cat /bin/bash | grep -c "AWAVAUATSH" 有181个结果,以及cat /usr/bin/gzip | grep -c...

34得票1回答
为什么Linux二进制文件的虚拟内存地址从0x8048000开始?

在Ubuntu x86系统上反汇编ELF二进制文件时,我注意到代码(.text)部分从虚拟地址0x8048000开始,所有较低的内存地址似乎都未使用。这似乎是相当浪费的,而Google上找到的都是涉及STACK_TOP的民间传说或者防止空指针解引用的保护。后一种情况看起来可以通过使用单个页面而...

33得票4回答
.bss和COMMON:放在哪里?

来自我的书: .bss: 未初始化的全局C变量 COMMON: 未分配的未初始化数据对象 我必须说,我并没有看到明显的区别。我甚至不太理解一个未初始化、未分配的数据对象是什么...似乎什么都不是。我使用GNU的readelf工具尝试查看一些简单的C代码,但找不到一个COMMO...