Macos DTRUS在OS X 10.11上的ps上失败
我试图查看在OS X 10.11(El Capitan)上使用哪个syscallMacos 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
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专门用于不在系统进程上工作。我已经更新了答案。是的,这是有意义的,因为源代码中的注释指的是使用受限权限签名的流程,因此删除签名将改变该逻辑的处理方式。