gem-universe / blog

0 stars 0 forks source link

[操作系统]22. 可执行文件和加载(2) #26

Open supergem3000 opened 8 months ago

supergem3000 commented 8 months ago

22. 可执行文件和加载 (2) (jyywiki.cn)

动态链接和加载原理

实现库的运行时加载

  • 生成位置无关代码:跳转时相对于pc指针跳转。
  • 对外部库函数调用时查表的:call TABLE(x)
  • 在运行(加载)时填表 此时便有了GOT:Global Offset Table

编译源代码,有的调用时静态链接的,有的是动态链接的。在编译时(链接前)不知道时哪种情况,怎么办?如果所有的调用都查表,比较繁琐。 为不同方式的跳转都只生成call指令。 此时发明了PLT:Procedure Linkage Table 在链接时,发现如果时跳转到另一个动态链接库,call指令变成 call printf@PLT,并在二进制程序内添加一段东西,也就是PLT。

LD_PRELOAD

在加载之前preload。利用动态链接特性,加载一个自己的库,占据符号。(Hook技术) 其他操作系统上的Hooking:Windows DLL Injection、Android LSPosed