如何ltrace https://www.man7.org/linux/man-pages/man1/ltrace.1.html work?
它如何找出程序调用了哪些库函数?
是否存在所有对库函数的调用都经过的公共代码路径?或许ltrace
在这个公共代码路径中设置断点?
动态可执行文件具有链接器在解析需要连接到库函数的引用时使用的符号表。 (您可以通过运行自己看到这一点objdump -T /path/to/binary
).
该符号表可以通过其他工具访问——例如ltrace
——同样,确定需要挂钩哪些函数并单独遍历该列表也很简单。
See 关于 ltrace 内部结构的讨论 https://www.kernel.org/doc/ols/2007/ols2007v1-pages-41-52.pdf在 Ottowa Linux Symposium 上提出,该研讨会提供了详细的功能细分;要跟踪源代码,请参阅官方存储库 http://anonscm.debian.org/cgit/collab-maint/ltrace.git, or a 第三方github镜像 https://github.com/ice799/ltrace.
一些较新的版本(比那个谈话更新)也吸引了dlopen()
call,也能够跟踪动态加载库的调用。稍微想一想,那里的机制应该是相当明显的——如果可以替换的话dlopen()
用垫片(当dlopen()
它本身是动态链接的,如上所述),然后可以在它返回的任何函数指针上设置断点。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)