2011-04-10, 15:43 下午
一鱼之歌


注册: 2009-02-10
发 贴: 36

硬件断点的疑惑
下硬件断点我们知道是对drx寄存器做修改。例如我要下一个执行断点,就简单来说就是把这个执行地址加载到drx寄存器中,并修改相关位。
但是细想实现,又别有一翻意思。。

我的问题:在调试r3程序中,想下一个这样的断点时,我的想法就是必须要对这个进程的所有线程修改寄存器,因为每个线程都有自己的一份寄存器。我这个想法对吗?一个佐证例子就是

修改相关寄存器时必须使用SetThreadContext函数,而这个函数是必须提供一个线程句柄的,说明是以线程为单位。

2。如果上述成立,那在内核中呢?我的一个同事,他在内核中下一个执行断点的时候,就只是简单的mov drx,xxxxx。并不牵扯到什么线程,这又是为何呢?

  IP 地址: 已记录   报告
   2011-04-10, 17:38 下午
Raymond


注册: 2005-12-19
发 贴: 1,054

Re: 硬件断点的疑惑
具体实现是与调试器相关的,以WinDBG为例,用户态时,是针对所有线程的,没错。
内核代码可以直接访问DR寄存器,因此是可以直接用mov指令设置断点,不知道你的疑问在哪里?
  IP 地址: 已记录   报告
   2011-04-11, 10:11 上午
wrong


注册: 2011-01-07
发 贴: 66

Re: 硬件断点的疑惑
他的问题就是为什么调试R3,是针对线程的,而R0的程序,就没有线程了。

这2个问题本质都是一样的,因为断点最终会放在DR中去,只不过前者是OS切换线程时做的,因此只对目标线程起作用。而后者可能是调试器直接做的,所以对所有线程起作用。

  IP 地址: 已记录   报告
   2011-04-11, 10:15 上午
一鱼之歌


注册: 2009-02-10
发 贴: 36

Re: 硬件断点的疑惑
就是楼上朋友的意思,我就是不明白这里。断点的时候CPU不是看寄存器吗?可是每切换一个线程都会重新加载寄存器(包括drx),难道在内核中就没了对应线程的概念?
  IP 地址: 已记录   报告
   2011-04-11, 12:37 下午
wrong


注册: 2011-01-07
发 贴: 66

Re: 硬件断点的疑惑
其实我上面解释过了,你还没有明白。

每切换一个线程都会重新加载寄存器(包括drx),正是如此,这就是线程上下文的作用啊。

内核模式下,也有线程的概念。不过调试器可以直接写DR了,不一定非要写线程上下文了。这取决于调试器的实现。

  IP 地址: 已记录   报告
   2011-04-11, 14:25 下午
一鱼之歌


注册: 2009-02-10
发 贴: 36

Re: 硬件断点的疑惑
看来我脑子转不过来了。我的理解是硬件断点和调试器无关

这是CPU级实现的,而调试器只是在int的时候接收到消息并处理而已。

所以我就觉得当你在内核中mov修改drx的时候。当切换了线程后,为什么这个修改后的drx对后面的线程还有效呢?后面的线程不是已经使用它之前保存的drx覆盖了drx原来的值吗?

  IP 地址: 已记录   报告
   2011-04-12, 09:31 上午
wrong


注册: 2011-01-07
发 贴: 66

Re: 硬件断点的疑惑
用户模式下你应该没有问题了吧。因为断点只对当前线程有效的。

关于内核模式,我是这么理解的,内核空间只有一个,不管线程怎么切换,切换的都是用户态代码,至于为什么
“切换了线程后,为什么这个修改后的drx对后面的线程还有效”,我也有点胡涂了。:)

  IP 地址: 已记录   报告
   2011-04-12, 21:14 下午
一鱼之歌


注册: 2009-02-10
发 贴: 36

Re: 硬件断点的疑惑
呵呵,是啊,这玩意咋看,好像原理很容易懂,不过要深入实现又觉得奇怪了。
等张老师。。。。
  IP 地址: 已记录   报告
   2011-04-12, 22:27 下午
Thomson


注册: 2008-07-03
发 贴: 205

Re: 硬件断点的疑惑
能看到在kernel 里面直接改的register后,断点在kernel里面所有线程有都效吗?
  IP 地址: 已记录   报告
   2011-04-14, 09:11 上午
一鱼之歌


注册: 2009-02-10
发 贴: 36

Re: 硬件断点的疑惑
可以啊。。

张老师怎么不来解释下。。求解。。。

  IP 地址: 已记录   报告
   2011-04-16, 11:00 上午
一鱼之歌


