2011-06-06 44 views
1

我在读一些关于调试的旧文章,其中一篇提到了调试寄存器。阅读更多关于这些寄存器和他们能做些什么让我非常渴望与他们一起玩。然而,当我试图寻找更多关于如何实际使用它们的信息时,我发现它们只能从Windows中的环0访问。调试寄存器替代?

我认为那是结束,因为我不打算编写内核驱动程序只是为了玩一些寄存器。但后来我想到了我曾经玩过的内存编辑工具。它被称为Cheat引擎,程序的各种选项之一是指定中断正在执行/访问/读取的指令/数据。这与调试寄存器完全相同。所以我想知道:在Windows中是否有替代/替换调试寄存器?因为我确信程序(作弊引擎)不使用内核驱动程序来设置这些值。

回答

2

这是不正确的,你可以从ring3间接设置硬件调试寄存器(ollydbg这样做),为此你需要在windows(example)下使用SetThreadContext

如果你仍然想要一个硬件寄存器的替代品,你可以使用INT3代码断点和单步陷阱来检查varibale是否已经改变(非常低效)。

一个很好的参考,GDB及其来源:http://developer.apple.com/library/mac/#documentation/DeveloperTools/gdb/gdbint/gdbint_3.html

+0

我希望更多的本地解决方案,你也许知道,如果我可以使用类似的东西来GetThreadContext来在我自己的过程?编辑:没关系,MSDN说我可以在我自己的过程中使用它。 – Unknown 2011-06-06 16:17:51

+0

你的回答是正确的,你可以使用'SetThreadContext',但工作不会发生在ring3中。该功能将归结为系统调用,该系统调用切换到ring0服务例程以完成实际工作。 – 2011-06-07 14:04:01

+0

@Evan:我知道这就是为什么我间接地说**。但它确实不需要服务例程,您只需要ring0特权指令权限,以便您可以执行'MOV DRx,R32' – Necrolis 2011-06-07 15:03:45