一个用于跟踪 execve{,at} 和执行前行为的小工具。
tracexec 可以帮助你了解在执行命令时程序是如何被执行的。
它对于调试构建系统、理解 shell 脚本的实际行为、查明专有软件运行了哪些程序等非常有用。
在带伪终端的 TUI 模式下,你可以轻松查看 exec 事件的详细信息,并与伪终端内的进程进行交互。
使用 root 权限,你还可以跟踪 setuid 二进制文件并了解它们的工作原理。 但请注意,这与 seccomp-bpf 优化不兼容,因此性能会大大降低。
sudo tracexec --user $(whoami) tui -t -- sudo ls
也可以进行嵌套的 setuid 二进制文件跟踪:一个实际用例是跟踪 extra-x86_64-build
(Arch Linux 的需要 sudo 的构建工具):
在这个实际例子中,我们可以很容易看到 _FORTIFY_SOURCE
从 2
重新定义为 3
,这导致了编译器错误。
tracexec 还可以用作调试器启动器,使程序调试变得更容易。例如,调试由 shell/python 脚本执行的程序(可能使用管道作为程序的标准输入输出)并不简单或方便。以下视频展示了如何使用 tracexec 启动 gdb 来调试由 shell 脚本通过管道连接的两个简单程序。
https://github.com/kxxt/tracexec/assets/18085551/72c755a5-0f2f-4bf9-beb9-98c8d6b5e5fd
请阅读 gdb-launcher 示例以获取更多详情。
在日志模式下,默认情况下,tracexec
会打印文件名、argv 以及环境变量和文件描述符的差异。
示例:tracexec log -- bash
(在交互式 bash shell 中)
--show-cmdline
重构命令行$ tracexec log --show-cmdline -- <command> # 示例: $ tracexec log --show-cmdline -- firefox
可以使用 --stdio-in-cmdline
和 --fd-in-cmdline
来(希望能)重现进程使用的标准输入输出。
但请注意,当涉及管道、套接字等时,结果可能不准确。
tracexec log --show-cmdline --stdio-in-cmdline -- bash
--show-interpreter
显示 shebang 指示的解释器并使用 --show-cwd
显示当前工作目录。
$ tracexec log --show-interpreter --show-cwd -- <command> # 示例:运行 Arch Linux makepkg $ tracexec log --show-interpreter --show-cwd -- makepkg -f
通过 cargo:
cargo install tracexec --bin tracexec
Arch Linux 用户也可以通过官方仓库使用 pacman -S tracexec
安装。
你可以从发布页面下载二进制文件
通用 CLI 帮助:
execve{,at} 和执行前行为的跟踪器,调试器启动器。