ltrace如何运作?
如何找出该程序的调用库函数?
是否存在所有对库函数调用的公共代码路径?也许ltrace在这个公共代码路径中设置断点?
谢谢!
答案 0 :(得分:4)
动态可执行文件具有链接器在解析需要连接到库函数的引用时使用的符号表。 (您可以通过运行objdump -T /path/to/binary
)来自行查看。
此符号表也可以通过其他工具访问 - 例如ltrace
- 因此,确定需要挂钩哪些功能并单独浏览该列表是微不足道的。
请参阅Ottowa Linux研讨会上提供的a talk on ltrace internals,该研讨会提供详细的逐个功能细分;要了解来源,请参阅official repository或third-party github mirror。
一些较新的版本(比那次讲话更新)也挂钩了dlopen()
调用,以便能够跟踪动态加载库的调用。那个机制应该在一个时刻的思想上相当明显 - 如果一个人可以用垫片替换dlopen()
(当dlopen()
本身如上所述动态链接时),则可以设置一个断点在它返回的任何函数指针上。