Open supergem3000 opened 8 months ago
22. 可执行文件和加载 (2) (jyywiki.cn) 动态链接和加载原理 实现库的运行时加载 生成位置无关代码:跳转时相对于pc指针跳转。 对外部库函数调用时查表的:call TABLE(x) 在运行(加载)时填表 此时便有了GOT:Global Offset Table
22. 可执行文件和加载 (2) (jyywiki.cn)
实现库的运行时加载
编译源代码,有的调用时静态链接的,有的是动态链接的。在编译时(链接前)不知道时哪种情况,怎么办?如果所有的调用都查表,比较繁琐。 为不同方式的跳转都只生成call指令。 此时发明了PLT:Procedure Linkage Table 在链接时,发现如果时跳转到另一个动态链接库,call指令变成 call printf@PLT,并在二进制程序内添加一段东西,也就是PLT。
在加载之前preload。利用动态链接特性,加载一个自己的库,占据符号。(Hook技术) 其他操作系统上的Hooking:Windows DLL Injection、Android LSPosed
编译源代码,有的调用时静态链接的,有的是动态链接的。在编译时(链接前)不知道时哪种情况,怎么办?如果所有的调用都查表,比较繁琐。 为不同方式的跳转都只生成call指令。 此时发明了PLT:Procedure Linkage Table 在链接时,发现如果时跳转到另一个动态链接库,call指令变成 call printf@PLT,并在二进制程序内添加一段东西,也就是PLT。
LD_PRELOAD
在加载之前preload。利用动态链接特性,加载一个自己的库,占据符号。(Hook技术) 其他操作系统上的Hooking:Windows DLL Injection、Android LSPosed