软件断点的原理就是指令替换,这里替换指令也是多种多样的,自己思考后,觉得可以有如下4种指令替换方法都行:
- 用int3指令,机器码0XCC,一个字节,这个可能只在x86处理器上才有,这个就是个软中断
- svc yy指令,机器码0xyyDF,两个字节,这个在arm上有,也是个软中断
- bkpt指令,机器码0x00BE,两个字节,stm32有,专门用于调试的,也是个软中断
- 自己造一条跳转指令(用B或者BL都可以,但是得计算出机器码,这个和该指令所处得位置有关),为了完整的保存上下文,需要6个字节,前两个字节:push{lr},后4个字节是我们的跳转指令
应该是字节数越少越好,但是我不知道为什么,之前看过一篇说,当有共享库的时候两个字节就会有问题?但是一般应用肯定都是没问题的。根据自己的处理器平台选择吧。最后一种总是可行的,因为即使处理器没有软中断也可以。