EAX
寄存器的值?获取文本形式的00b27223
寄存器的值。#1 楼
我可以想到两种方法来实现此目的:使用
RunTo
。设置断点,挂钩调试器事件并实现
dbg_bpt
1。使用
RunTo
这几乎是微不足道的,但不能提供与第二种方法相同的控制量。如果您要这样做,那对于快速且肮脏的解决方案可能会更好。
调用
idc.RunTo(ea)
将执行该过程,直到达到ea
,然后再调用idc.GetRegValue(name)
即可获取值。 EAX
的值。某些条件(例如引发异常或击中其他断点)将导致
RutTo
在到达提供的ea
之前返回。然后,您可以致电idc.GetDebuggerEvent
找出发生了什么,但是如果您要这样做,我建议您切换到第二种方法。 br /> 2。设置断点,挂接调试器事件并实现
RunTo
这是更安全的方法,这是我推荐的方法,而更难于实现的方法则可以正确处理其他断点和更多控制。 />为此,您必须做三件事:
在给定地址处设置断点。
监视断点的触发器。
/>,然后对其执行操作。
在给定地址处设置断点
实现此目的的最基本方法是调用
dbg_bpt
,该代码在执行时设置软件您可以使用的其他方法包括:
idc.AddBpt(ea)
可以更好地控制要创建的断点的类型。idc.AddBptEx(ea, size, bpttype)
设置断点的可用属性。idc. SetBptAttr(address, bptattr, value)
/ idc.SetBptCnd(ea, cnd)
设置断点的触发条件。有关详细信息,请阅读文档。 。
显示器监控他断点的触发器
为此,您需要安装Debugger Hooking类(任何继承
idc. SetBptCndEx(ea, cnd, is_lowcnd)
的类),该类实现idaapi.DBG_Hooks
方法,该方法描述触发断点的线程ID和线性地址。从dbg_bpt(tid, ea)
返回0应该会阻止IDA通知用户它已被触发(假设您将在内部处理它)。真正起作用。请注意,在创建断点之前最好安装钩子。最后对它进行操作
在调试器运行时,可以调用
dbg_bpt
提供寄存器名来收到当时的即时价值。