Что означает эта ошибка dtrace?

15

При работе iotop -C 5 12на моем MacBook Pro (10.6.7), выпущенном в конце 2010 года, я неоднократно получал эту ошибку:

dtrace: error on enabled probe ID 5 (ID 19507: io:mach_kernel:buf_strategy:start): illegal operation in action #3 at DIF offset 0

В чем причина этого и как я могу это исправить?

Крис Р
источник

Ответы:

7

Согласно этому сообщению в блоге (с дополнительной информацией здесь ), это вызвано iTunes, который DTrace «фильтрует», поэтому его нельзя использовать для попытки сломать DRM iTunes.

Выход из iTunes устраняет ошибку.

Даниэль Серодио
источник
14
Я получаю эту ошибку, даже когда iTunes не работает.
Studgeek
9

Ошибки выводятся в stderr, и их можно отфильтровать, выполнив команду следующим образом:

sudo iotop -C 5 12 2>/dev/null

Это имеет побочный эффект фильтрации любых других ошибок, которые могут возникнуть. Я нашел, что это был хороший компромисс, потому что он сделал мой вывод iotop читабельным.

Я не уверен, в чем причина ошибок, к сожалению. Я искал, но пока не смог ничего найти.

Дэвид Людвиг
источник
1
Это просто скрывает ошибки и делает вид, что их не существует! Вопрос был в том, что их вызвало и как их исправить, а не «как их игнорировать?».
отмечается
5

Короче говоря, ошибка отображается при попытке отследить процесс, который запросил, чтобы он не отслеживался.

Технически ошибка вызвана не iTunes, а процессом, который отключил трассировку с использованием кода, подобного следующему.

ptrace(PT_DENY_ATTACH, 0, 0, 0);

Этот код устанавливает флаг процесса на уровне ядра, что предотвращает отладку и отслеживание процесса.

Самым известным приложением, которое делает это, является iTunes, приложение, для которого DRM этот API, вероятно, был изобретен, но API доступен для других процессов. Я видел множество сторонних приложений, использующих этот API.

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

Александр О'Мара
источник
1

Взято с /unix//a/276219

Это потенциально связано с El Capitan и его Системной защитой целостности ( csrutil status), которая может повлиять на dtraceповедение.

Возможное исправление включает в себя перезагрузку Mac в режиме восстановления ( - Rво время загрузки), а затем в терминале запустить:

csrutil enable --without dtrace

оставить SIP включенным, но отключить ограничения DTrace (примечание: это недокументированный параметр ).

Или полностью отключите SIP:

csrutil disable # Not recommended.

Видеть:

joeyhoer
источник