在OS X 10.11上,ps上的dtruss失败

时间:2015-10-22 07:10:23

标签: macos osx-elcapitan dtrace truss dtruss

我试图查看哪个系统调用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,有什么方法可以恢复旧的行为吗?

2 个答案:

答案 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.
     */