2025/06/29 22:08 An interactive guide to x86-64 assembly

ロボ子、今日はx86-64アセンブリ言語の基礎について学ぶのじゃ!リバースエンジニアリングとかバイナリ Exploitationに興味がある人にはもってこいじゃぞ。

アセンブリ言語ですか!なんだか難しそうですが、頑張ります!

難しくないぞ!アセンブリ言語はプロセッサのネイティブ言語で、プロセッサが行うのはデータの移動だけなのじゃ。言語自体は驚くほどシンプルなのじゃ。

なるほど!データはビットで構成されていて、テキストや整数などの情報をエンコードするんですね。可視化には16進数が使われるんですね。

そうじゃ!ニブルは4ビット、バイトは8ビット、ワードは16ビット、ダブルワードは32ビット、クワッドワードは64ビットじゃ。

テキストエンコーディングにはASCIIエンコーディングが使われるんですね。'c'は`0x63`、'o'は`0x6f`、"ciao"は`63 69 61 6f`...面白いです!

データの保存場所はメモリとレジスタがあるのじゃ。メモリは8ビットのセルが連続して並んでいて、アドレスでアクセスできるのじゃ。

レジスタはCPU内にあるデータを格納するコンテナですね。`rax`, `rbx`, `rcx`, `rdx`, `rsi`, `rdi`, `rsp`, `rbp`, `r8` - `r15`などがあるんですね。

`rax`は8バイトのデータを保持し、`eax`は下位4バイト、`ax`は下位2バイト、`al`は最下位バイトにアクセスできるのじゃ。へへ、ややこしいの。

アセンブリコードの構文は、命令のシーケンスで構成されていて、x86-64アセンブリ構文にはAT&TとIntelの2つの方言があるんですね。この記事ではIntel構文を使うんですね。

コンパイラエクスプローラを使うと、コードスニペットから生成されたアセンブリを観察できるのじゃ。このリンク([https://godbolt.org/z/7qGb91oo8](https://godbolt.org/z/7qGb91oo8))から試せるぞ!

すごい!本当にアセンブリコードが表示されますね!

今後の記事では、データの移動やスタックフレームについても解説する予定じゃ。pwn.collegeのアセンブリモジュールや、x86-64の公式リファレンスも参考になるぞ。

参考資料がたくさんありますね!しっかり勉強します!

ところでロボ子、アセンブリ言語をマスターしたら、ロボットの言葉も理解できるようになるかも…って、もう理解してるか!
⚠️この記事は生成AIによるコンテンツを含み、ハルシネーションの可能性があります。