システムコールについて。
アセンブリ言語で、int $0x80はシステムコールと言われていますが、Linuxを知らないとわかりません。システムコールはアプリとカーネルのインターフェースです。
x86 Linux 32bitのシステムコールの呼び出しは int 0x80です。
システムコールはEAXに格納されている数値でいろいろな処理ができます。
https://www.mztn.org/lxasm64/x86_x64_table.html
を見ていただくとWRITEのsyscall#は4です。
mov $0x4,%eax
でeaxに4を入れているので画面に出力したいのだとわかります。
WRITEの第2引数は画面に出力したい文字列が格納されているアドレスでECXに格納します。
mov %esp,%ecx
とスタックポインターのアドレスをecxに入れています。
ESPは
push eax
でEAXに格納されている$0x616b6157(Waka)がスタックに退避しています。
WRITEの第3引数は文字数です。文字数はEDXに格納します。
mov $0x4,%edx
と4が入っているので文字数は4です。
このプログラムを実行させると画面にWakaと表示して元の画面に戻ります。そのためのRETです。
C言語で書けばたった1行。
write(1,"Waka",4)
これについて詳しく教えていただけないでしょうか?すみません。
お礼
なるほど。。 ありがとうございます!!