dtruss не работает на ps в OS X 10.11

Я пытался увидеть, какой системный вызов ps использует для получения командной строки процесса в OS X 10.11 (El Capitan) и столкнулся со следующей ошибкой:

# dtruss ps -p 43520 -o args

dtrace: failed to execute ps: dtrace cannot control executables signed with restricted entitlements

Поиск в Google привел к предположению, что создание копии ps позволит мне обойти это, но это не сработало для меня. Почему я больше не могу запускать dtruss на произвольных двоичных файлах, и есть ли способ восстановить старое поведение?


person Dan    schedule 22.10.2015    source источник


Ответы (2)


Проблема связана с подписью кода. Если вы сделаете копию, а затем повторно подпишете ее своим удостоверением (или, предположительно, любым удостоверением, не принадлежащим Apple), то dtrace будет к нему прекрасно привязан.

$ mkdir ~/temp
$ cp /bin/ps ~/temp/
$ codesign -f -s `whoami` ~/temp/ps
$ sudo dtruss ~/temp/ps -p 43520 -o args
person Ken Thomases    schedule 18.11.2015
comment
Да, это имеет смысл, поскольку комментарий в исходном коде относится к процессу, подписанному с ограниченными правами, поэтому удаление подписи изменит способ обработки этой логики. - person TheDarkKnight; 19.11.2015

не может контролировать исполняемые файлы, подписанные с ограниченными правами

Защита целостности безопасности («без рута») теперь предотвращает работу dtruss здесь.

Вы можете отключите его, загрузившись в режиме восстановления, но похоже, что dtrace специально заблокирован независимо от состояния rootless, как это видно на исходный код, если вы ищете "dtrace не может контролировать".

Вы также можете увидеть из комментариев в Pcreate:

    /*
     * <rdar://problem/13969762>:
     * If the process is signed with restricted entitlements, the libdtrace_dyld
     * library will not be injected in the process. In this case we kill the
     * process and report an error.
     */
person TheDarkKnight    schedule 22.10.2015
comment
@Glyph, dtrace не был специально создан, чтобы не работать с системными процессами. Я обновил ответ. - person TheDarkKnight; 18.11.2015