32 ビット x86 命令セット用の逆アセンブラーを開発しています。私のコードは現在、ほとんどの 1 および 2 バイト オペコードを正しくデコードしますが、問題が発生しました。コードの出力を Objdump と比較すると、Objdump は次のように表示されます。
89 14 98 mov %edx,(%eax,%ebx,4)
8b 45 d8 mov -0x28(%ebp),%eax
一方、私のコードは次のようになります:-
89 14 98 8B 45 D8 89 MOV.
Intel のドキュメント (特に Modrm および Sib アドレス指定フォーム テーブル) の理解から、このバイト ストリームは次のように解釈する必要があります。
89 - The opcode
14 - The Modrm byte
98 - The Sib byte specified by the Modrm byte (as shown in Intels Modrm addressing table)
8B 45 D8 89 - The four byte displacement specified by the Sib byte (as shown in Intels Sib addressing table).
Objdump は、変位バイトがないと言っていますが、私のコードとインテルのドキュメントの両方が (少なくとも私には) そうでないと言っているようです。
誰かが私のエラーがどこにあるかを指摘できれば、それは大歓迎です。
ありがとう。