如何设置数据断点,当 EAX 寄存器设置为特定值时中断

Posted

技术标签:

【中文标题】如何设置数据断点,当 EAX 寄存器设置为特定值时中断【英文标题】:How to set a Data Breakpoint, to break when EAX Register is set to a particular value 【发布时间】:2010-01-26 07:31:58 【问题描述】:

在 MSDN 中有一篇文章提供了该过程: http://msdn.microsoft.com/en-us/library/aa295838(VS.60).aspx#_core_setting_a_breakpoint_when_a_register_expression_is_true

但似乎我适用于 Visual Studio 6 ...实际上我在“编辑”菜单下找不到“断点”条目...

你知道怎么做吗?我想在 EAX 更改为错误代码时中断,以便找到返回此错误的位置。

【问题讨论】:

您实际使用的是什么版本的 Visual Studio? 【参考方案1】:

假设您使用的是 Visual Studio 2008,您可以在其自己的“调试”菜单中找到它。

【讨论】:

谢谢.. 但是你能给我一个更详细的过程吗? MSDN 中的步骤如下: 在寄存器表达式为真时中断 1. 从“编辑”菜单中,单击“断点”。 2. 单击断点对话框的数据选项卡。 3. 在表达式文本框中,键入一个包含布尔比较运算符的表达式,例如 CS==0。 4. 在元素数量文本框中,输入要监控的字节数。 5. 单击确定设置断点。但是我找不到断点窗口的数据选项卡。我所能做的就是添加一个函数中断或数据中断......【参考方案2】:

您需要创建一个断点。在断点窗口( Debug->Windows->Breakpoint )中右键单击 BP 并选择条件。

在条件字段中,您只需键入表达式 ( "eax == ebx" )。

【讨论】:

是的...但是我需要设置函数断点或数据断点,只有在到达函数位置或数据更改时才会停止。这不是我想要的。我只想在 eax 更改时停止。而MSDN中所说的听起来正是我想要的......只是不知道该怎么做...... 顺便说一句,我试图添加一个address=eax的数据断点,但实际上这个断点无法停止......甚至eax的内容实际上都被改变了...... 如果您尝试我的描述,您会看到,当您选择“条件”时打开的对话框中有两个单选按钮。您可以在此处选择是要评估条件还是要在变量更改时中断。 感谢您的回复...但我想我们可能有一些误解。我阅读了 MSDN 中的断点条件部分。而且我认为断点条件仅在断点被击中时才被评估。但实际上我想要的是在 EAX 更改为某个值(错误代码)时停止。因为我有很多函数返回此错误代码,并且我想确定哪个函数返回它......我知道我们可以在数据更改时添加数据断点。我不知道我们是否可以添加一个在寄存器更改时停止的断点... @Yingliu:如果您说要在每条指令之后检查 EAX,我认为 VisualStudio 不会这样做 - 您需要一个较低级别的调试器。 【参考方案3】:

只是为了明确@DarthCoder 所说的内容:

    首先创建一个简单的断点,以便编辑一些内容 然后 Debug->Windows->Breakpoint 调出断点列表,包括你刚刚创建的那个 右键单击断点,选择“条件” 输入条件,如eax==ebx

【讨论】:

以上是关于如何设置数据断点,当 EAX 寄存器设置为特定值时中断的主要内容,如果未能解决你的问题,请参考以下文章

从内存中的数据设置 x86 部分寄存器(EAX、AX、AH)

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

有效地将 CPU 寄存器中的所有位设置为 1

Cortex-M0+ 只写带断点的寄存器

使用'gdb'在函数内的特定偏移量中设置断点

当我在 asp.net 核心中选择下拉值时,如何将特定文本设置为下拉列表?