LD_PRELOAD和跟踪有什么区别



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

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的。

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

最新更新