【发布时间】:2017-11-29 00:16:57
【问题描述】:
我有 main.c 文件,其中包含对外部函数 fun() 的调用
int main()
{
fun();
}
readelf -r 的结果如下
偏移 0x298 处的重定位节 '.rela.text' 包含 3 个条目: 偏移信息类型 Sym。价值符号。姓名+加号 00000000000a 000b00000002 R_X86_64_PC32 0000000000000000 乐趣 - 4我只想知道 info 字段(即符号表条目)是如何与符号 fun 映射的,为什么 sym.value 是 0000??
【问题讨论】:
-
您是否在目标文件上调用
readelf?当符号fun还没有被链接器解析? -
是的,我在目标文件上调用了 readelf,目标文件不是由链接器创建的。链接器只是链接该目标文件,因此我们可以创建上述代码的目标文件,它会给出 readelf 的结果,如图所示我的问题
-
目标文件不完整,它们基本上代表一个translation unit。在别处定义的符号根本无法解析,因此这些函数的值为零。
-
感谢您的澄清,但什么是信息字段以及它如何映射到符号输入项??
-
这个问题实际上与 C 几乎没有关系。您几乎可以在任何其他语言中拥有类似的测试用例,并且输出因系统而异。不幸的是,没有 other 标签。因此,我认为最好添加新标签(并删除C标签)或关闭此问题,因为就目前而言,它不太可能是由正在寻找它的未来访问者发现,因此不太可能对这些未来访问者有用。我不知道任何更合适的标签,所以我投票结束这个问题。
标签: c