【发布时间】:2014-05-21 18:49:07
【问题描述】:
在这种情况下,正确的那个地址是:
.data 从0x08048054 开始直到0x08048054+0x0000e
.bss 从 0x08048054+0x0000e 开始直到 0x0804805+0x00016
还是我错过了什么?请为我澄清一下。
编辑
我使用这个命令来获取图片中的信息:
readelf -l filename
【问题讨论】:
-
您是否有权访问链接描述文件,还是使用默认链接描述文件编译的?如果是这样,使用了什么编译器/链接器?
-
问题是,除非您获得链接描述文件信息,否则您无法知道哪个先 bss 或 data重新使用 GCC 或 Clang)。
-
@nonsensickle:它是用旧的 C 编译器编译的。我不知道使用了链接器,但我可以尝试弄清楚。但通常
.bss先出现,这是大多数编译器的行为,在这种情况下,如果我们假设它也适用于这个编译器,我对地址是否正确? -
如果您假设
.bss出现在第一位,那么.bss将位于0x08048054,.data将位于0x08048054+0x0000e。是的,这是一个合理的假设。 -
正确,库本身将包含符号信息,然后将通过您的应用程序使用的链接器脚本。因此,如果是这种情况,您实际上可以控制
.bss和.data的布局顺序。