【问题标题】:Copying initial Global offset table复制初始全局偏移表
【发布时间】:2021-10-04 05:48:43
【问题描述】:

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

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

【问题讨论】:

    标签: linux embedded-linux elf glibc


    【解决方案1】:

    最初的重定位发生在elf/dl-reloc.c,就在这里:

    #include "dynamic-link.h"
    
        ELF_DYNAMIC_RELOCATE (l, lazy, consider_profiling, skip_ifunc);
    

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2012-03-30
      • 2021-11-26
      • 2015-02-11
      • 2014-01-12
      • 2012-12-07
      • 2015-03-17
      相关资源
      最近更新 更多