2016-11-29 55 views
1

我想知道什麼系統調用是由echo(該命令,而不是內置的shell)產生的,所以我決定通過dtrace監聽它。具體而言,我使用了dtruss爲什麼我不能跟蹤`/ bin/echo`所產生的系統調用?

考慮到了以下工作(跟蹤由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表明,它能夠在諸如ls命令使用dtruss(他的實例是sudo dtruss ls -l hfsslower.d,其中hfsslower.d是一個普通的文本文件)。這篇博客文章是在2011年撰寫的,涉及Mac OS X.但是我知道,OS X自那時起就有了各種安全增強功能。

難道是我碰到某種OS X安全嗎?我正在使用OS X 10.12 Sierra。

回答

2

我應該試着搜索錯誤信息。

Looks like it is indeed System Integrity Protection

您不能再將DTrace連接到Mac上的「受限制」進程。而「限制」我的意思是每一個內置的實用程序,守護進程或應用程序。

我的文章的解釋是:

  • csrutil enable --without dtrace沒有足夠重視的DTrace內置了可執行
  • 你需要,而不是做一個全面csrutil disable(該關閉SIP完全,這是過度殺傷,並在您的安全造成差距,但似乎是唯一的解決方案)