8

我试图查看哪个系统调用ps用于获取 OS X 10.11(El Capitan)上进程的命令行,并遇到以下错误:

# dtruss ps -p 43520 -o args

dtrace: failed to execute ps: dtrace cannot control executables signed with restricted entitlements

谷歌搜索导致建议制作副本ps可以让我绕过这个,但这对我不起作用。为什么我不能再dtruss在任意二进制文件上运行,有什么办法可以恢复旧的行为?

4

2 回答 2

12

该问题与代码签名有关。如果您制作一份副本,然后用您自己的身份(或者可能是任何非 Apple 身份)重新签名,那么dtrace就可以附加到它上面。

$ mkdir ~/temp
$ cp /bin/ps ~/temp/
$ codesign -f -s `whoami` ~/temp/ps
$ sudo dtruss ~/temp/ps -p 43520 -o args
于 2015-11-18T10:01:21.273 回答
4

无法控制使用受限权利签名的可执行文件

安全完整性保护(“无根”)现在阻止 dtruss 在此处运行。

您可以通过启动进入恢复模式来禁用它,但无论无根状态如何,看起来 dtrace 都已被特别阻止,如果您搜索“dtrace cannot control” ,则可以在源代码中看到。

从 Pcreate 中的评论也可以看出:

    /*
     * <rdar://problem/13969762>:
     * If the process is signed with restricted entitlements, the libdtrace_dyld
     * library will not be injected in the process. In this case we kill the
     * process and report an error.
     */
于 2015-10-22T10:00:32.703 回答