OllyDBG从原理上来区分,有两种不同的断点:软件断点和硬件断点。

也许会有朋友说那不是还有内存断点吗?

内存断点严格来说是属于一种特殊的软件断点。

内存断点:

内存断点每次只能设置一个,假如你设置了另一个内存断点,则上一个会被自动删除。

设置一个内存断点,会改变整块(4KB)内存的属性,哪怕你只设置一个字节的内存断点。

另外还需要提一下的是,内存断点会明显降低OD的性能,因为OD经常会校对内存。

软件断点:

当我们按下F2设置的断点就是软件断点。

设置该断点的原理是在断点处重写代码,插入一个int3中断指令,当CPU执行到int3指令的时候,OD就可以获得控制权。

硬件断点:

这个原理跟软件断点不同,硬件断点的可行性依赖于CPU的物理支持。

传说中,有这么一些寄存器,它们只用于调试,我们称为调试寄存器:Dr0~Dr7

其中Dr0~Dr3四个寄存器用来存放中断地址,Dr4、Dr5保留不使用,Dr6、Dr7用来记录Dr0~Dr3的属性(如读,写还是执行,单位是字节,字还是双字)。

因此,这就解释了为啥硬件断点只有四个,天生不足哈。

那么聪明的鱼油肯定会追问:小甲鱼老湿,那我要如何来区分何时使用何种断点呢?

这两种断点在使用上都有它们自身的限制,只要搞清楚它们各自的特性就知道何时该用哪个了。

例如软件断点就只能在OD的CPU界面下,在数据段它下不了,在一条指令的中间它也下不了。

在我们这个例子中,断点我们想下在windows的动态链接库里,我们需要用到硬件断点,因为用软件断点下在dll文件中是不会保存的,重启程序后将丢失断点。

最新文章

  1. for循环中的 else,break
  2. windows命令——taskmgr 1
  3. Shapely中的几何图形操作
  4. 基于DDD的.NET开发框架 - ABP Session实现
  5. Ubuntu+Apache+PHP+Mysql环境搭建
  6. MyISAM表的维护和恢复
  7. atom初体验
  8. Lintcode: Matrix Zigzag Traversal
  9. incompatible
  10. rem单位
  11. 修改html很实用的insertAdjacentHTML方法
  12. rPithon vs. rPython(转)
  13. 执行sql时出现错误 extraneous input ';' expecting EOF near '<EOF>'
  14. 防止html页面缓存
  15. Eclipse极致性能调优
  16. 痞子衡嵌入式:微控制器CPU性能测试基准(EEMBC-CoreMark)
  17. 基于properties文件的Spring Boot多环境切换
  18. css3回顾 checkbox
  19. DW表格的简单应用 之(个人简历模板)
  20. eclipse的new server里tomcat7.0根本选不上解决方法

热门文章

  1. ubuntu下使用vi是方向键变乱码 退格键不能使用的解决方法
  2. swift闭包传值
  3. Objective-C 【点语法】
  4. OC2_引用计数
  5. PHP的语言规范
  6. WiFi安全之WPA介绍
  7. java.util.ArrayList源码分析
  8. input内容改变触发事件,兼容IE
  9. <script type="text/html"></script> js模版使用
  10. HTML5会砸掉iOS和Android开发者的饭碗么?