NASMで簡単なコードを書く場合、C言語の逆アセンブリーでサンプルを用意する

NASMを始めたばかりだと、すこしのコードを書くのにも時間が掛かります。sum関数やfactorial関数など、ちょっとした関数やいくつか複合した条件分岐などを作る場合は、まずC言語で実装してそれを逆アセンブルして、コードを入手するのもよい案かもしれません。

gccで逆アセンブル

-fverbose-asmを追加すると、引数や戻り値のヒントがコメントとして表示されます。もっとコードと比較しながら確認したい場合は、gdbを使ったほうがよいです。

objdumpで逆アセンブル

factorial.sの抜粋

以下がgccで逆アセンブルした結果です。コメントで<retval>と引数nが確認できます。またn * factorial(n-1)の部分をimul命令(imul eax, ebx)で行っています。ここまでくればあとは、このコードを解析していけば、自分でNASMのfactorialを作る子tができます。