バイナリを見ると
48 c7 c0 01 00 00 00
その意味を理解するためにそれを分解する必要があります。
逆アセンブルのアルゴリズムは難しくありませんが、複雑です。複数のテーブルを検索することを想定しています。
アルゴリズムについては、インテル開発者マニュアルの第2巻で説明されています。
Intel® 64 and IA-32 Architectures
Software Developer’s Manual
Volume 2 (2A, 2B & 2C):
Instruction Set Reference, A-Z
あなたはと呼ばれる章から読み始めますINSTRUCTION FORMAT
。
または、このトピックに関する章全体を取り上げた優れた本があります。
X86 Instruction Set Architecture, Mindshare, by Tom Shanley.
章全体がバイナリX86の分解に専念しています。
または、AMDが作成した同じ言語のマニュアルから一般的なアルゴリズムを読み始めることができます。
AMD64 Architecture
Programmer’s Manual
Volume 3:
General-Purpose and System Instructions
ここでは、この章で、Instruction Encoding
この命令言語を定義するオートマトンを見つけます。このグラフィカルスキームから、デコーダーを簡単に作成できます。
これを行った後、インテルのマニュアル、第2巻に戻って、参考書として使用できます。
また、http://opensecuritytraining.info/のリバースエンジニアリングクラスも役に立ちました。このサイトはCMUの博士課程の学生によって作成されており、そのほとんどはうまくいっていませんが、勉強して適用するには長い時間がかかります。
基本的なアイデアを理解したら、アルゴリズムを実装する無料のプロジェクトを調べることができます。私はdistormプロジェクトが役に立ちました。最初は、迷子になるのと同じコードで多くの言語のdissasemblerを実装しようとする抽象的なプロジェクト(qemuやobjdumpなど)を見ないことが重要です。 Distorm
x86のみに焦点を当て、正しく徹底的に実装します。これは正式な言語でX86言語の定義を伝えますが、IntelおよびAMDのマニュアルは自然言語を使用してX86言語を定義します。
うまく機能する他のプロジェクトはudis86です。