【发布时间】:2011-10-14 09:55:58
【问题描述】:
我正在尝试创建自己的 ELF .o 文件,我想在其中写出指向其他内存条的内存条。我不想给每个条带起一个名字,所以我只是跟踪它们相对于它们所在部分的开头的位置。
所以我以以下形式创建了一个重定位条目:
000000000a50 00090000000b R_X86_64_32S 0000000000000000 .section + a70
在 a50 处,我们使用 64 位全局指针引用 .section + a70 处的对象。该部分使用以下方式定义:
9: 0000000000000000 0 SECTION LOCAL DEFAULT 6
之前的输出来自 readelf,它实际上假装一切都很好......直到我通过 LD 拉出它,这只是段错误。
我发现,如果我使用 WEAK 类型,它可以工作......但它似乎使用它在所有链接的 .o 文件中找到的第一个部分符号作为在这种情况下所有重定位的目标。我真的希望它是本地的,所以应该是本地的。
到目前为止,我的替代方法是在每个具有此类对象的部分的开头创建一个 OBJECT 符号,但这似乎很愚蠢......我做错了什么,还是 LD 中存在错误?
【问题讨论】: