如何查看程序运行的可执行文件?

Eri*_*ric 7 debugging executable audit

有没有办法查看或获取程序使用的可执行文件列表?

一个特殊的例子是文件滚轮。有没有办法查看它使用了哪些可执行文件,如果有多个可执行文件可以用于同一任务,例如 unrar 和 p7zip-rar。

程序“ldd”可用于查看程序使用的库,但不是实时的。是否有可执行文件的等价物,最好是实时的?或者其他什么方法?

Ste*_*n D 8

尝试从strace开始。当一个程序调用另一个程序时,它会使用其中一个exec系统调用。例如,给定以下 ruby​​ 脚本:

#!/usr/bin/env ruby
system("ls")
system("df")
Run Code Online (Sandbox Code Playgroud)

我可以 grepstrace输出以找出它运行的可执行文件:

$ strace -f ./test.rb  2>&1 | grep exec
execve("./test.rb", ["./test.rb"], [/* 23 vars */]) = 0
execve("/opt/opscode/embedded/bin/ruby", ["ruby", "./test.rb"], [/* 23 vars */]) = 0
[pid  7696] read(5, "ame+.  If the +exec_name+\n  # is"..., 8192) = 8192
[pid  7698] execve("/bin/ls", ["ls"], [/* 23 vars */] <unfinished ...>
[pid  7698] <... execve resumed> )      = 0
[pid  7700] execve("/bin/df", ["df"], [/* 23 vars */] <unfinished ...>
[pid  7700] <... execve resumed> )      = 0
Run Code Online (Sandbox Code Playgroud)

-f确保strace的痕迹也子进程。一开始你可以看到 shell 正在执行我的脚本和 ruby​​ 解释器。然后我们可以看到这个脚本还执行了/bin/ls和/bin/df。请注意,此方法只会显示在运行时使用的可执行文件,而不是在运行时状态不同时可能已使用的所有可执行文件。

  • 或者,“strace -e trace=process”使“strace”仅打印出与进程相关的系统调用,因此“grep”可能是不必要的。(我认为您还可以使用“strace -e trace=execve”来仅准确打印对“execve()”的调用,对于其他系统调用也类似。) (2认同)