这两种方法都用于收集系统调用以及参数和返回它们的值。当我们更喜欢LD_PRELOAD
时,为什么?也许我们可以说我们只能通过strace
收集系统调用,但我们可以使用LD_PRELOAD
技巧收集库调用。但是,对于名称为ltrace
的库,还有另一个跟踪器。
答案 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
。
所有这些都是免费软件,你可以研究他们的源代码(并改进它)。