这个 dtrace 错误是什么意思?

这个 dtrace 错误是什么意思?

当我在 2010 年末的 Macbook Pro(10.6.7)上运行时,iotop -C 5 12我反复出现此错误:

dtrace: error on enabled probe ID 5 (ID 19507: io:mach_kernel:buf_strategy:start): illegal operation in action #3 at DIF offset 0

这是什么原因造成的?如何解决?

答案1

根据这篇博文(有更多信息这里),这是由 iTunes 引起的,DTrace 会对其进行“过滤”,因此无法使用它来尝试破解 iTunes 的 DRM。

退出 iTunes 可以解决该错误。

答案2

错误输出到 stderr,可以通过运行以下命令将其过滤掉:

sudo iotop -C 5 12 2>/dev/null

这确实有过滤掉可能出现的其他错误的副作用。我发现这是一个不错的权衡,因为它使我的 iotop 输出更易读。

不幸的是,我不确定错误的原因是什么。我已经搜索过了,但还没有找到任何东西。

答案3

简而言之,当尝试跟踪已请求不被跟踪的进程时会显示错误。

从技术上讲,该错误不是由 iTunes 引起的,而是由禁用跟踪的进程引起的,使用如下代码。

ptrace(PT_DENY_ATTACH, 0, 0, 0);

该代码在内核级别上对进程设置了一个标志,从而阻止对该进程进行调试和跟踪。

最知名的实现此功能的应用程序恰好是 iTunes,该 API 可能就是为该应用程序的 DRM 而发明的,但该 API 也可供其他进程使用。我见过许多第三方应用程序使用该 API。

当然,像所有 DRM 一样,它也可以被破解。绕过此反跟踪和反调试功能的选项包括使用调试器跳过 API 调用,以及在内核空间中修补该功能的内核扩展。

答案4

取自https://unix.stackexchange.com/a/276219

这可能与 El Capitan 及其系统完整性保护 () 有关,csrutil status可能会影响dtrace行为。

潜在的修复方法包括将 Mac 重新启动到恢复模式(在启动时- R),然后在终端运行:

csrutil enable --without dtrace

保持 SIP 启用,但禁用 DTrace 限制(注意:这是未记录的参数)。

或者通过以下方式完全禁用 SIP:

csrutil disable # Not recommended.

看:

相关内容