Fli*_*imm 63 dtrace osx-elcapitan
它看起来像在OS X 10.11 El Capitan中,dtruss并且dtrace不能再做他们想要做的事了.这是我尝试运行时遇到的错误sudo dtruss curl ...:
dtrace:无法执行curl:dtrace无法控制使用受限制的权利签名的可执行文件
我遇到过人们注意到这个问题,但到目前为止还没有解决方案.
有没有办法解决这个问题或解决这个问题?
Rag*_*dda 27
一旦你csrutil enable --without dtrace,可以选择复制二进制文件:在一个终端窗口中运行二进制文件,并在另一个终端窗口中跟踪终端进程本身.
在第一个终端窗口中,找到它的PID:
$ echo $$
1154
Run Code Online (Sandbox Code Playgroud)
在第二个终端窗口中,开始跟踪:
$ sudo dtruss -p 1154 -f
Run Code Online (Sandbox Code Playgroud)
返回,在第一个终端窗口中,运行要跟踪的进程:
$ ls
Run Code Online (Sandbox Code Playgroud)
此时,您应该在第二个窗口中看到跟踪.忽略您正在跟踪的PID的条目(例如,1154),其余的是您感兴趣的过程(及其后代).
1154/0x1499: sigprocmask(0x3, 0x7FFF53E5C608, 0x0) = 0x0 0
1154/0x1499: sigprocmask(0x1, 0x7FFF53E5C614, 0x7FFF53E5C610) = 0x0 0
3100/0xa9f3: getpid(0x7FFF82A35344, 0x7FFF82A35334, 0x2000) = 3100 0
3100/0xa9f3: sigprocmask(0x3, 0x10BE32EF8, 0x0) = 0x0 0
Run Code Online (Sandbox Code Playgroud)
Cha*_*les 26
对于那些想要在系统之后运行二进制文件的人来说csrutil disable,copy它是一个非"限制"的目录,例如,/tmp
CC@~ $ csrutil status
System Integrity Protection status: disabled.
CC@~ $ cp /bin/echo /tmp
CC@~ $ sudo dtruss /tmp/echo
SYSCALL(args) = return
thread_selfid(0x0, 0x0, 0x0) = 46811 0
csops(0x0, 0x0, 0x7FFF51B6CA20) = 0 0
issetugid(0x0, 0x0, 0x7FFF51B6CA20) = 0 0
shared_region_check_np(0x7FFF51B6A918, 0x0, 0x7FFF51B6CA20) = 0 0
stat64("/usr/lib/dtrace/libdtrace_dyld.dylib\0", 0x7FFF51B6BEA8, 0x7FFF51B6CA20 = 0 0
Run Code Online (Sandbox Code Playgroud)
请参阅@JJ的评论:https://apple.stackexchange.com/questions/208762/now-that-el-capitan-is-rootless-is-there-any-way-to-get-dtrace-working/224731#224731
Ale*_*kov 17
安德鲁注意到它是因为系统完整性保护,也称为"无根".
您可以完全或部分禁用它(仅启用具有某些限制的dtrace).
完全禁用SIP
虽然Apple不推荐,但您可以在Mac上完全禁用系统完整性保护.这是如何做:
- 将Mac启动到恢复模式:重启并按住cmd + R直到出现进度条.
- 转到"实用工具"菜单.选择那里的终端.
- 输入此命令以禁用系统完整性保护:
$ csrutil disable它会要求你重新启动 - 这样做,你就可以免费使用SIP了!
部分禁用SIP
幸运的是,SIP不是单片的:它是由许多不同的模块构建的,我们可以单独禁用/启用它们.
从上面的"完全禁用SIP"部分重复步骤1和2.现在在终端输入以下命令:
Run Code Online (Sandbox Code Playgroud)$ csrutil clear # restore the default configuration first $ csrutil enable --without dtrace # disable dtrace restrictions *only*重新启动并再次享受您的操作系统.
Dtrace开始工作,但您仍然无法将dtrace附加到受限制的进程
说明来源:http://internals.exposed/blog/dtrace-vs-sip.html
我会将此作为评论发布,但我不允许.
禁用SIP是没有必要的.只需将二进制文件复制到备用位置即可正常工作:
$ sudo dtruss ping google.com
dtrace: system integrity protection is on, some features will not be available
dtrace: failed to execute ping: dtrace cannot control executables signed with restricted entitlements
$ sudo cp $(which ping) .
$ sudo dtruss ./ping google.com
dtrace: system integrity protection is on, some features will not be available
SYSCALL(args) = return
PING google.com (172.217.10.78): 56 data bytes
^C
$ csrutil status
System Integrity Protection status: enabled.
Run Code Online (Sandbox Code Playgroud)
对于复制后仍能正常运行的二进制文件,这是最佳选项,因为它捕获了整个过程的生命周期,并且不需要禁用任何保护.
似乎完全禁用SIP仍然会阻塞受限制进程的truss:
$ /usr/bin/csrutil status
System Integrity Protection status: disabled.
$ sudo dtruss /bin/echo "blah"
dtrace: failed to execute /bin/echo: dtrace cannot control executables signed with restricted entitlements
$ sw_vers
ProductName: Mac OS X
ProductVersion: 10.11.2
BuildVersion: 15C50
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
22484 次 |
| 最近记录: |