Co oznacza ten błąd dtrace?

15

Podczas pracy iotop -C 5 12na moim MacBooku Pro z końca 2010 r. (10.6.7) często pojawiają się następujące błędy:

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

Co jest tego przyczyną i jak to naprawić?

Chris R.
źródło

Odpowiedzi:

7

Zgodnie z tym postem na blogu (więcej informacji tutaj ) jest to spowodowane przez iTunes, który DTrace „filtruje”, więc nie można go użyć do próby złamania DRM iTunes.

Zamknięcie iTunes rozwiązuje błąd.

Daniel Serodio
źródło
14
Otrzymuję ten błąd, nawet gdy iTunes nie jest uruchomiony.
studgeek
9

Błędy są wysyłane do stderr i można je odfiltrować, uruchamiając takie polecenie:

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

Ma to efekt uboczny filtrowania wszelkich innych błędów, które mogą się pojawić. Stwierdziłem, że jest to dobry kompromis, ponieważ sprawia, że ​​mój wynik iotop jest czytelny.

Niestety nie jestem pewien, jaka jest przyczyna błędów. Szukałem, ale na razie nic nie znalazłem.

David Ludwig
źródło
1
To tylko zamiatanie błędów pod dywan i udawanie, że nie istnieją! Pytanie dotyczyło tego, co je spowodowało i jak je naprawić, a nie „jak je zignorować?”.
markshep
5

Krótko mówiąc, błąd jest wyświetlany przy próbie śledzenia procesu, który zażądał, aby nie był śledzony.

Błąd nie jest technicznie spowodowany przez iTunes, ale przez proces, który wyłączył śledzenie, używając kodu takiego jak poniżej.

ptrace(PT_DENY_ATTACH, 0, 0, 0);

Ten kod ustawia flagę procesu na poziomie jądra, co zapobiega debugowaniu i śledzeniu procesu.

Najbardziej znaną aplikacją, która to robi, jest właśnie iTunes, aplikacja, dla której DRM ten interfejs API został prawdopodobnie opracowany, ale interfejs API jest dostępny dla innych procesów. Widziałem wiele aplikacji innych firm korzystających z tego interfejsu API.

Oczywiście, podobnie jak wszystkie DRM, można go złamać. Opcje obejścia tej funkcji funkcji śledzenia i debugowania - od debugera do pomijania wywołania API do rozszerzeń jądra, które łatają tę funkcję w przestrzeni jądra.

Alexander O'Mara
źródło
1

Zaczerpnięte z /unix//a/276219

Jest to potencjalnie powiązane z El Capitan i jego System Integrity Protection ( csrutil status), które mogą wpływać na dtracezachowanie.

Potencjalna poprawka obejmuje ponowne uruchomienie komputera Mac w trybie odzyskiwania ( - Rpodczas rozruchu), a następnie w trybie uruchamiania terminalu:

csrutil enable --without dtrace

aby utrzymać SIP włączony, ale wyłącz ograniczenia DTrace (uwaga: jest to parametr nieudokumentowany ).

Lub całkowicie wyłącz SIP przez:

csrutil disable # Not recommended.

Widzieć:

joeyhoer
źródło