ワトソン博士の情報を含むエンドユーザーからクラッシュレポートを受け取り、それらを使用してクラッシュが発生した場所(つまり、コードのどの行)を見つけたいと思います。
出荷するexeはデジタル署名されているため、クラッシュレポートのEIPを使用することはできません。これにより、すべてのオフセットが変更されます。ただし、クラッシュ情報には「CS:EIPのバイト数」も含まれています。これは、クラッシュが発生したEIPから始まる最初の16バイトです。次のようになります。
Bytes at CS:EIP:
85 c4 14 c3 8b ff 55 8b ec 6a 0a 6a 00 ff 75 08
これらの16バイトは、exeファイルで1回だけ発生します。HEXビューアだけを使用してEXEでオフセットを見つけることができますが、デバッグ中にそこにジャンプしてソースにある行を確認するには、EXEがロードされた後のメモリ内のオフセットを知る必要があります。
ロード後にプログラムのコードセグメントをスキャンする最良の方法は何ですか?EXEのベースオフセットがどこにあるかを見つけるコードを追加し、それを循環して、memcmpを使用してバイトパターンが発生する場所を見つけることはできますか?
また、EXEのベースオフセットがどこにあるかをどのように見つけることができますか?