这两种方法都用于收集系统调用以及参数和它们的返回值。当我们更喜欢 LD_PRELOAD
为什么?也许我们可以说我们只能通过 strace
收集系统调用。但我们可以使用 LD_PRELOAD
收集库调用诡计。但是,对于名称为 ltrace
的库,还有另一个跟踪器。 .
最佳答案
strace
正在使用 ptrace(2) syscall(可能带有 PTRACE_SYSCALL
),因此将捕获每个系统调用(通过 ptrace
安装的内核 Hook )。它适用于任何可执行文件,甚至是静态链接的可执行文件,或者那些使用您的发行版的 GNU Glibc 以外的其他东西的可执行文件(例如 musl-libc 或某些汇编编写的实用程序,如旧版本的 busybox
)。LD_PRELOAD
技巧使用动态加载器,例如/lib64/ld-linux-x86-64.so.2
或 /lib/ld.so
(参见 ld.so(8) 手册页)等等...所以不能使用静态链接的可执行文件(或者那些使用动态加载器和 GNU libc 以外的东西的可执行文件)。ltrace
大概也是ptrace
基于。
所有这些都是免费软件,您可以研究它们的源代码(并改进它)。
关于hook - LD_PRELOAD 和 strace 有什么区别?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13865656/