注册: 2009-02-10
发 贴: 36

Re: 硬件断点的疑惑
囧,,,张老师这么忙。。
  IP 地址: 已记录   报告
   2011-04-19, 22:52 下午
Raymond


注册: 2005-12-19
发 贴: 1,054

Re: 硬件断点的疑惑
抱歉各位,最近实在有点忙
内核断点的信息是保存在每个CPU的处理器控制区的,具体来说是_KPRCB结构的ProcessorState字段的SpecialRegisters字段:
+0x2cc SpecialRegisters : _KSPECIAL_REGISTERS
+0x000 Cr0 : Uint4B
+0x004 Cr2 : Uint4B
+0x008 Cr3 : Uint4B
+0x00c Cr4 : Uint4B
+0x010 KernelDr0 : Uint4B
+0x014 KernelDr1 : Uint4B
+0x018 KernelDr2 : Uint4B
+0x01c KernelDr3 : Uint4B
+0x020 KernelDr6 : Uint4B
+0x024 KernelDr7 : Uint4B
每当CPU从用户模式切换到内核模式执行时,内核的代码会从上述字段中加载调试寄存器的值,放到物理CPU中,因为KPRCB是针对CPU的,所以无线程区别...
  IP 地址: 已记录   报告
   2011-04-20, 00:15 上午
一鱼之歌


注册: 2009-02-10
发 贴: 36

Re: 硬件断点的疑惑
原来如此,谢谢张老师,

如果是内核回到用户模式的话,这几个寄存器就是从栈中读取的是吗?

  IP 地址: 已记录   报告
   2011-04-21, 10:44 上午
wrong


注册: 2011-01-07
发 贴: 66

Re: 硬件断点的疑惑
总算明白了。内核模式下实际上还是有一份相当于全局的数据结构在起作用。

在用户态下,硬件断点是进程级别的,同时修改了所有线程的上下文。

  IP 地址: 已记录   报告
   
高端调试 » 软件调试 » Windows内核调试 » Re: 硬件断点的疑惑 请选择 论坛首页|- 论坛搜索 |- 热门主题|- 未回复的主题用户选项 |- 登录 |- 注册|- 找回密码软件调试 |- Windows内核调试|- C/C++本地代码调试 |- .Net程序调试|- 脚本程序调试 |- Java程序调试|- Linux内核调试 |- 《程序员》杂志调试专栏|- WinDbg |- GDB|- 远程调试|- 调试ACPI和BIOS |- 特殊的调试任务|- 转储分析内核探秘 |- Windows内核|- Linux内核系统架构|- CPU架构 |- PCI/PCI Express架构程序人生 |- 软件物语|- 社区活动|- 名人逸事 联盟论坛|- 欢迎使用CnForums没有银弹|- BUG也精彩 |- 豆腐工程|- 软件圈里十大怪Windows Vista|- 用调试利剑剖析VISTA内幕 |- 老专家如何破解新问题|- 我的电脑谁说了算? |- 资源 Office开发|- Visio驱动程序开发|- Windows驱动开发|- Linux驱动开发|- Windows CE驱动开发 用户态开发 |- Windows本地代码(native)高级开发|- Web应用开发 |- WinFX和.Net|- Office开发 本站建设|- 高端调试团队|- 版面布局|- 活动建议 |- 网站维护64位计算 |- 64-bit Windows|- 64-bit CPU 图书|- 《软件调试》的示例程序|- 《软件调试》的工具|- 《软件调试》书友|- 《软件调试》答疑|- 《软件调试》勘误和意见|- 《格蠹汇编》
 

