断点

断点

  • 断点的种类:软断点、硬件断点、内存断点

软断点

  • 实现:
    1. 将目标地址、地址中的数据记录在断点列表中
    2. 将目标地址所在字节改为“CC”,即 int3中断
    3. 当程序执行到断点处,发生int3中断,调试器将其捕获
    4. 调试器遍历断点列表,若符合某一记录,则暂停程序。
    5. 程序继续运行时,调试器根据断点列表将中断处“CC”改回原代码。
  • 特点:一些程序会在运行时计算CRC,若不符合则“自我了断”,以此防御软中断分析。

硬件中断

  • 调试寄存器
    CPU中有8个调试寄存器 DR0~DR7 用于设置、管理断点。
    • DR0~DR3用于存储硬件中断内存地址。
    • DR4、DR5保留。
    • DR6调试状态寄存器,记录上一次断点触发产生的调试事件类型信息。
    • DR7实质是硬件中断的激活开关,并保存各个断点的触发条件信息。
  • DR7的设置
    • 0~7 : 0,1位对应DR0的断电开关,0为局部断点,1为全局断点,之后同理。
    • 8~15 : 并非用于普通调试
    • 16~31 : 16,17分别表示DR0的断点类型和长度,之后同理。
  • 硬件断点的类型
    • 00 : 执行断点
    • 01 : 数据写入断点
    • 11 :数据读写(非执行)断点
  • 硬件断点的长度
    • 00:1字节
    • 01:2字节
    • 11:4字节
  • 实现
    • 硬件断断点使用一号中断,INT1用于硬件断点和单步执行。
    • 步骤
      1. 在CPU试图执行一条指令之前,会先检查指令和指令包含操作数的所在地址是否被设置了硬件断点
      2. 如果上述地址存在于DR0~3,则根据断点类型执行INT1。
  • 特点
    1. 数量最多为4
    2. 最多对4字节数据设置断点

内存断点

  • 实质:改变内存区域或内存页的访问权限。
  • 内存页的访问权限
    1. 页可执行:允许进程执行页上的代码,试图读写则会产生异常。
    2. 页可读:进程只能从页面上读取数据,写或执行会触发异常。
    3. 页可写:允许进程在该内存页上写入数据。
    4. 保护页:对保护页的任何操作将导致一次异常,之后内存页会恢复原状。
      大部分操作系统允许组合不同的权限
  • 实现:利用保护页机制,可以使进程访问特定区域内的内容时,使进程暂停运行。
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值