如何找出所有封闭源应用程序写入的位置?

Laz*_*zer 7 c c++ unix shell perl

我有一个应用程序(我没有的源代码),可以从这样的命令行调用

$ ./notmyapp
Run Code Online (Sandbox Code Playgroud)

我想知道应用程序写入的所有位置.它输出正在调用的目录中的一些文件,但我需要确保这些文件是唯一创建的文件.

因此,我需要隔离应用程序,以找出它在运行时创建/编辑的所有文件.

我怎样才能做到这一点?

某种方式使用Perl或C或C++?这些语言中的任何标准库都有办法做到这一点吗?

raf*_*afl 24

strace,ktrace/ kdump,truss,dtruss,或任何其他程序的平台提供了跟踪系统调用,也可能是你在找什么.

期待任何这些产品的大量输出.要确定应用程序正在读取和写入的文件,您可能希望将输出限制为几个系统调用.strace -eopen ./notmyapp, 例如.

应用程序也可以分叉子进程来完成它的一些工作.对于大多数系统调用跟踪器,您还必须具体跟踪这些子进程.有了strace,那就是strace -f ./notmyapp.

  • 您可能不希望哟在strace下启动您的应用程序.相反,只需正常启动您的应用程序,然后使用`strace -p $ pid`和您之前使用的应用程序的进程ID(例如,`ps`)将strace连接到它. (7认同)

Eug*_*ash 5

在unix系统中,您可以使用strace打印出所有系统调用的跟踪以及进程接收的信号:

$ strace ./notmyapp
Run Code Online (Sandbox Code Playgroud)

grep 可用于将输出限制为系统调用的子集:

$ strace ./notmyapp 2>&1 | egrep '(open|write)'
Run Code Online (Sandbox Code Playgroud)