启用探针时出错:syscall::open_nocancel:entry):DIF 中操作 #2 中的无效用户访问

ken*_*orb 13 osx kernel dtrace

我有以下单行显示进程打开的文件:

sudo dtrace -n 'syscall::open*:entry { printf("%s %s",execname,copyinstr(arg0)); }'
Run Code Online (Sandbox Code Playgroud)

但是我有很多重复的错误,例如:

dtrace: error on enabled probe ID 4 (ID 946: syscall::open_nocancel:entry): invalid user access in action #2 at DIF offset 24

dtrace: error on enabled probe ID 7 (ID 160: syscall::open:entry): invalid user access in action #2 at DIF offset 24

我知道我可以通过重定向到2> /dev/null.

这些错误意味着什么以及它们为什么会发生?

dtrace错误还是某些特定过程导致了这种情况?以及如何解决这个问题?

我使用的是 OS X 10.11.2

ken*_*orb 18

这可能与 El Capitan 及其csrutil status可能影响dtrace行为的系统完整性保护 ( ) 相关。

潜在的修复包括将 Mac 重新启动到恢复模式(?-R在启动时),然后在终端运行:

csrutil enable --without dtrace
Run Code Online (Sandbox Code Playgroud)

保持启用 SIP,但禁用 DTrace 限制(注意:这是未记录的参数)。

或者通过以下方式完全禁用 SIP:

csrutil disable # Not recommended.
Run Code Online (Sandbox Code Playgroud)

看: