Mac OSX:如何使用dtruss?

21

我试图在Mac OSX Catalina中解除一个进程的调试状态,但是dtrace报告了一个错误。

$ sudo dtruss whoami                 
dtrace: system integrity protection is on, some features will not be available

dtrace: failed to execute whoami: (os/kern) failure

我基本上想要获取一个堆栈跟踪。有人可以提供完成这个任务的指导吗?

谢谢


1
您需要至少部分关闭系统完整性保护(SIP)。这是几个apple.SE问题的跨站点重复:此处此处此处 - Gordon Davisson
好奇,使用brew提供的strace有什么问题吗?例如:https://formulae.brew.sh/formula/strace - Charlie Parker
有没有可能在不执行这个问题/帖子/答案中建议的复杂操作的情况下运行dtruss? - Charlie Parker
请跟踪Mac OS X程序的系统调用,您可以使用DTrace工具。DTrace是一种动态跟踪框架,可用于监视应用程序和操作系统的活动。它允许您在运行时检查和修改系统软件的行为,包括系统调用。要使用DTrace,请编写一个D脚本,该脚本描述了您要跟踪的系统调用,并指定要执行的操作。然后,使用dtrace命令运行脚本以启动跟踪。 - Charlie Parker
2个回答

21
本文介绍如何完成以下操作: 在启用SIP的系统上启用D-Trace 您可以通过执行以下步骤完全禁用SIP:
  1. 重新启动您的Mac
  2. 在重新启动期间按住⌘R
  3. 实用工具菜单中运行终端
  4. 输入以下命令
csrutil disable

或者,您可以重新启用SIP,同时仍然允许dtrace工作,方法是同时运行以下命令:

csrutil enable --without dtrace

1
没错,这应该可以工作。请注意,macOS自带的dtruss相当基础/有缺陷,因此您可能需要使用已修补的版本,例如https://github.com/microsoft/scalar/tree/08abf3732be892d60e770d0539635f8bbe0fe887/Scripts/Mac/Tracing(披露:这些是我的补丁)。 - pmdj
4
与其全盘禁用,选择优先使用csrutil enable --without dtrace命令更为重要。该命令同样能够完成任务,并且不会关闭所有可能使您的系统更加容易受到攻击的安全功能。 - dkaranovich
2
更新:我已经为更新/改进的dtruss制作了一个更永久的主页,网址是:https://gitlab.com/pmdj/macos-dtrace-scripts - 我不再拥有原始存储库的写入访问权限,它只是一个与其他项目无关的小脚本。 - pmdj
好奇,使用brew提供的strace有什么问题吗?例如:https://formulae.brew.sh/formula/strace - Charlie Parker
@CharlieParker,...你看过那个页面吗?它非常明确地说明了它所提到的strace副本仅适用于Linux,没有任何其他平台的二进制文件,并且Mac安装计数器都是零。 (话虽如此,出于其他原因,我个人不使用Homebrew;我认为它所谓的“安全模型”在全局共享、用户可写位置安装软件方面存在极大的不安全性,并且更喜欢坚持使用更好设计的替代方案)。 - Charles Duffy
显示剩余2条评论

4
如果你使用的是苹果芯片(例如现在的M1),你不应该按下⌘R进入恢复模式。替代方法是一直按住电源按钮,直到屏幕显示"loading setting..."。
如果您想跟踪内置命令,例如lscsrutil enable --without dtrace对我无效,但csrutil disable有效。

1
如我在另一个回答中所述,您可以运行 csrutil enable --without dtrace --without debug 以使 dtrace 在不完全禁用 SIP 的情况下正常工作。 - Terrance Kennedy
好奇,使用brew提供的strace有问题吗?例如:https://formulae.brew.sh/formula/strace - Charlie Parker
3
@CharlieParker 是的,strace 只适用于 Linux,不能用于 macOS。 - Ralph
能否在不执行这个问题/帖子/答案中建议的复杂操作的情况下运行dtruss? - Charlie Parker
@CharlieParker 我认为这是不可能的,因为 macOS 的安全策略。 - MrZ

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