断点设置原理

原创 2007年09月26日 08:27:00

调试寄存器:

在寄存器中, 有一些调试寄存器专门用于调试的作用. 人们经常把它们称为调试寄存器, 调试寄存器共有 8 个,
分别是 Dr0-Dr7. 这 8 调试寄存器常被简称为 Drx.

Dr0-Dr3: 这 4 个调试寄存器的作用是存放中断的地址, 例如: 0x400000。 这 4 个调试寄存器共同时可以存放 4 个断点.(这指的是硬件断点).
Dr4-Dr5 这两个寄存器我们已使用他们, 保留
Dr6-Dr7 这2 各寄存器的作用是来记录你在 Dr0-Dr3 中下断点的属性, 比如: 对于这个 0x400000 是硬件读还是写, 或者是执行; 是对字节还是对字或者是双字.

上面对调试器的介绍可以解决下面的疑惑:
(1) 硬件断点职能设置 4 个.
(2) 为什么硬件断点有 byte, word, dword 之分.
(3) 为什么下硬件断点有 读, 写, 执行之分.


OllyDbg 中

F4 功能是: 运行到光标位置
实现方法是:
在指定的光标位置处设置硬件断点. 如图:我把程序入口函数处的指令全部改为了 nop,并改了 0x0040228B 处的指令为 JMP 指令, 相当于 JMP $。然后我们使光标指向 0x0040228F 按下 F4, 此时程序执行. 我们查看右侧的寄存器窗口:
Dr0 为 0x0040228F. 这就说明当执行到这条指令时暂停.

F8 单步步过:
单步步过是在 call 指令的返回地址处设置断点


F7 单步步入:
F7 是利用 TF 陷阱标志来使指令一条一条的执行.
F7 使TF=1, 当程序执行后只能执行一条指令然后就停住, 此时 TF=0; 再按 F7 TF=1, 执行一条指令后程序暂停 TF=0 ,这就达到了步入的效果.


F2 设置断点:

实现方法是在程序执行后, 把指定地址的指令替换为 int 3, 当程序运行到该地址处的指令时中断,然后替换回原先的指令.


 

Windows下 Qt断点调试,查看变量

在Qt下 设置好断点,开始调试(F5) ,在调试哪一行上 右击 选择 Locals and Expressions,就会弹出变量什么的,然后想查看那个变量当前值 选中变量 右击选择 添加表达式求值器 ...
  • LT_lover
  • LT_lover
  • 2015年04月26日 15:59
  • 3625

对OD硬件断点的几点思考

前几天转了一片这样的文章 http://blog.csdn.net/nightsay/article/details/42063081 这几天在分析硬件断点的时候恍然明白了好多,打开OD在我们下硬件断...
  • Nightsay
  • Nightsay
  • 2014年12月24日 13:17
  • 1732

VEH +硬件断点 HOOK

 // dllmain.cpp : 定义 DLL 应用程序的入口点。 #include "stdafx.h" #include "windows.h" #include #includ...
  • qq_18942885
  • qq_18942885
  • 2015年04月27日 15:51
  • 858

ollydbg原理分析~硬件断点与int3

今天继续接着上次的分析,来继续分析OD原理,这次先分析OD最基本的功能,断点,单步和运行到指定位置。 类似的文章前辈们已经写了很多了,这里只是将前辈们的思路实践了一下,顺便加入一点自己的理解和认识! ...
  • Nightsay
  • Nightsay
  • 2014年12月24日 13:40
  • 2094

过TP驱动4(硬件断点部分)

NtGetThreadContext NtSetThreadContext 需要处理一下    概念性代码:   NTSTATUS MyNtGetThreadContext(HANDLE ...
  • guoyi987
  • guoyi987
  • 2012年03月17日 23:58
  • 1054

程序中如何给自己设置硬件断点(通过程序代码设置数据断点而不使用JTAG)

最近安卓项目中碰到一个踩内存导致死机的问题,t
  • _xiao
  • _xiao
  • 2014年10月30日 14:51
  • 5303

在程序中设置读、写、执行的硬件断点

作者Michael Chourdakis,  翻译Binhua Liu 下载源代码 –56.1KB 简介 我是基于以下理由决定写一篇关于硬件断点的文章的: 1,Visual C++只支持...
  • binhualiu1983
  • binhualiu1983
  • 2016年06月12日 14:43
  • 305

断点设置原理

调试寄存器:在寄存器中, 有一些调试寄存器专门用于调试的作用. 人们经常把它们称为调试寄存器, 调试寄存器共有 8 个,分别是 Dr0-Dr7. 这 8 调试寄存器常被简称为 Drx.Dr0-Dr3:...
  • Blue_Dream_
  • Blue_Dream_
  • 2007年09月26日 08:27
  • 1349

delphi初级教程之delphi断点调试二

四、模块断点 要监视模块的第一次加载,可以使用【Run】菜单中的【Add Breakpoint】命令,再选 择【Module Load Breakpoint】,出现【Add Module】对话框...
  • sushengmiyan
  • sushengmiyan
  • 2013年03月14日 20:49
  • 2831

断点设置

用2003建了一个项目,断点设置的问题差点把我郁闷死用VC6建的工程断点设置好好的,拿到2003也可以用,但用2003新建的工程就是不能断,气死我了只好耐心的把属性里面的项一项一项对比,终于可以了,累...
  • RoseinTrap
  • RoseinTrap
  • 2007年02月28日 12:29
  • 580
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:断点设置原理
举报原因:
原因补充:

(最多只允许输入30个字)