hook - LD_PRELOAD 和 strace 有什么区别?

标签 hook system-calls strace ld-preload

这两种方法都用于收集系统调用以及参数和它们的返回值。当我们更喜欢 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/

相关文章:

c - ptrace 读取子进程中的 errno 值

makefile - 与旧版本相比,CMake 3.16 在 Makefile 的生成阶段慢了几个数量级

SVN 更新后 Hook

c++ - Hook 窗口创建;钩子(Hook)没有被触发

javascript - 如何在 Handsontable 的 afterChange 中使用 getCellMeta?

c - ioctl 使用全局数组返回错误地址

java - 调试挂起的进程

c++ - 为什么必须将 SetWindowsHookEx 与 Windows 消息队列一起使用

c++ - 让 C++ 程序在不使用系统的情况下构建 Visual C++ 项目?

java - 通过java程序运行进程