我试图查看哪个系统调用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
,有什么方法可以恢复旧的行为吗?
答案 0 :(得分:10)
问题与代码签名有关。如果您制作副本然后使用您自己的身份(或者,可能是任何非Apple身份)重新签名,那么dtrace
将附加到它就好了。
$ mkdir ~/temp
$ cp /bin/ps ~/temp/
$ codesign -f -s `whoami` ~/temp/ps
$ sudo dtruss ~/temp/ps -p 43520 -o args
答案 1 :(得分:4)
无法控制使用受限制的权利签署的可执行文件
安全完整性保护('无根')现在阻止dtruss在这里运行。
您可以disable it启动进入恢复模式,但看起来dtrace已被特别阻止,无论无根状态如何,如果您搜索,可以在source code中看到“dtrace无法控制”。
您还可以从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.
*/