2011-04-10, 15:43 下午
|
一鱼之歌
注册: 2009-02-10
发 贴: 36
|
|
|
下硬件断点我们知道是对drx寄存器做修改。例如我要下一个执行断点,就简单来说就是把这个执行地址加载到drx寄存器中,并修改相关位。
但是细想实现,又别有一翻意思。。
我的问题:在调试r3程序中,想下一个这样的断点时,我的想法就是必须要对这个进程的所有线程修改寄存器,因为每个线程都有自己的一份寄存器。我这个想法对吗?一个佐证例子就是
修改相关寄存器时必须使用SetThreadContext函数,而这个函数是必须提供一个线程句柄的,说明是以线程为单位。
2。如果上述成立,那在内核中呢?我的一个同事,他在内核中下一个执行断点的时候,就只是简单的mov drx,xxxxx。并不牵扯到什么线程,这又是为何呢?
|
|
|
IP 地址: 已记录
|
报告
|
|
|
|
2011-04-11, 12:37 下午
|
wrong
注册: 2011-01-07
发 贴: 66
|
|
|
其实我上面解释过了,你还没有明白。
每切换一个线程都会重新加载寄存器(包括drx),正是如此,这就是线程上下文的作用啊。
内核模式下,也有线程的概念。不过调试器可以直接写DR了,不一定非要写线程上下文了。这取决于调试器的实现。
|
|
|
IP 地址: 已记录
|
报告
|
|
|
|
2011-04-11, 14:25 下午
|
一鱼之歌
注册: 2009-02-10
发 贴: 36
|
|
|
看来我脑子转不过来了。我的理解是硬件断点和调试器无关
这是CPU级实现的,而调试器只是在int的时候接收到消息并处理而已。
所以我就觉得当你在内核中mov修改drx的时候。当切换了线程后,为什么这个修改后的drx对后面的线程还有效呢?后面的线程不是已经使用它之前保存的drx覆盖了drx原来的值吗?
|
|
|
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 图书|- 《软件调试》的示例程序|- 《软件调试》的工具|- 《软件调试》书友|- 《软件调试》答疑|- 《软件调试》勘误和意见|- 《格蠹汇编》
|
|
|
|