GAS_標準ライブラリ関数

GAS(GNU アセンブラ)で標準ライブラリ関数を利用する。

GASはGCCの一部であるため、C言語と同じ標準ライブラリ関数を使うことができます。

GASはアセンブル時に、リンカによってC言語の標準ライブラリ(libc.so)をリンクしています。


GASアセンブリにおける標準ライブラリ関数の呼び出しルールは以下の通りです。

  • 引数は逆順にpushする。
  • 戻り値がある場合はeaxに返却される。
  • 関数から返ってきたときにeax、ecx、edxの値は保証されない。

GASの標準ライブラリ関数を利用するサンプル1

以下は標準ライブラリ関数printfを用いたhello worldプログラムです。

「call printf」を実行する直前に文字列をスタックに格納します。


.data
MSG: .string "hello world\n"
.text
.global main

main:
    push %ebp
    movl %esp, %ebp

    pushl $MSG
    call printf

    leave
    ret

GASの標準ライブラリ関数を利用するサンプル2

2つの文字列を連結して、標準出力に表示します。

strcat関数の結果がeaxに格納されていることが確認できます。


.data
MSG1: .string "gnu "
MSG2: .string "assembler"
MSG3: .string "gas = %s\n"
.bss
.text
.global main

main:
    push %ebp
    movl %esp, %ebp

    /* 文字列を連結する */
    pushl $MSG2
    pushl $MSG1
    call strcat

    /* 文字列を出力する */
    pushl %eax
    pushl $MSG3
    call printf

    leave
    ret


関連ページ