如何在Windbg中通过内存转储进行迭代?

时间:2011-12-28 15:57:08

标签: windbg

我有一个位于特定内存地址的相对虚拟地址(RVAs)数组。我可以将其转储到windbg中,并查看下面显示的RVAs列表:

dd 77f10000 + 00002650和 输出是: 77f12650 000034a6 000034af 000034b9 000034ce ....

这里,77f10000是DLL的基地址,00002650是我显示的阵列的RVA。

现在,内存转储中的每个RVA都可以添加到DLL的基地址中,并且可以查看该位置的相应字符串。

例如,如果我取数组中的第一个条目:000034a6

将此RVA添加到DLL,77f10000的基地址并显示如下:

da 77f10000 + 000034a6和 输出为:77f134a6“AbortDoc”

现在,通过这种方式,我可以通过执行以下操作查看阵列中下一个相应RVA的下一个字符串:

da 77f10000 + 000034af和 输出为:77f134af“AbortPath”

类似地,我想迭代数组中的其余条目并显示相应的字符串。

我想在windbg中使用单行脚本来完成此操作。我想学习如何做到这一点但是我无法在网上找到足够的文档或示例来帮助我制作类似的东西。

我认为.foreach命令可用于执行此操作:

示例:.foreach(myVariable {dd 77f10000 + 00002650}){!do} myVariable将存储windbg命令的输出。但是,我需要从行中一次选择一个元素并进行迭代。

任何帮助都将不胜感激。

感谢。

2 个答案:

答案 0 :(得分:4)

遗憾的是它比应该更难,因为dd命令不仅显示结果,还显示结果的地址,因此.foreach将迭代两者。虽然我无法在一行中完成,但我在一个脚本文件中完成了它,因为注释只看起来很长:

$$ Set up the base of the RVA array as a pointer to an integer.
r? @$t0 = ((int *)(0x8068f764))

$$ To break down the command:

$$ r?                - Allows you to assign a pseudo register and give it a type
$$ @$t0              - Pseudo register for use in scripting
$$ ((int *)(address) - Assign the type int * to the result


$$ Loop over the entries in the array, 100 is arbitrary and should be replaced
.for (r @$t1 = 0; @$t1 < 100; r @$t1 = @$t1 + 1) 
{
    $$ Display the ASCII string at the given offset. This is similar to:
    $$ 
    $$ printf("%s\n", baseAddr+(offsetArray[i])
    $$
    $$ @@c++() is required so that @$t0 is treated as an int *

    da nt+(@@c++(@$t0[@$t1]));
}

保存到TXT文件并使用以下命令运行:

0: kd> $$><c:\dumps\dumprvas.txt
80691a4b  "CcCanIWrite"
80691a57  "CcCopyRead"
80691a62  "CcCopyWrite"
80691a6e  "CcDeferWrite"
80691a7b  "CcFastCopyRead"
80691a8a  "CcFastCopyWrite"
...

如果我真的这样做,我会更清理它并将基本地址和入口计数参数设置为脚本,这将使它更有用。为了清楚起见,我把它留在这里(好吧,这些脚本可以预期的清晰度:))。

-Scott

答案 1 :(得分:1)

答案很晚但是这里有一个oneliner:)

0:000> .foreach /ps 1  /pS 1 (place { dd /c 1 gdi32+2650 l?5 }) {da gdi32 + place } 

测试输出

0:000> .foreach /ps 1  /pS 1 (place { dd /c 1 gdi32+2650 l?5 }) {da gdi32 + place } 
77f134a6  "AbortDoc"
77f134af  "AbortPath"
77f134b9  "AddFontMemResourceEx"
77f134ce  "AddFontResourceA"
77f134df  "AddFontResourceExA"