stm32实现软件断点的几种方式
软件断点的原理就是指令替换,这里替换指令也是多种多样的,自己思考后,觉得可以有如下4种指令替换方法都行:用int3指令,机器码0XCC,一个字节,这个可能只在x86处理器上才有,这个就是个软中断svc yy指令,机器码0xyyDF,两个字节,这个在arm上有,也是个软中断bkpt指令,机器码0x00BE,两个字节,stm32有,专门用于调试的,也是个软中断自己造一条跳转指令(用B或者BL都可以,但
·
软件断点的原理就是指令替换,这里替换指令也是多种多样的,自己思考后,觉得可以有如下4种指令替换方法都行:
- 用int3指令,机器码0XCC,一个字节,这个可能只在x86处理器上才有,这个就是个软中断
- svc yy指令,机器码0xyyDF,两个字节,这个在arm上有,也是个软中断
- bkpt指令,机器码0x00BE,两个字节,stm32有,专门用于调试的,也是个软中断
- 自己造一条跳转指令(用B或者BL都可以,但是得计算出机器码,这个和该指令所处得位置有关),为了完整的保存上下文,需要6个字节,前两个字节:push{lr},后4个字节是我们的跳转指令
应该是字节数越少越好,但是我不知道为什么,之前看过一篇说,当有共享库的时候两个字节就会有问题?但是一般应用肯定都是没问题的,关于这个问题,确实是存在问题的,断点指令一定得是最小单位指令字节数,不然就会出现本程序中有跳转过来到这儿的半中拦下腰,出现非法指令了,就跑飞了,我也经过了实验确实出现过的。根据自己的处理器平台选择吧。最后一种总是可行的,因为即使处理器没有软中断也可以。
魔乐社区(Modelers.cn) 是一个中立、公益的人工智能社区,提供人工智能工具、模型、数据的托管、展示与应用协同服务,为人工智能开发及爱好者搭建开放的学习交流平台。社区通过理事会方式运作,由全产业链共同建设、共同运营、共同享有,推动国产AI生态繁荣发展。
更多推荐

所有评论(0)