当到达地址中断(ba)断点时,检查windbg中的数据
我想创建一个断点,这样它将创建另一个一次性断点,在写入某个内存时,该断点将“dd”某个内存地址 因此,当遇到断点时,我希望运行如下命令:当到达地址中断(ba)断点时,检查windbg中的数据,windbg,breakpoints,Windbg,Breakpoints,我想创建一个断点,这样它将创建另一个一次性断点,在写入某个内存时,该断点将“dd”某个内存地址 因此,当遇到断点时,我希望运行如下命令: ba w4 @ESP+4 /1 ''dd [memory address of this breakpoint]'' 由于此断点是由另一个断点创建的(可能会被多次调用),因此无法指定断点编号。否则,我可以使用类似“$bp3”的伪寄存器来获取断点3的内存地址 有没有人想过如何创建一个断点命令来“dd”断点的内存地址 谢谢大家! 您可以详细说明如何使用其他通
ba w4 @ESP+4 /1 ''dd [memory address of this breakpoint]''
由于此断点是由另一个断点创建的(可能会被多次调用),因此无法指定断点编号。否则,我可以使用类似“$bp3”的伪寄存器来获取断点3的内存地址
有没有人想过如何创建一个断点命令来“dd”断点的内存地址
谢谢大家! 您可以详细说明如何使用其他通用伪寄存器:t0..t19
bp your-address "r$t1=your-other-address; ba w4 @$t1 /1 \"dd @$t1;gc\""
如果您知道将不会定义多个“child”
ba
断点,则可以通过将“controlling”断点的命令设置为:
ba1 w4 /1 @esp+4 "dd @$bp1"
也就是说,指定应该分配给这个新断点的断点编号,并且该断点的伪寄存器仍然在断点的命令中定义
但是,如果您认为控制断点将被多次命中,并且希望定义多个ba
断点,那么显然是行不通的,因为每次只会重新定义“断点1”。但你仍然可以做到
诀窍是使控制断点的命令实际包含文本地址文本,而不是尝试通过伪寄存器。你可以用文本别名来做
为控制断点尝试以下操作:
bu @WHATEVER "aS /x ${/v:baaddy} @esp+4; .block{ ba w4 /1 baaddy \"dd baaddy\"; ad ${/v:baaddy} }"
命中控制断点时,会发生以下情况:
- 为文本“baaddy”设置别名,其值为计算表达式
@esp+4
确保别名扩展用于以下内容.block
- alias解释器随后将扩展块内出现的所有“baaddy”,除了
命令中出现的“baaddy”(由于/v开关)ad
- 因此,如果
的值为@esp+4
,则访问断点命令实际上变成:0x1234
,实际地址嵌入其中ba w4/1 0x1234\“dd 0x1234\”
- 然后删除文本别名
aS
命令之前进行,并且“baaddy”将使用以前的值进行扩展。这也意味着这篇文章
别名在您第一次设置控制断点的命令时不存在。如果“您的地址”断点被命中两次(在“您的其他地址”被命中之前),这会改变$t1的值并导致两个一次性断点在同一地址上都被dd@$t1吗?非常感谢。在这种情况下,将断点保持在最小值。知道“您的地址”上有一个,它还可以重置所有其他bps。在其条件下使用类似“bc1-10”(前提是“您的地址”在bp0上!)的东西来清除最后10个尚未命中的断点。或者,您可以将$t1设置为0(以确保;o),并在单次触发bp中将其重置为0。然后简单地测试0(或其他值),仅在满足特定条件(如0)时创建新的单次激发bp。