硬件断点的疑惑相关推荐

  1. 硬件断点反跳似乎_高性能应用程序:多路复用,反跳,系统字体和其他技巧

    硬件断点反跳似乎 by Atila Fassina 通过阿蒂拉·法西纳(Atila Fassina) 高性能应用程序:多路复用,反跳,系统字体和其他技巧 (High Performance Apps: ...

  2. 【Windows 逆向】OD 调试器工具 ( 分析 OD 硬件断点处的关键代码 | 添加硬件断点 | 关键代码 | MOV 指令 | EAX 寄存器值分析 | 使用命令查看 esi+0cc 地址 )

    文章目录 一.添加硬件断点 二.关键代码 三.MOV 汇编指令格式 四.EAX 寄存器值分析 五.使用命令查看 esi+0cc 地址 一.添加硬件断点 在上一篇博客中 , 在子弹个数数据内存地址 07 ...

  3. 【Windows 逆向】OD 调试器工具 ( OD 调试数据时硬件断点对应的关键代码 | 删除硬件端点恢复运行 )

    文章目录 前言 一.OD 调试数据时硬件断点对应的关键代码 二.删除硬件端点恢复运行 前言 在 [Windows 逆向]OD 调试器工具 ( CE 中获取子弹动态地址前置操作 | OD 中调试指定地址 ...

  4. 软件调试学习笔记(六)—— 硬件断点

    软件调试学习笔记(六)-- 硬件断点 硬件断点 设置硬件断点 触发硬件断点 处理硬件断点 实验:硬件断点的设置与处理 硬件断点 描述: 与软件断点与内存断点不同,硬件断点不依赖被调试程序,而是依赖于C ...

  5. 硬件断点 DrxHook

    硬件断点的实现需要依赖于调试寄存器 DR0~DR7  调试寄存器 DR0~DR3-----调试地址寄存器 DR4~DR5-----保留 DR6 -----调试状态寄存器 指示哪个调试寄存器被命中 DR ...

  6. [系统安全] 二十四.逆向分析之OllyDbg调试INT3断点、反调试、硬件断点与内存断点

    您可能之前看到过我写的类似文章,为什么还要重复撰写呢?只是想更好地帮助初学者了解病毒逆向分析和系统安全,更加成体系且不破坏之前的系列.因此,我重新开设了这个专栏,准备系统整理和深入学习系统安全.逆向分 ...

  7. OD的 CC断点,内存访问断点,硬件断点 解析

    1.F2断点,API断点 1)本质CC断点 2)以API断点为例 xxxx=GetProcAddress//获得函数首 地址 VitualProtectEx()//修改函数首地址权限为 可写     ...

  8. X86逆向教程10:学会使用硬件断点

    本节课我们将学习硬件断点的使用技巧,硬件断点是由硬件提供给我们的一组寄存器,我们可以对这些硬件寄存器设置相应的值,然后让硬件帮我们断在需要下断点的地址上面,这就是硬件断点,硬件断点依赖于寄存器,这些寄 ...

  9. 如何对抗硬件断点--- 调试寄存器

    1.前言 在我跨入ollydbg的门的时候,就对ollydbg里面的各种断点充满了疑问,以前我总是不明白普通断点,内存断点,硬件断点有什么区别,他们为什么 有些时候不能混用,他们的原理是什么,在学习了 ...

最新文章

  1. pandas使用groupby函数计算dataframe数据中每个分组的滚动统计值(rolling statistics)的语法:例如分组的N天滚动平均值、滚动中位数、滚动最大最小值、滚动加和等
  2. SAP 调用smartforms打印如何统计实际打印状态和打印次数
  3. TypeScript Non-null Assertion Operator 非空断言操作符 - 感叹号
  4. python引用传递产生的问题_python关于lambda、引用传递等易犯的错误
  5. linux 直接映射 页表大小,linux 启动过程临时页表到底映射了多大内存?
  6. 这个是帮朋友发的,。。。我也觉得挺无聊的。
  7. AndroidStudio项目提交到github
  8. winform list集合怎么 in过滤_你有真正把 Python Set 当作数学集合吗?
  9. contiki学习笔记(七)contiki系统
  10. 论文解读--Multi-class Road User Detection with 3+1D Radar in the View-of-Delft Dataset
  11. 在centOS中安装以及使用vim编辑器
  12. C++必知必会RALL与Pimpl
  13. JAVA Spring
  14. 数据导入与预处理-第4章-数据获取python读取pdf文档
  15. 机器学习——强化学习概述
  16. 国产CRM软件都有哪些
  17. 人民日报书单: 100 本增长见识的好书
  18. 前端技术书(前端优秀书籍整理)
  19. 柯尼卡/Konica打印扫描一体机无法扫描
  20. 华为S5720-52X-PWR-LI/S5720-52X-LI交互机堆叠和VLAN配置

热门文章

  1. 【JS与JQ】原生JS(clientTop/clientLeft,offsetTop/offsetLeft,scrollTop/scrollLeft)
  2. 教你一分钟使用PS将证件照的白底换为红底
  3. 学习笔记(01):winhex数据恢复从入门到精通全集-FAT32文件系统数据结构
  4. 使用 IntelliJ IDEA 查看服务器日志文件
  5. 出现吧,Python Web 菜谱系统的首页,不会前端技术,也能做
  6. 激活ltsb2016_win10 企业版ltsb 2016有方法激活吗
  7. 千与千寻 一个10岁小女孩的内心世界
  8. Log4j 和 Slf4j 的介绍和使用
  9. Android调用系统摄像头拍照并显示在ImageView上
  10. okhttp3宏观介绍及基础回顾