为什么不能用LD_LIBRARY_PATH劫持 LIBC的函数
LD_LIBRARY_PATH是一个环境变量,用来指定程序在运行时加载共享库的路径。它的作用是告诉动态链接器在程序启动时从指定的路径中查找共享库。LD_LIBRARY_PATH的值会被动态链接器在程序启动时读取,所以它只影响到程序启动时的共享库加载。
劫持LIBC的函数需要在程序运行过程中替换掉原本的函数实现,这是通过在程序运行时修改ELF文件的GOT(Global Offset Table)来实现的。GOT是一个全局偏移表,用于存储程序运行时需要用到的全局变量和函数的地址。在程序启动时,动态链接器会将GOT中的函数地址替换为对应共享库中函数的地址。
LD_LIBRARY_PATH只能影响到程序启动时的共享库加载路径,而在程序运行过程中,动态链接器已经将GOT中的函数地址替换为对应共享库中函数的地址,所以无法通过修改LD_LIBRARY_PATH来劫持LIBC的函数。要实现函数劫持,需要使用其他方法,如使用LD_PRELOAD环境变量或LD_PRELOAD.so等方式来加载自己编写的共享库,从而替换掉原本的函数实现。
原文地址: http://www.cveoy.top/t/topic/i9co 著作权归作者所有。请勿转载和采集!