を呼び出すCプログラムをwrite
作成し、アセンブリ言語にコンパイルすることができます(-S
オプションを使用)。次に、出力を調べて、コンパイラーがどのように実行するかを確認します。
編集:
OpenSolaris libcは、次のように動作します。
最初にwriteを呼び出すときは、いくつかのことを確認してから、__writeを呼び出します。
pushl 0x10(%ebp)
pushl 0xc(%ebp)
pushl 0x8(%ebp)
call c2730 <__write>
__writeは次のようになります。
<__write>:
call c2735 <__write+0x5>
pop %edx
mov $0x4,%eax
mov %esp,%ecx
add $0x10,%edx
sysenter
jae c2751 <__write+0x21>
cmp $0x5b,%eax
je c2730 <__write>
jmp 2e0d0 <__cerror>
ret
書き込みシステムコール番号をeax(4)に、スタックポインタをecxに、リターンアドレスをedxに配置します。そして、書き込みシステムコールへの引数はすでにスタックにプッシュされています。