Macos DTRUS在OS X 10.11上的ps上失败

Macos DTRUS在OS X 10.11上的ps上失败,macos,osx-elcapitan,dtrace,truss,dtruss,Macos,Osx Elcapitan,Dtrace,Truss,Dtruss,我试图查看在OS X 10.11(El Capitan)上使用哪个syscallps获取进程的命令行,但遇到以下错误: # dtruss ps -p 43520 -o args dtrace: failed to execute ps: dtrace cannot control executables signed with restricted entitlements 谷歌搜索的结果是,制作一份ps的副本可以让我绕过这个问题,但这对我不起作用。为什么我不能在任意二进制文件上运行dtru

我试图查看在OS X 10.11(El Capitan)上使用哪个syscall
ps
获取进程的命令行,但遇到以下错误:

# dtruss ps -p 43520 -o args

dtrace: failed to execute ps: dtrace cannot control executables signed with restricted entitlements
谷歌搜索的结果是,制作一份
ps
的副本可以让我绕过这个问题,但这对我不起作用。为什么我不能在任意二进制文件上运行
dtruss
,还有什么方法可以恢复旧的行为

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

安全完整性保护(“无根”)现在阻止DTRUS在此操作

您可以通过引导进入恢复模式进行恢复,但无论无根状态如何,dtrace似乎都已被明确阻止,如搜索“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.
     */
/*
* :
*如果流程使用受限权限签名,则libdtrace\u dyld
*在此过程中不会注入库。在这种情况下,我们杀死
*处理并报告错误。
*/

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

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

@Glyph,没有任何dtrace专门用于不在系统进程上工作。我已经更新了答案。是的,这是有意义的,因为源代码中的注释指的是使用受限权限签名的流程,因此删除签名将改变该逻辑的处理方式。