Ora che El Capitan è "senza radici", c'è un modo per far funzionare dtrace?

18

Ho trovato che dtrace è uno strumento inestimabile per il debug e la risoluzione di tutti i tipi di problemi, per non parlare delle due dozzine di script del toolkit dtrace spediti da Apple come parte di El Capitan.

Su El Cap, però, eseguire dtrace di solito porta a una serie infinita di errori rendendo il dtrace quasi inutile.

    
posta bahamat 02.10.2015 - 23:45
fonte

2 risposte

17

La protezione dell'integrità del sistema in 10.11 può essere disabilitata, anche se non è qualcosa che dovresti fare alla leggera.

Puoi disabilitare SIP interamente facendo quanto segue:

  1. Riavvia il tuo mac
  2. Tieni premuto ⌘R durante il riavvio
  3. Dal menu Utilità , esegui Terminale
  4. Immettere il seguente comando
csrutil disable

In alternativa puoi riattivare SIP mentre permetti ancora a dtrace di funzionare eseguendo anche quanto segue:

csrutil enable --without dtrace

Nota che quando lo fai ricevi il seguente avviso:

This is an unsupported configuration, likely to break in the future and leave your machine in an unknown state.

Una volta riavviato, dtrace funzionerà come in Yosemite.

    
risposta data 02.10.2015 - 23:45
fonte
3

Copia il file binario in una directory che non è "limitata", ad esempio /tmp

csrutil disable non funziona per il segno in una certa misura. Ma come @ J.J ha detto che chroot funziona, questo mi ha ispirato.

Ancora non so perché funzioni. Potrebbe avere qualcosa a che fare con le "directory protette", immagino.

Ecco il 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
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%pre%", 0x7FFF51B6BEA8, 0x7FFF51B6CA20      = 0 0
", 0x7FFF51B6BEA8, 0x7FFF51B6CA20 = 0 0
    
risposta data 24.01.2016 - 06:27
fonte

Leggi altre domande sui tag