我试图了解glibc动态链接器的工作原理。我知道在_dl_runtime_resolve中调用了_dl_fixup,并解决了重定位问题。所以我认为只有在链接器启动并加载了一些库之后才会调用它。但是当我在其中进行一些打印工作时,我发现甚至在_dl_start之前调用了该函数。令人困惑的是:为什么叫它?它做了什么工作?
我做了一些打印工作,该函数正在处理strncpy,fopen,fread64等符号,但对象名称(l-> l_name)似乎为null。
我使用gdb来调试链接器,我认为gdb本身使用_dl_fixup来完成某些任务。如果我没有使用gdb,则只能在_dl_start之后调用_dl_fixup。
答案 0 :(得分:0)
所以我认为只有在链接器启动并且加载了一些库
之后才会调用它
这是正确的。
我发现甚至在_dl_start
之前调用了该函数
这是不正确的:_dl_fixup
仅在_dl_start
之后调用。
很遗憾,你没有提供任何关于你如何得出错误结论的详细信息,所以你不可能告诉你哪里犯了错误,但你确实犯了错误(至少有一个) )错误。