GASでhello,world
GAS(Gnu Assembler)でHello worldしてみる。以前のテストではgccを使っていたが、それはどことなく外道な感じがしたのでasだけで起動できるようにした(Thx,参考文献)。
.section .data message: .ascii "hello,gas!\n" .section .text .global _start _start: //システムコール4番(write)をコールしたい。 movl $4,%eax //引数1:出力先fd - この場合は標準出力だよね?1が何を示すか不明。 //ToDo :後で調べる movl $1,%ebx //引数2:出力先に対して書き込みたいバッファ movl $message,%ecx //NULL文字を入れて12文字 movl $12,%edx int $0x80 _exit: //システムコール1番(exit) movl $1,%eax //引数1:終了ステータス movl $0,%ebx int $0x80
れっつらコンパイル。as(アセンブラ)とld(リンカ)を使う。
#as hello.s -o hello.o #ld hello.o -o hello #./hello hello,world!
おー、シンプルでわかりやすい。
なお、システムコールの番号を参照したい場合は、linuxのソースコードを落としてきてarch/x86/ia32/ia32entry.Sを参照するとよい(x86アーキテクチャの場合)。