64位iOS设备上的asm("陷阱")

ler*_*mjs 11 ios arm64

在我自己开发的断言宏中,我一直在iOS设备上使用asm("陷阱")(或在iOS模拟器上使用asm("int3")来打破调试器.但是,在64位版本的设备中,我得到了陷阱指令的"无法识别的指令助记符".arm64有同等效力吗?

(像__builtin_trap()或raise(SIGINT)这样的替代品可以工作,但有一些我不喜欢的行为;前者不会让你继续经过休息,而后者是一个功能所以你总是在下面一步当你休息时你需要在堆栈中.)

0xc*_*ced 9

我能够闯入调试器(并在之后继续)asm("svc 0");.我不确定这是正确的方法,但它似乎做了这个工作.

  • 这是不正确的。它调用了未知的系统调用,这会引发 [SIGSYS 信号](https://en.wikipedia.org/wiki/Unix_signal#SIGSYS)(错误的系统调用)并被调试器捕获。我认为最好 [send SIGSTOP](/sf/answers/3089998341/) 代替 (3认同)