为什么我不能跟踪`/ bin / echo`所做的系统调用?

时间:2016-11-29 10:45:41

标签: macos bsd dtrace

我想知道echo(命令,而不是shell内置)的系统调用是什么,所以我决定通过dtrace窥探它。具体来说,我使用了dtruss

考虑以下工作(跟踪sed所做的所有系统调用):

 sudo dtruss /usr/local/bin/sed 's/a/e/' <<< 'cat'
SYSCALL(args)        = return
thread_selfid(0x0, 0x0, 0x0)         = 470642 0
# and many more…

但如果我对echo尝试相同的操作,我会得到以下结果:

 sudo dtruss /bin/echo 'cat'
dtrace: failed to execute /bin/echo: unknown error

实际上:有许多命令,我会收到此错误。通用性是这些命令都在/bin/usr/bin

Brendan's blog建议可以对dtruss等命令使用ls(他的示例为sudo dtruss ls -l hfsslower.d,其中hfsslower.d是普通文本文件)。该博客文章发表于2011年,涉及Mac OS X.但我知道OS X从那时起就有各种安全增强功能。

难道我碰到了某种OS X安全性吗?我使用的是OS X 10.12 Sierra。

1 个答案:

答案 0 :(得分:2)

我应该尝试搜索错误消息。

Looks like it is indeed System Integrity Protection

  

您无法再将DTrace附加到Mac上的“限制”进程。而«限制»我的意思是每个内置的实用程序,守护程序或应用程序。

我对这篇文章的解释是:

  • JavaFX不足以将DTrace附加到内置可执行文件
  • 你需要做一个完整的css(这完全关闭了SIP,这是过度的,并且在你的安全性方面造成了一个缺口,但似乎是唯一的解决方案)