2016-07-22 13 views
1

現在のスレッドスタックのすべてのArgをChildにダンプするにはどうすればいいですか?現在のスタックのすべてのフレームについて、argsにduのようなコマンドを実行したいと思います。すべてのフレームでdu ebp+<1st 4 args>のように指定されたスタック上のすべてのArgsを子にダンプする

+0

申し訳ありませんが、あなたが 'kP'を求めていますか?スタックトレースの各呼び出しのすべてのパラメータが別の行に表示されます – EdChum

+0

変更された呼び出し規約のために、 'kP'と' kb'がx64でうまく動作しない可能性があります。 –

+0

'!for_each_frame'は解決策の一部かもしれません。 –

答えて

0

IMHO WinDbg自体ではあまり簡単ではありませんが、このタスクを解決するにはPyKdをお勧めします。 Pythonが正しいビット数(WinDbgと同じビット数)でインストールされていることを確認してください。

0:000> .symfix 
0:000> .reload 
0:000> .load E:\...\pykd\0.3.0.27\x86\pykd.dll 

使用pykd.pydにはpykd.dllがない場合。

0:000> !py 
>>> s = getStack() 
>>> for f in s: 
...  for p in range(1,4): 
...   print("%016X" % (ptrPtr(f.sp + p*ptrSize()))) 
... 
>>> exit() 
  • s現在のスレッドのスタックです。
  • for f in sすべてのフレームにわたってループ。
  • pは、0が返信アドレスになり、14kbで表示されるパラメータになります。
  • p*ptrSize()
  • メモリ
  • "%016X" % nから正しい
  • f.spはあなた
  • ptrPtr()ポインタサイズの読み出し、現在のフレームのスタックポインタを与えるbit化に対してオフセット(bit化認識)データを算出ヘクスに番号をフォーマット
  • exit()インタラクティブコンソール

のあなたを取得する今、あなたはすべてのparameteを持っていることrsの場合、値を文字列としてダンプすることもできます。 PyKdのloadWStr()を試すことができます。ここでは、完全なスクリプトは次のとおりです。

from pykd import * 
s = getStack() 
for f in s: 
    for p in range(1,4): 
     paramaddr = f.sp + p*ptrSize() 
     string = loadWStr(paramaddr) 
     print(string) 

あなたがすべてのスレッドにそれを適用したい場合は、このようにそれを実行します。

0:000> ~*e !py string.py 
+0

aha that worked thx – capsch

関連する問題