问题 64位iOS设备上的asm(“陷阱”)


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

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


2155
2017-12-20 22:54


起源



答案:


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


9
2017-12-21 00:06



这不对。它调用未知的系统调用,这会引发 SIGSYS信号 (错误的系统调用)和调试程序捕获它。我认为这样做更好 发送SIGSTOP 代替 - Pavel


答案:


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


9
2017-12-21 00:06



这不对。它调用未知的系统调用,这会引发 SIGSYS信号 (错误的系统调用)和调试程序捕获它。我认为这样做更好 发送SIGSTOP 代替 - Pavel