Sekarang El Capitan sudah “tidak dapat ditanami”, adakah cara untuk membuat dtrace bekerja?

21

Saya menemukan dtrace sebagai alat yang tak ternilai untuk debugging dan mengatasi segala macam masalah, belum lagi dua lusin skrip toolkit dtrace yang dikirimkan oleh Apple sebagai bagian dari El Capitan.

Pada El Cap, menjalankan dtrace biasanya menghasilkan kesalahan yang tak ada habisnya, membuat dtrace tidak berguna.

bahamat
sumber

Jawaban:

18

Perlindungan Integritas Sistem di 10.11 dapat dinonaktifkan, meskipun itu bukan sesuatu yang harus Anda lakukan dengan enteng.

Anda dapat menonaktifkan SIP sepenuhnya dengan melakukan hal berikut:

  1. Nyalakan ulang mac Anda
  2. Tahan ⌘R selama reboot
  3. Dari menu Utilities , jalankan Terminal
  4. Masukkan perintah berikut
csrutil disable

Atau Anda dapat mengaktifkan kembali SIP sambil tetap memungkinkan dtraceuntuk bekerja dengan juga menjalankan yang berikut:

csrutil enable --without dtrace

Perhatikan, saat melakukannya Anda akan mendapatkan peringatan berikut:

Ini adalah konfigurasi yang tidak didukung, kemungkinan rusak di masa depan dan meninggalkan mesin Anda dalam kondisi yang tidak diketahui.

Setelah Anda reboot, dtraceakan berfungsi seperti di Yosemite.

bahamat
sumber
Bagus sekali - saya melewatkan posting ini ketika menjawab utas lainnya :-) Saya akan pasang kembali video dan blog sesi Rich : derflounder.wordpress.com/2015/10/01/...
bmike
2
Ini tidak sepenuhnya benar. Dengan DTrace diaktifkan melalui csrutil Anda dapat menjalankan DTrace kernel - tetapi hanya pada binari yang tidak memiliki flag hak kepemilikan terbatas. Anda tidak dapat menghapus bendera hak terbatas, bahkan sebagai root, dengan semua SIP dimatikan. Ini berarti bahwa dengan DTrace diaktifkan Anda hanya dapat DTrace binari non-sistem. Namun, jika biner non-sistem menggunakan shared-lib yang terinstal di folder sistem (yang dilakukan banyak program), Anda juga tidak dapat DTrace. Jadi satu-satunya cara untuk membuat dtrace bekerja 'seperti di Yosemite' adalah membuat salinan dari semua folder sistem Anda, dan lakukan chroot
JJ
4

Salin biner ke direktori yang tidak "dibatasi", misalnya, /tmp

csrutil disabletidak berfungsi untuk dtruss sampai batas tertentu. Tapi seperti yang dikatakan @JJ chrootberhasil, ini menginspirasi saya.

Masih saya tidak tahu mengapa ini berhasil. Mungkin ada hubungannya dengan "direktori terlindungi", saya kira.

Inilah tesnya:

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
Charles
sumber