我试图创建我自己的ELF .o文件,我想在其中写出指向其他内存条的内存条。我不想让每个条的名字,所以我就跟踪他们的相对位置,以他们在节开始ELF relocate against local section
所以我创建的形式搬迁进入:
000000000a50 00090000000b R_X86_64_32S 0000000000000000 .section + a70
其中,在a50处,我们使用64位全局指针指向.section + a70处的对象。该部分是用定义:
9: 0000000000000000 0 SECTION LOCAL DEFAULT 6
前面的输出是readelf,它实际上假装一切都很好......直到我拉这个通过LD,刚刚出现segfaults。
我发现如果我使用WEAK类型,它可以工作......但它似乎使用它在所有链接的.o文件中找到的第一节符号作为所有重定位的目标。我真的希望它是本地的,所以本地应该是。
我到目前为止的选择是在每个部分的开头都创建一个OBJECT符号,但这只是看起来很愚蠢......我做错了什么,或者LD中存在错误?