Şimdi El Capitan “köksüz” olduğuna göre, dtrace'ı çalıştırmanın bir yolu var mı?


21

El Capitan'ın bir parçası olarak Apple tarafından gönderilen iki düzine dtrace araç seti komut dosyasından bahsetmiyorum bile, dtrace'ın her türlü sorunu hata ayıklama ve sorun giderme için paha biçilmez bir araç olarak buldum .

Yine de El Cap'da dtrace çalıştırmak genellikle dtrace'ı işe yaramaz hale getiren sonsuz bir hataya neden olur.

Yanıtlar:


18

10.11'deki Sistem Bütünlüğü Koruması devre dışı bırakılabilir, ancak hafifçe yapmanız gereken bir şey değildir.

Aşağıdakileri yaparak SIP'yi tamamen devre dışı bırakabilirsiniz:

  1. Mac'inizi yeniden başlatın
  2. Yeniden başlatma sırasında ⌘R tuşunu basılı tutun
  3. Gönderen Araçları menüsünden çalıştırmak Terminal
  4. Aşağıdaki komutu girin
csrutil disable

Alternatif olarak dtrace, aşağıdakileri de çalıştırarak çalışmaya devam ederken SIP'yi yeniden etkinleştirebilirsiniz :

csrutil enable --without dtrace

Bunu yaparken aşağıdaki uyarıyı alacağınızı unutmayın:

Bu, gelecekte kırılması ve makinenizi bilinmeyen bir durumda bırakması muhtemel, desteklenmeyen bir yapılandırmadır.

Yeniden başlattığınızda, dtraceYosemite'de olduğu gibi çalışacaktır.


Aferin - Diğer konuya cevap verirken bu gönderiyi kaçırdım :-) Rich'in oturum videosunu ve blogunu yeniden takacağım
bmike

2
Bu tam olarak doğru değil. Csrutil aracılığıyla DTrace etkinleştirildiğinde, çekirdeğin DTrace'ini çağırabilirsiniz - ancak yalnızca kısıtlı yetkiler bayrağına sahip olmayan ikili dosyalarda. Tüm SIP kapalı iken, kısıtlanmış yetkiler bayrağını kök olarak bile kaldıramazsınız. Bu, DTrace etkinken yalnızca sistem dışı ikili dosyaları DTrace edebileceğiniz anlamına gelir. Ancak, sistem dışı bir ikili sistem klasörlerinde yüklü olan bir paylaşılan lib kullanırsa (birçok program bunu yapar), bunu da DTrace edemezsiniz. Bu yüzden 'Yosemite'de olduğu gibi' çalışmak için dtrace elde etmenin tek yolu, tüm sistem klasörlerinizin bir kopyasını oluşturmak ve aldatmaktır
JJ

4

İkili dosyayı "kısıtlanmamış" bir dizine kopyalayın, örneğin, /tmp

csrutil disablebir dereceye kadar dtruss için çalışmıyor. Ama @JJ'nin dediği gibi chroot, bu bana ilham verdi.

Hala neden işe yaradığını bilmiyorum. Sanırım, "korunan dizinler" ile bir ilgisi olabilir.

İşte test:

CC@~ $ csrutil status
System Integrity Protection status: disabled.
CC@~ $ sudo dtruss /bin/echo
dtrace: failed to execute /bin/echo: dtrace cannot control executables signed with restricted entitlements
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
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.