为什么在动态链接器启动之前调用_dl_fixup?

时间:2015-12-11 09:35:11

标签: c linker glibc

我试图了解glibc动态链接器的工作原理。我知道在_dl_runtime_resolve中调用了_dl_fixup,并解决了重定位问题。所以我认为只有在链接器启动并加载了一些库之后才会调用它。但是当我在其中进行一些打印工作时,我发现甚至在_dl_start之前调用了该函数。令人困惑的是:为什么叫它?它做了什么工作?

我做了一些打印工作,该函数正在处理strncpy,fopen,fread64等符号,但对象名称(l-> l_name)似乎为null。

I add print sentences in _dl_start and _dl_fixup

I make glibc and test the ld.so, I found "_dl_fixup" appears before and after "_dl_start"

我使用gdb来调试链接器,我认为gdb本身使用_dl_fixup来完成某些任务。如果我没有使用gdb,则只能在_dl_start之后调用_dl_fixup。

1 个答案:

答案 0 :(得分:0)

  

所以我认为只有在链接器启动并且加载了一些库

之后才会调用它

这是正确的。

  

我发现甚至在_dl_start

之前调用了该函数

这是不正确的:_dl_fixup仅在_dl_start之后调用。

很遗憾,你没有提供任何关于你如何得出错误结论的详细信息,所以你不可能告诉你哪里犯了错误,但你确实犯了错误(至少有一个) )错误。