在这种情况下,正确的地址是:
.data
从0x08048054
开始,直到0x08048054+0x0000e
.bss
从0x08048054+0x0000e
开始,直到0x0804805+0x00016
修改
我使用此命令获取图像中的信息:
readelf -l filename
答案 0 :(得分:1)
好的,那么我从哪里开始...是.data
和.bss
都在内存中的那个区域。问题是没有办法弄清楚他们的订单。
我们可以假设遵循默认顺序并进行有根据的猜测,但我不喜欢这样。
通过问题下的冗长评论帖,你提到了一些有趣的东西,这在你的问题中并不明显。
可执行文件没有动态链接,因为文件命令说:ELF 32位LSB可执行文件,Intel 80386,版本1(SYSV),静态链接,在这种情况下被剥离,没有链接描述文件,不是吗? - 面具
在这种情况下,库包含具有所有符号偏移的符号表。该表包括部分信息。编译应用程序时,链接器将处理它。此时,您的链接描述文件控制着.data
和.bss
部分的输入顺序。
如果它是默认的链接描述文件,请查找它。如果是自定义的,您应该可以访问它并可以阅读它。如果不确定在这里详细说明,我们会尝试并提供帮助:)
我自己曾要求a question 不相关,但提供了链接描述文件的示例代码和一些C代码。在该链接描述文件中,.bss
段在<{strong> .data
段后
答案 1 :(得分:1)
您正在查看程序标题信息,而部分标题可能就是您所需要的。程序头中可能包含许多部分,您无法准确地推断出各个部分的大小和对齐要求。
要查看部分标题,请使用:
readelf -S