LD_PRELOAD和strace之间有什么区别?

时间:2012-12-13 17:57:56

标签: hook system-calls strace ld-preload

这两种方法都用于收集系统调用以及参数和返回它们的值。当我们更喜欢LD_PRELOAD时,为什么?也许我们可以说我们只能通过strace收集系统调用,但我们可以使用LD_PRELOAD技巧收集库调用。但是,对于名称为ltrace的库,还有另一个跟踪器。

1 个答案:

答案 0 :(得分:5)

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

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