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