2017-08-31 4 views
0

I次の再帰WinDBGのスクリプトを持っている:再帰WinDBGのスクリプトは動作しません

.if ($sicmp("${$arg1}", "-n") != 0) 
{ 
    r @$t0 = ${$arg1} 
} 
.if (@$t0) 
{ 
    r @$t1 = wo(@$t0+0x18) 
    .foreach /pS1 /ps1 (x {dq /c1 poi(@$t0+8)+0x10 [email protected]$t1}) 
    { 
     .echo x 
     r @$t2 = x 
     .push /r /q 
     r @$t0 = poi(@$t2+0x28) 
     $$>a< ${$arg0} -n 
     .pop /r /q 
    } 
} 

コードは、ここで例に触発さ - http://blogs.microsoft.co.il/sasha/2013/07/25/displaying-and-searching-stdmap-contents-in-windbg/#comment-2829748

問題は、私は.foreach内から$$>a< ${$arg0} -nを呼び出すことができないということですが本文 - 別名がすでに定義されていますエラーです。

これを解決する方法のアイデアはありますか?

+0

あなたは本当にそれをスクリプト化しますか? PyKdを起動して実行するチャンスはありませんか? –

+0

今すぐ - はい。 PyKdについて - おそらく後で。 – mark

+0

私はもっと問題があります。私が探索しているグラフには循環参照が含まれているので、ノードを数えるためには、一度訪問したものをキャッシュする必要があります(ノード自体のメモリを変更する必要はありません)。純粋なWinDBGでそれをどうやって行うのか分かりません。ですから、私はPyKdを試してみたいと思っていますが、セットアップが怖いです。すべてのポインタ? – mark

答えて

0

これは、.foreachコマンドの問題であるようです。私は .FOR を使用してスクリプトを書き換えてきたし、それが正常に動作します:

.if ($sicmp("${$arg1}", "-n") != 0) 
{ 
    r @$t0 = ${$arg1} 
} 
.if (@$t0) 
{ 
    r @$t1 = wo(@$t0+0x18) 
    .for (r @$t2 = 0; @$t2 < @$t1; r @$t2 = @$t2 + 1) 
    { 
     r @$t3 = poi(poi(@$t0+8)+(0x10 + @$t2 * 8)) 
     .printf "%p\n", @$t3 
     .push /r /q 
     r @$t0 = poi(@$t3+0x28) 
     $$>a< ${$arg0} -n 
     .pop /r /q 
    } 
} 

だから、答えはある - あなたができる場合は、.forを使用しています。

関連する問題