2017-01-02 10 views
0

ヒープブロックのみのバイトシーケンスの検索に役立つWinDbgツール/スクリプトを探しています。ヒープブロック内のバイトシーケンスの検索

32ビットプロセスのために私は、全体のユーザーモードプロセス空間を検索してバイトを検索するには、次のコマンドを使用できますが、64ビットプロセスのためには多くの時間

s 0 L?0x7fffffff 41 42 43 44 45 46 
+0

どのヒープ? C++のヒープ? –

答えて

1

私はあなたが探していると思うかかりますC++ヒープ。そこにはヒープアドレスがあるかどうか調べるのに役立つ!heapコマンドがあります。別の!heap <address>では、そのヒープの長さを得ることができます。この情報は、アドレス範囲を制限するためにsに入力することができます。

WinDbgスクリプトや.foreachなどでは可能かもしれませんが、WinDbgスクリプトを書くのは楽しいものではなく、簡単に壊れるので、実際のプログラミング言語から始めましょう。

この情報を指定して、ヒープを検索できるPyKdスクリプトを開始しましょう。私はまだPyKdに慣れていないので、ほとんどdbgCommand()を使用します。結果を解析するためにPythonの部分を使用します。これにより、単語の同一出力で単語に頼る必要はありません。

残念ながら、私のPyKdのセットアップは、この回答を書いている途中で壊れてしまった。私のWinDbgがクラッシュする前に私が持っていたことはここにあります。これはまだ引数として検索バイトを取らないので不完全であることに注意してください。 XXXがどこにあるかを追加します。

from pykd import * 

heap = dbgCommand("!heap").split('\n') 
for ntheap in heap: 
    if "NT Heap" in ntheap: 
     address = ntheap[0:ntheap.index("NT Heap")-1] 
     heapdetails = dbgCommand("!heap "+address.strip()).split('\n') 
     for detail in heapdetails: 
      if "Segment at" in detail: 
       end = detail[detail.index(" to ")+4:detail.index(" (")-1] 
       length = hex(int(end,16)-int(address,16)) 
       results = dbgCommand("s "+address+" L?"+length+" XXX") 
       print(results) 
+0

pls、クラッシュダンプをアップロードする – ussrhero

+0

@ussrhero:私は1つを取得しようとしましたが、例外なくプロセスを終了します。私はすでにWinDbgをデバッグして何が起きているのかを調べる –

+0

Pythonのバージョンは何ですか? Python 2.7.11にも同様のバグがあります – ussrhero

関連する問題