2012-12-13 33 views
2

这两种方法都用于收集系统调用参数并返回它们的值。当我们更喜欢LD_PRELOAD,为什么?也许我们可以说我们只能通过strace收集系统调用,但我们可以通过LD_PRELOAD收集图书馆电话。然而,还有另一个追踪者名为ltrace的图书馆。LD_PRELOAD和strace之间有什么区别?

回答

3

strace正在使用系统调用ptrace(2)(可能与PTRACE_SYSCALL),所以会捕获每个系统调用(通过由ptrace安装的内核钩子)。它可以在任何可执行文件上工作,即使在静态链接的文件上,也可以在你的发行版的GNU Glibc之外使用(比如musl-libc,或者一些像旧版本busybox这样的汇编书写工具)。

LD_PRELOAD技巧使用动态加载器例如, /lib64/ld-linux-x86-64.so.2/lib/ld.so(请参阅ld.so(8)手册页)等...因此无法与静态链接的可执行文件(或使用其他动态加载器和您的GNU libc以外的其他文件)一起使用。

ltrace也可能是ptrace的依据。

而所有这些都是免费软件,你可以研究他们的源代码(并改进它)。

相关问题