バイナリ
48 c7 c0 01 00 00 00
を見ると、あなたがその意味を理解するために、それを分解する必要があります。
逆アセンブルのアルゴリズムは難しくありませんが、複雑です。複数のテーブルを検索することを想定しています。
ザ・アルゴリズムは、あなたがINSTRUCTION FORMAT
呼ば章から読み始め、インテル・デベロッパ・マニュアルの第2巻に
Intel® 64 and IA-32 Architectures
Software Developer’s Manual
Volume 2 (2A, 2B & 2C):
Instruction Set Reference, A-Z
に記載されています。
あるいは、全体の章では、バイナリX86を分解に専用されているように
X86 Instruction Set Architecture, Mindshare, by Tom Shanley.
として、このトピックに全体の章を捧げ良い本が、あります。
それとも、AMD製の同じ言語のマニュアルからの一般的なアルゴリズムを読み始めることができます:あなたはこの命令の言語を定義するオートマトンを見つける章Instruction Encoding
で、
AMD64 Architecture
Programmer’s Manual
Volume 3:
General-Purpose and System Instructions
ここで、そしてからこのグラフィカルスキームでは、簡単にデコーダを書くことができます。
これを実行した後は、第2巻のインテルマニュアルに戻って参考資料として使用することができます。
http://opensecuritytraining.info/からreverse engineering classも有用であることがわかりました。このサイトはCMUのPhd学生によって作成されていますが、そのほとんどはうまくいきませんが、それを勉強して適用するにはもっと時間がかかります。
基本的な考え方を理解したら、アルゴリズムを実装する無料のプロジェクトを見ることができます。私は有用なdistormプロジェクトを見つけました。最初は、(qemuやobjdumpのような)抽象的なプロジェクトを見ないことが重要です。これは、あなたが失ってしまうのと同じコードで多くの言語のdissasemblerを実装しようとします。 Distorm
は、x86にのみ焦点を当て、正確かつ徹底的に実装しています。 X86言語の定義は正式な言語で、IntelとAMDのマニュアルは自然言語を使用してX86言語を定義しています。
他のプロジェクトはうまく動作しますudis86です。
私はここで同様の質問を見ました。 Googleでこれを見つけることができたら、私は尋ねなかったでしょう。私が私の質問に載せた参考文献を知っているという事実は、自分自身を捜すのはあまりにも怠惰ではないことを示しています。 – Christoph
@Oded、あなたが探しているものがわからない場合は、 "x86 0x48命令プレフィックス"でグーグルグーグルが非常に難しいです... – Griwes
@Oded私は開発者に固有の質問に言い直しました。 x86asm.netでの(本当に良い!)リファレンスを考えると、私は、そのオペコードがどのように分割されているかを理解する必要があると思います。グリズはそれを助けた。 – Christoph