hook 问题记录。(inline)
https://zhuanlan.zhihu.com/p/44132805
dlsym 注意事项:
https://blog.csdn.net/Cxinsect/article/details/100761916
https://blog.csdn.net/caspiansea/article/details/51337727
LD_PRELOAD 详解:https://blog.fesnel.com/blog/2009/08/25/preloading-with-multiple-symbol-versions/
问题记录
1. hook 系统调用注意
在 hook 重写 malloc 类调用时,注意不要在函数内部使用 printf 等会分配内存的函数,可能会陷入无限递归的风险。也就是说,hook 函数时尽量不要调用其他系统函数。
尽量不要直接设置全局环境变量,而是将环境变量添加到要运行/调试的命令之前。
在 hook malloc 内部,必须要输出日志时,可以使用 write 来代替 printf 方法。
2. LD_PRELOAD 为何不能 hook printf
简单来说,就是 gcc 可能会优化 printf 为 puts。
实践证明,对于printf的参数如果是以’\n’结束的纯字符串,printf会被优化为puts函数,而字符串的结尾’\n’符号被消除。除此之外,都会正常生成call printf指令。
详见:https://wanghenshui.github.io/2019/01/02/ld-printf-puts.html