Ahora que El Capitán está "desarraigado", ¿hay alguna manera de hacer que dtrace funcione?

18

Descubrí que dtrace es una herramienta invaluable para la depuración y la solución de problemas de todo tipo, por no mencionar las dos docenas de scripts del kit de herramientas dtrace enviados por Apple como parte de El Capitán.

Sin embargo, en El Cap, ejecutar dtrace generalmente resulta en un sinfín de errores que hacen que dtrace sea casi inútil.

    
pregunta bahamat 02.10.2015 - 23:45

2 respuestas

17

La protección de integridad del sistema en 10.11 puede desactivarse, aunque no es algo que deba hacer a la ligera.

Puedes deshabilitar el SIP completamente haciendo lo siguiente:

  1. Reinicia tu mac
  2. Mantenga presionado ⌘R durante el reinicio
  3. Desde el menú Utilidades , ejecute Terminal
  4. Ingrese el siguiente comando
csrutil disable

Alternativamente, puedes volver a habilitar SIP mientras sigues permitiendo que dtrace funcione también ejecutando lo siguiente:

csrutil enable --without dtrace

Tenga en cuenta que, al hacerlo, recibirá la siguiente advertencia:

  

Esta es una configuración no compatible, es probable que se rompa en el futuro y deje su máquina en un estado desconocido.

Una vez que reinicies, dtrace funcionará como lo hizo en Yosemite.

    
respondido por el bahamat 02.10.2015 - 23:45
3

Copie el binario en un directorio que no esté "restringido", por ejemplo, /tmp

csrutil disable no funciona para dtruss hasta cierto punto. Pero como @ J.J dijo que chroot funciona, esto me inspiró.

Todavía no sé por qué esto funciona. Puede que tenga algo que ver con los "directorios protegidos", supongo.

Aquí está la prueba:

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
    
respondido por el Charles 24.01.2016 - 06:27

Lea otras preguntas en las etiquetas