首页 > 解决方案 > 复制初始全局偏移表

问题描述

我正在尝试开发一个功能,该功能基本上会在执行期间的任何时候重置全局偏移表。第一步是通过获取地址找到我成功到达的条目的路径,DT_JMPREL然后添加基地址。然后遍历具有_JMPSLOT_类型的条目数。

我测试了代码并将其函数地址与 gdb 输出进行了比较,它工作正常。现在问题来了,我应该检查文件中的哪个部分以glibc/elf/浏览所有共享库的列表,但 GOT 条目仍然指向 PLT 指令(在惰性绑定之前/与 elf 中的方式相同)?我想dl-load.c可能是那个,但我不太确定我应该在哪里这样做

标签: linuxembedded-linuxelfglibc

解决方案


初始重定位发生在elf/dl-reloc.c, 附近:

#include "dynamic-link.h"

    ELF_DYNAMIC_RELOCATE (l, lazy, consider_profiling, skip_ifunc);

这是glibc仍然使用嵌套函数的地方,整个事情有点……尴尬。此代码也用于 的自重定位ld.so,因此它不能在某些目标上使用函数调用和全局数据访问。


推荐阅读