C言語プログラムからアセンブリ言語コードを得る

※ここでは、Linuxgcci386 CPUを使っています。

 

プログラムは、C言語アセンブリ言語機械語という過程を経て実行に至るはずですが、現在はコンパイラが一括して処理してしまうので、この過程を直接見ることができません。 より人間側に近い高級言語から、より機械に近いアセンブリ言語マシン語になっていくつながりを見ることができないのです。

 

しかし、gccの -S オプションを使うと、

簡単にC言語のソースのアセンブリを出力できます。

gcc -S test1.c

適当に、Hello,world!でもコンパイルしてみましょう。

#include <stdio.h>

 

int main()

{

    printf("Hello,world!\n");

    return 0;

}

これを、gccで -S を使いアセンブルすると test1.s のようなアセンブリ言語のソースファイルが出力されます。

アセンブリは得られたけど、これもソースだから、このままだと実行できません。 実は、gccアセンブリソースもコンパイルできます。 ファイル名の拡張子が .s になっているとアセンブリソースと認識されます。

gcc test1.s

これで、出力の実行可能ファイル (a.out)を得られます。

アセンブリソースからオブジェクトファイルで出力することもできます。

gcc -c test1.s

asコマンド (gas) でアセンブルすることも可能です

$  as  -otest1.o  test1.s