ELF第二个加载段地址为.data + .bss

时间:2014-04-08 20:45:04

标签: c linux elf segment

ELF output of readelf

在这种情况下,正确的地址是:

.data0x08048054开始,直到0x08048054+0x0000e

.bss0x08048054+0x0000e开始,直到0x0804805+0x00016

或者我错过了什么?请为我澄清一下。

修改

我使用此命令获取图像中的信息:

readelf -l filename

2 个答案:

答案 0 :(得分:1)

好的,那么我从哪里开始...是.data.bss都在内存中的那个区域。问题是没有办法弄清楚他们的订单。

我们可以假设遵循默认顺序并进行有根据的猜测,但我不喜欢这样。

通过问题下的冗长评论帖,你提到了一些有趣的东西,这在你的问题中并不明显。

  

可执行文件没有动态链接,因为文件命令说:ELF 32位LSB可执行文件,Intel 80386,版本1(SYSV),静态链接,在这种情况下被剥离,没有链接描述文件,不是吗? - 面具

在这种情况下,库包含具有所有符号偏移的符号表。该表包括部分信息。编译应用程序时,链接器将处理它。此时,您的链接描述文件控制着.data.bss部分的输入顺序。

如果它是默认的链接描述文件,请查找它。如果是自定义的,您应该可以访问它并可以阅读它。如果不确定在这里详细说明,我们会尝试并提供帮助:)

我自己曾要求a question 不相关,但提供了链接描述文件的示例代码和一些C代码。在该链接描述文件中,.bss段在<{strong> .data段后

答案 1 :(得分:1)

您正在查看程序标题信息,而部分标题可能就是您所需要的。程序头中可能包含许多部分,您无法准确地推断出各个部分的大小和对齐要求。

要查看部分标题,请使用:

  

readelf -S