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

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

4 ответа4

9

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

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

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

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

6

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

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

4

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

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

ptrace(PT_DENY_ATTACH, 0, 0, 0);

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

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

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

1

Взято с https://unix.stackexchange.com/a/276219

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

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

csrutil enable --without dtrace

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

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

csrutil disable # Not recommended.

Увидеть:

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .