码农知识堂 - 1000bd
  •   Python
  •   PHP
  •   JS/TS
  •   JAVA
  •   C/C++
  •   C#
  •   GO
  •   Kotlin
  •   Swift
  • cortex-m3软件断点/单步执行的实现机制


    一.软件断点
    软件断点设置后,断点处的代码如果是存放在SRAM中,相应的一条指令(C语言中的一行代码可能对应多条处理器指令)会被调试器(debugger)替换成cortex-m3的BKPT指令,当程序运行到这一BKPT指令时,处理器会被停机(halt),用户可以用调试器做出相应的操作。用户在操作完成继续执行指令时,原来C语言中的那一条指令会被调试器重新写入到该地址,并且取消停机,处理器从这一指令开始继续执行程序。

    当然,以上操作需要断点处的指令所在地址是SRAM等可写的存储器,如果是ROM等不可写存储器,就只能使用CM3处理器通过FBU提供的硬件断点功能(在检测到程序执行到某一地址时,由处理器硬件自动停机),但是硬件断点最多只有8个,而软件断点的个数没有限制。

    二.单步执行
    典型情况是,要执行单步执行,处理器已经在debugger的控制下停机,这时处理器处于调试模式(debug state)。用户通过软件执行单步执行时,实际上debugger会通过DAP向 处理器中DHCSR寄存器的C_STEP写1,使处理器退出调试模式并执行以下三步操作:
    1.根据中断状态执行以下操作中的一种:
    1)没有将要进入的中断,则直接执行一条指令
    2)有被挂起的中断,且该中断的优先级允许它被执行,则会进入该中断对应的服务函数
    3)执行下一条指令,并由此产生了一次中断
    注意:2)和3)都会导致一次中断压栈操作
    2.将 DFSR.HALTED设置为1
    3.回到调试模式

    另外,如果DHCSR.C_DEBUGEN为0,则debug事件并不能使处理器被停机,而是进入debug monitor中断,在该中断中也可以执行单步操作(当然也可以通过读取存储器或外设等进行调试),基本原理和停机时的单步执行类似,可以参考ARMv7-M Architecture Reference Manual的C1-696页。

    参考资料:
    1.The Definitive Guide to Arm Cortex-M3 and Cortex-M4 Processors
    2.ARMv7-M Architecture Reference Manual
    3.https://zhuanlan.zhihu.com/p/34003929
     

  • 相关阅读:
    软技能2阅读有感--给生活一个更好的支点
    Atlas源码解析——全量导入hive数据
    MySQL 中的事务理解
    【前端】零基础快速搞定JavaScript核心知识点
    并发编程(多线程)-可见性问题
    leetcode hot100零钱兑换Ⅱ
    【Leecode】代码随想录栈和队列篇day12(应用)
    基于矩阵分解算法的智能Steam游戏AI推荐系统——深度学习算法应用(含python、ipynb工程源码)+数据集(一)
    大新闻|高通将为Meta定制VR芯片,Quest端Beat Saber售出650万份
    数据中台实战(11)-数据中台的数据安全解决方案
  • 原文地址:https://blog.csdn.net/lbaihao/article/details/130911648
  • 最新文章
  • 攻防演习之三天拿下官网站群
    数据安全治理学习——前期安全规划和安全管理体系建设
    企业安全 | 企业内一次钓鱼演练准备过程
    内网渗透测试 | Kerberos协议及其部分攻击手法
    0day的产生 | 不懂代码的"代码审计"
    安装scrcpy-client模块av模块异常,环境问题解决方案
    leetcode hot100【LeetCode 279. 完全平方数】java实现
    OpenWrt下安装Mosquitto
    AnatoMask论文汇总
    【AI日记】24.11.01 LangChain、openai api和github copilot
  • 热门文章
  • 十款代码表白小特效 一个比一个浪漫 赶紧收藏起来吧!!!
    奉劝各位学弟学妹们,该打造你的技术影响力了!
    五年了,我在 CSDN 的两个一百万。
    Java俄罗斯方块,老程序员花了一个周末,连接中学年代!
    面试官都震惊,你这网络基础可以啊!
    你真的会用百度吗?我不信 — 那些不为人知的搜索引擎语法
    心情不好的时候,用 Python 画棵樱花树送给自己吧
    通宵一晚做出来的一款类似CS的第一人称射击游戏Demo!原来做游戏也不是很难,连憨憨学妹都学会了!
    13 万字 C 语言从入门到精通保姆级教程2021 年版
    10行代码集2000张美女图,Python爬虫120例,再上征途
Copyright © 2022 侵权请联系2656653265@qq.com    京ICP备2022015340号-1
正则表达式工具 cron表达式工具 密码生成工具

京公网安备 11010502049817号