.foreach 语句的语法错误

syntax error on .foreach statement

我有一个池泄漏案例的 .dmp,我已经确定了导致问​​题的标签,但是为该标签加载了很多模块。我正在尝试在 WinDBG 中使用 eb 编写脚本来编辑模块名称,以便我可以识别哪个是哪个。我已经尝试了很多不同的方法来处理这个语句,但我无法让它完全按照我想要的方式进行,即遍历与 pool 标签相关的所有模块,并通过用数字替换标签的最后一个字母来重命名它们。

.block {r @$t0=0x31; !for_each_module .foreach( obj {s -[1]a @#Base @#End "FMfn"}){r @$t0 = @$t0+1; eb ${obj}+3 @$t0}}

这是我收到的最新错误

@$t0+1'
                                                                    ^ Syntax error in '.foreach( obj {s -[1]a fffff96000925000 fffff9600095f000 "FMfn"}){r @$t0 = @$t0+1'
Couldn't resolve error at '${obj}+3 $t0}'

任何人都可以帮助我确定哪里出错了吗?

根据文档,!for_each_module 需要在命令字符串两边加上引号:

!for_each_module ["CommandString"]

根据我的测试,它们似乎不是可选的,因此添加引号并像这样转义现有引号:

.block {r @$t0=0x31; !for_each_module ".foreach( obj {s -[1]a @#Base @#End \"FMfn\"}){r @$t0 = @$t0+1; eb ${obj}+3 @$t0}"}