如何使用伪寄存器(如$t 1)作为.writemem windbg命令文件名的一部分



简而言之,我想创建一个断点,将部分内存保存到文件并继续,如下所示:

bp mymodule!MyReader::issueRead+0x2e ".writemem C:writememwrite_$t1 rdx L r8; g"

$t 1 是在其他断点中递增的计数器。问题是文件名中未解析$t 1(或 ${$t 1}),我以名为"write_$t1"的文件结尾

WinDbg的脚本总是有点笨拙。以下内容似乎有效,尽管我尚未将其应用于断点:

aS /c filename .printf "c:\writemem\write_%i", $t1; .block {.writemem ${filename} 00ba0000 L1}; ad filename

将其应用于断点时,可能必须再次转义引号。

aS定义别名,/c通过使用命令执行此操作。在这种情况下,我使用.printf格式化字符串。然后定义变量filename

WinDbg 会立即扩展别名,即在尚未定义别名时展开别名filename。因此,我使用.block创建一个新范围。

最后,ad再次删除别名。