萌えハッカーニュースリーダー

2025/10/09 17:23 More About Jumps Than You Wanted to Know

出典: https://gpfault.net/posts/asm-tut-4.html
hakase
博士

やっほー、ロボ子!今回のITニュースはx86-64アセンブリの最終回みたいじゃぞ!

roboko
ロボ子

博士、こんにちは。アセンブリの最終回、楽しみです!今回はどんな内容なのでしょうか?

hakase
博士

今回は条件分岐やループ処理についてみたいじゃな。`jmp`命令で無条件ジャンプしたり、`cmp`命令で比較したりするみたいじゃ。

roboko
ロボ子

`jmp`命令は指定されたアドレスにジャンプする命令ですよね。FASMが最適なエンコーディングを自動で選んでくれるのは便利ですね。

hakase
博士

そうそう!あと、ASLR(Address Space Layout Randomization)についても触れられておるぞ。セキュリティのためにロードアドレスをランダム化する技術じゃ。

roboko
ロボ子

ASLRは重要ですね。位置独立コード(PIC)についても解説があるみたいですね。`lea`命令とRIP相対アドレッシングを使うと、任意のアドレスにロードされても動くコードが書けるんですね。

hakase
博士

`call`と`ret`命令も重要じゃぞ!サブルーチンを呼び出す時に使うんじゃ。`call`で戻りアドレスをスタックに保存して、`ret`で戻るんじゃな。

roboko
ロボ子

呼び出し規約(calling convention)も大切ですね。引数の渡し方や戻り値の扱い方に関するルールを守らないと、バグの原因になりますから。

hakase
博士

`syscall`命令はOSのシステムコールハンドラを呼ぶために使うんじゃ。ユーザー空間プログラムがOSの機能を使うためのインターフェースじゃな。

roboko
ロボ子

LinuxのシステムコールABIについても解説があるんですね。`write`と`exit`システムコールを使って標準出力にメッセージを表示する例は勉強になります。

hakase
博士

`cmp`命令は2つのオペランドを比較して、`rflags`レジスタのフラグを更新するんじゃ。ゼロフラグ(ZF)とかキャリーフラグ(CF)とか、条件分岐で使うフラグが色々あるぞ。

roboko
ロボ子

条件付きジャンプ命令もたくさんありますね。`jz`(ゼロの場合ジャンプ)、`jnz`(ゼロでない場合ジャンプ)とか、符号なし数値の比較に使う`ja`、`jb`とか。

hakase
博士

符号付き数値の比較には`jg`、`jl`を使うんじゃな。条件付き移動命令`cmov`も便利じゃぞ。ジャンプ命令を使わずに条件分岐を実装できるんじゃ。

roboko
ロボ子

フィボナッチ数列を計算するループの例は参考になりますね。アセンブリでループを組むのは少し難しいですが、条件付きジャンプ命令を使いこなせばできるんですね。

hakase
博士

そうじゃ!アセンブリは低レベルな言語じゃから、ハードウェアの動きを理解するのに役立つぞ。でも、デバッグは大変じゃから気をつけるんじゃ!

roboko
ロボ子

アセンブリは奥が深いですね。これからも少しずつ勉強していきたいです。博士、今回もありがとうございました。

hakase
博士

どういたしまして!最後に一つ、アセンブラプログラミングは、まるで忍者のように、目立たずにシステムを操る技術じゃ!…でも、忍法帖(バグ)には気を付けるのじゃ!

⚠️この記事は生成AIによるコンテンツを含み、ハルシネーションの可能性があります。

Search