- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
我正在尝试了解 glibc 动态链接器的工作原理。我知道在_dl_runtime_resolve中调用了_dl_fixup,解决了重定位问题。所以我认为只有在链接器启动并加载了一些库之后才会调用它。但是当我在里面做一些打印工作时,我发现这个函数甚至在 _dl_start 之前就被调用了。令人困惑:为什么叫它?它做了哪些工作?
我做了一些打印工作,该函数正在处理 strncpy、fopen、fread64 等符号,但对象名称 (l->l_name) 似乎为空。
我使用gdb 来调试链接器,我认为gdb 本身使用_dl_fixup 来完成一些任务。如果我不使用 gdb,则 _dl_fixup 将仅在 _dl_start 之后调用。
最佳答案
So I thought it's called only after linker starts and has loaded some libraries
没错。
I find the function is called even before _dl_start
这是不正确的:_dl_fixup
仅在 _dl_start
之后调用。
很遗憾,您没有提供任何有关如何得出错误结论的详细信息,因此无法告诉您哪里出错了,但您确实犯了(至少一个)错误。
关于c - 为什么在动态链接器启动之前调用 _dl_fixup?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34220222/
我正在尝试了解 glibc 动态链接器的工作原理。我知道在_dl_runtime_resolve中调用了_dl_fixup,解决了重定位问题。所以我认为只有在链接器启动并加载了一些库之后才会调用它。但
我是一名优秀的程序员,十分优秀!