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

How to use pseudo-register (like $t1) as part of file name for .writemem windbg command

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

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

$t1 是在其他断点递增的计数器。问题是 $t1(或 ${$t1} 未在文件名中解析,我以名为 "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再次删除别名。