dtruss在OS X 10.11上无法对ps命令进行跟踪

9

我试图查看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个回答

12

该问题与代码签名有关。如果您复制并使用自己的身份(或者可能是任何非苹果身份)重新签名,那么 dtrace 将可以成功附加到它。

$ mkdir ~/temp
$ cp /bin/ps ~/temp/
$ codesign -f -s `whoami` ~/temp/ps
$ sudo dtruss ~/temp/ps -p 43520 -o args

是的,这很有道理,因为源代码中的注释指的是使用受限权利签署的进程,因此删除签名将改变处理该逻辑的方式。 - TheDarkKnight

4

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

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

您可以通过进入恢复模式来禁用它,但是似乎无论rootless的状态如何,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.
     */

您IP地址为143.198.54.68,由于运营成本限制,当前对于免费用户的使用频率限制为每个IP每72小时10次对话,如需解除限制,请点击左下角设置图标按钮(手机用户先点击左上角菜单按钮)。 - TheDarkKnight

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接