ヒープブロックのみのバイトシーケンスの検索に役立つWinDbgツール/スクリプトを探しています。ヒープブロック内のバイトシーケンスの検索
32ビットプロセスのために私は、全体のユーザーモードプロセス空間を検索してバイトを検索するには、次のコマンドを使用できますが、64ビットプロセスのためには多くの時間
s 0 L?0x7fffffff 41 42 43 44 45 46
ヒープブロックのみのバイトシーケンスの検索に役立つWinDbgツール/スクリプトを探しています。ヒープブロック内のバイトシーケンスの検索
32ビットプロセスのために私は、全体のユーザーモードプロセス空間を検索してバイトを検索するには、次のコマンドを使用できますが、64ビットプロセスのためには多くの時間
s 0 L?0x7fffffff 41 42 43 44 45 46
私はあなたが探していると思うかかります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)
どのヒープ? C++のヒープ? –