DTrace 捕获应用于某些文件的任何 chmod

Rob*_*ino 6 osx monitoring system-calls dtrace

在 Mac OS X 目录下,/audit我有一些用户可以chmod根据自己的喜好访问的文件。

我需要chmod通过记录时间、用户和文件来审核对任何文件所做的任何事情chmod,尤其是后者。

我可以dtrace -n 'syscall::chmod:entry'并检测到事件,如何读取第一个参数chmod

man 2 chmod 告诉我路径在第一个参数中:

chmod(const char *path, mode_t mode);
Run Code Online (Sandbox Code Playgroud)

但我怎么读args[0]?我想我这样做是错误的。也许条目与实际的系统调用不对应?

如果我有一个可以监控的探针,我如何检查它提供哪些参数供访问以及它们是什么类型?我假设一些指针需要根据它们的数据布局取消引用..

Sco*_*amb 6

参数在arg0,但这是调用者的用户空间地址而不是实际的字符串。您还需要用 a 包装它copyinstr()

dtrace -n 'syscall::chmod:entry { printf("%d %s", uid, copyinstr(arg0)); }'
Run Code Online (Sandbox Code Playgroud)