5

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

4

1 回答 1

6

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基于。

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

于 2012-12-13T19:01:48.830 回答