OD 各种断点的实现原理

1 篇文章 0 订阅
1 篇文章 0 订阅
 在网上看到好多介绍OD断点原理的文章受益匪浅,主要是前辈LenusMa写的。看完之后,也有一点自己的想法,并且通过实验验证,首先介绍有几种被使用的断点:

1、Int3 断点(CC断点),运行到指令cc就产生int3中断。

2、硬件断点,通过调试寄存器DR,DR寄存器只能够存放4个地址,分别是DR0 DR1 DR2 DR3,所以硬件断点只能够存放4个;DR4 DR5保留, DR6 DR7用于存放这几个断点的相关属性。详细介绍DR寄存器的文章:http://hi.baidu.com/zzydog/blog/item/63e300fcfb91fe55d6887db5.html

3、内存断点,修改内存page的属性,是访问过程中产生中断。


研究OD中使用的断点,分情况讨论:

1)F2、shift+F2、shift+F4都是使用的int3断点,下断之后通过xuetr.exe软件查看应用软件钩子,可以看到




2)F4运行到指定的地址,这两个功能的实现,可能使用硬件断点,也会使用到int3断点。

a) 当调试寄存器DR0~3这四个寄存器有空余,那么F4会将指点的地址存入到调试寄存器中,并且设置“仅一次中断”。

b) 当调试寄存器DR0~3这四个寄存器都已经被占用了,那么OD就会使用int3断点,将指定地址的首个字节改为cc,运行到这个地址的时候产生中断,在中断处理中恢复这个字节。下次执行到这里时候,不会在中断了。


3)F8和F7这两个操作,确实不好检测,这里没有特别固定的方法,最好可以直接分析OD就比较好了。F7是设置EFLAG标志寄存器,将TF位设置为1,当执行完一条指令之后,就产生中断并且停止。F8是当DR寄存器有未使用的,就会利用DR寄存器来存储下一个要中断的地址,如果DR寄存器已经满了,那么就将下一个中断地址设置cc。



4)内存访问断点,记录下断的内存地址范围,将地址所在的PAGE属性设置为PAGE_NOACCESS,当被调试进程访问到这个PAGE,就会产生中断,中断处理判断访问地址是否在下断点的地址范围内,如果是就中断到这条指令。如果不是继续执行。内存写入断点也是类似,只是将PAGE的属性修改为PAGE_EXECUTE_READWRITE



  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
华为OD是华为公司推出的一款智能办公平台,用户可以在OD上完成诸如文档编辑、表格处理、代码编写等办公任务。在OD平台中,C语言的代码编辑器实现了C语言代码的编辑、调试及运行功能。 首先,华为OD的C代码编辑器提供了一个用户友好的界面,用户可以轻松创建、打开和编辑C语言代码文件。用户可以通过该编辑器输入C语言代码,进行代码的修改和补充。 其次,华为OD的C代码编辑器提供了一系列的代码补全和自动格式化的功能,能够帮助用户提高代码的编写效率和准确性。编写C语言代码时,如果用户输入一部分代码,编辑器会自动提示可能的代码补全选项,避免用户频繁输入相似的代码片段。此外,编辑器还支持自动格式化功能,使得代码的排版整齐统一,提高代码的可读性。 此外,华为OD的C代码编辑器还提供了调试功能,用户可以在编辑器中设置断点,逐行调试C语言代码。用户可以通过调试功能逐步执行代码,观察变量的值变化,找出代码中的错误和问题,进一步提高代码的质量和准确性。 最后,华为OD的C代码编辑器还支持C代码的运行和输出。用户可以直接在编辑器中运行代码,查看代码的输出结果。用户可以通过这个功能验证代码的正确性或者调试程序。 综上所述,华为OD的C代码编辑器实现了C语言代码的编辑、调试和运行等功能,能够帮助用户更高效、准确地编写C语言代码,提高代码的质量和可读性。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值