如何设置数据断点,当 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 地址 )(代码