- LD_PRELOAD的hook方式可以hook大部分的函数,通常需要通过dlopen获取共享库的句柄,然后用dlsym获取对应名称的函数地址, 用于后续调用;
- 这种方式对于绝大多数的libc暴露的函数均有效,但是对于dlopen这种机制中需要使用的函数无法进行hook,因为一旦hook了dlopen函数,则会在获取共享库句柄的时候,陷入死循环;
- 解决方式:自主编译libc,建立一个和dlopen相同功能不同名称的函数,替换原有的libc.so,在获取共享库句柄的时候,调用自定义的dlopen函数即可避免陷入死循环;
- 采用ptrace的方式hook系统调用,避免hook机制上的缺陷;