- 締切済み
システムコールについて。
アセンブリ言語で、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) これについて詳しく教えていただけないでしょうか?すみません。
- みんなの回答 (2)
- 専門家の回答
みんなの回答
- hiodraiu
- ベストアンサー率15% (451/2846)
ソフトウェア割込みの何が分からないのですか?ハードウェア割込みは理解できてますか?ベクターテーブルっていきなり話し始めて大丈夫ですか? そういった知識がどこまであるかによって説明の範囲も違ってきます。 また、ベクターテーブルとか割込みって単語を軸に調べれば、ある程度は分かると思うのですが、その辺りは如何ですか?
- hiodraiu
- ベストアンサー率15% (451/2846)
まず、詳しく、どの部分の何が知りたいのですか? 詳しく知るにもまず基本をどこまで理解されていますか? 例えば、ソフトウェア割込みを理解されていますか?
補足
ソフトウェアの割り込みから分かりません。教えていただけないでしょうか?すみません。