asm(trap) на 64-битных устройствах iOS

В моем собственном макросе assert я использовал asm("trap") на устройствах iOS (или asm("int3") на симуляторах iOS) для взлома отладчика. Однако в 64-битных сборках для устройств я получаю «неопознанную мнемонику инструкции» для инструкции trap. Есть ли аналог для arm64?

(Альтернативы, такие как __builtin_trap() или raise(SIGINT) работают, но имеют некоторое поведение, которое мне не нравится; первый не позволит вам продолжить работу после разрыва, а последний является функцией, поэтому вы всегда на один шаг ниже где вы должны быть в стеке, когда вы ломаетесь.)


person leremjs    schedule 20.12.2013    source источник


Ответы (1)


Я смог войти в отладчик (и продолжить после этого) с помощью asm("svc 0");. Я не уверен, что это правильный способ, но, похоже, он работает.

person 0xced    schedule 21.12.2013
comment
Это неправильно. Он вызывает неизвестный системный вызов, и это вызывает сигнал SIGSYS (неверный системный вызов), и отладчик его перехватывает. . Я думаю, что вместо этого лучше отправить SIGSTOP - person Pavel P; 24.05.2017