2016-08-17 7 views
0

私はWindows X64でテキストエディタのデバッガを書いています。ブレークポイントとステップオーバー/ステップアウトを実装しました。私は基本的に、現在の行(PDBファイルとDbgHelp経由で取得)と次の行で命令のアドレスを取得する必要があるため、これらのアドレス間に 'call'命令があるかどうかを確認する必要があるため、ステップインで立ち往生していますもしそうなら、私たちはステップインします。ディスアセンブラなしで 'call'命令をスキャンしていますか?

DbgHelp/PDB経由で(ディスアセンブラを書いたり使用しなくても)この情報を取得する方法があったのでしょうか?または多分命令の特定のバイトオーダを利用するかもしれません。「呼び出し」は一意であり、そのバイトが順序付けされているので、バイトごとに読み込み、「呼び出し」と一致するかどうかを確認できますか? (そのように私は完全または部分的な災害を行う必要はありません)

アイデア?どんな助けもありがたいです

答えて

0

残念ながら、ありません。

x86_64版のコードでcallqための最も一般的なオペコードはe8ですが、完全に把握するために、バイナリを分解することなく(定数の一部としてなど、)別の文脈でe8からcallqを意味e8を区別する方法はありません各命令が開始されます。 x86では可変長命令が使用されるので、命令の開始位置は必ずしも明確ではないことに注意してください。

関連する問題