【问题标题】:A debug register substitute?调试寄存器替代品?
【发布时间】:2011-06-06 15:55:40
【问题描述】:

我正在阅读一些关于调试的旧文章,其中一篇提到了调试寄存器。阅读更多关于这些寄存器以及它们可以做什么的信息让我非常渴望和它们一起玩。但是,当我尝试查找有关如何实际使用它们的更多信息时,我读到它们只能从 windows 中的 ring 0 访问。

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

【问题讨论】:

    标签: windows debugging cpu-registers


    【解决方案1】:

    这根本不是真的,你可以从ring3间接设置硬件调试寄存器(ollydbg这样做),为此你需要在windows下使用SetThreadContextexample)。

    如果您仍然想要替代硬件寄存器,您可以使用 INT3 作为代码断点和单步捕获来检查变量是否已更改(效率非常低)。

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

    【讨论】:

    • 我希望更多的是本地解决方案,您是否知道我是否可以在自己的进程中使用类似于 SetThreadContext 的东西?编辑:没关系,MSDN 说我可以在自己的进程中使用它。
    • 您的答案是正确的,您可以使用SetThreadContext,但工作不会在 ring3 中发生。该函数将归结为一个系统调用,该系统调用切换到 ring0 服务例程来完成实际工作。
    • @Evan:我知道这一点,这就是为什么我说间接。不过它真的不需要服务例程,你只需要 ring0 特权指令权限,这样你就可以做到MOV DRx,R32
    猜你喜欢
    • 2015-03-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-09-28
    • 2011-05-16
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多