【アプリ版】サポートOS変更のお知らせ

> b8 04 00 00 00 mov $0x4,%eax
> 89 e1 mov %esp,%ecx
> cd 80 int $0x80

int $0x80 はIntel x86系CPUにおけるLinuxカーネルコールで、これ自体はCPUを特権モードに移行して割り込みベクタテーブルの16進80番(10進でいうと128番)に記載されたアドレスに置かれている割り込み処理ルーチンを実行すると言うだけのこと。
Linux OSでは割り込みベクタテーブルの16進80番にシステムコールの入口が置かれているので、これがシステムコールの呼び出しになります。

どのシステムコールが実行されるかは、Intel x86系CPUのLinuxの場合は呼び出し時のeaxレジスタの値なので mov $0x4,%eax からシステムコール4番(write)が呼ばれていることが分かります。
の所で
つまり、割り込み処理ルーチンで、システムコールの入り口を呼び出してシステムコールの何番を呼び出すのかを 2行前を見て判断する。という事でしょうか?ルーチンは決まった手順という意味であっていますでしょうか?教えていただけないでしょうか?すみません。
合っていますでしょうか?よろしくお願いします。

質問者からの補足コメント

gooドクター

A 回答 (8件)

No.7:追記



eax が 0x04 のファンクションのとき、0x80への割り込みの場合、ecx を引数として(仕様として)必要としているからです。このあたりは、どのファンクションのときにどの引数が必要かは、仕様のドキュメントを確認してみてください。
    • good
    • 0

No.6:追記



この場合というのが、この質問のことでしたら、
> b8 04 00 00 00 mov $0x4,%eax ← eaxがファンクションです。
> 89 e1 mov %esp,%ecx ← ecxが引数です。
> cd 80 int $0x80

それ以外のファンクションの確認方法は下記ページの「the Linux generated file」に記載されているファイルを確認してください。
https://en.wikibooks.org/wiki/X86_Assembly/Inter …
    • good
    • 0
この回答へのお礼

つまり、この場合では、ecxを設定して、int$0x80を呼び出しているのでしょうか?なぜ、引数を設定した上で、int0x80を呼び出すのでしょうか?ファンクションと引数ではないのでしょうか?教えていただけないでしょうか?すみません。

お礼日時:2021/06/30 19:20

No.5:追記



「int $0x80」で呼び出した先で必要な「引数/parameter」を参照して、何らかの処理を行いますので、その必要な「引数/parameter」を設定した上で「int $0x80」を呼び出します。「2行前を見て判断する」ではなく、あくまでも設定されている「ファンクション/system call number」や「引数/parameter」を見て判断・処理を行っているのです。
    • good
    • 0
この回答へのお礼

この場合の引数とファンクションは何なのでしょうか?教えていただけないでしょうか?すみません。

お礼日時:2021/06/30 18:10

No.4:追記



「2行前を見て判断する」ではなくて、int $0x80 先の割り込み先では「eax を見て(ファンクション/system call numberを)判断する」という意味です。また、eax 以外にも、他のレジスター(やスタック)を(引数/parameterとして)見て(または得て)処理を行っています。
    • good
    • 0
この回答へのお礼

また、eax 以外にも、他のレジスター(やスタック)を(引数/parameterとして)見て(または得て)処理を行っています。とはどういう事でしょうか?教えていただけないでしょうか?すみません。

お礼日時:2021/06/30 17:01

No.3:追記



何のどの部分ですか?
どのような理解ができればゴールですか?
これは何かの課題ですか?
    • good
    • 0
この回答へのお礼

(eax に ファンクション=system call number をセットし、他のレジスターに 引数=parameter をセットして、)80h に割り込み処理の所で、 80hのhは16進数を表しているのですよね?括弧の部分が分かりません。教えていただけないでしょうか?すみません。

お礼日時:2021/06/30 16:16

No.2:追記



eax に ファンクション=system call number をセットし、他のレジスターに 引数=parameter をセットして、80h に割り込み処理をかけると、その割り込み処理の返りとしてファンクションの結果が何らかのかたちで得られるという仕組みです。

https://en.wikibooks.org/wiki/X86_Assembly/Inter …
    • good
    • 0
この回答へのお礼

もう少し詳しく教えていただけないでしょうか?すみません。

お礼日時:2021/06/30 15:04

No.1:追記



割り込みとは言っても、プログラムの中での割り込みは、関数を呼び出すのと同じような考え方でいいと思います。
「int $0x80」という関数を呼び出すときに eax にファンクションを設定し、他のレジスター(あるいはスタック)に引数を設定するという考え方です。「int $0x80」という関数を呼び出すとき前に、あらかじめファンクションや引数を設定しておかなければいけません。「int $0x80」の中では eax を見て何を実行するかを決め、他の引数でそれを実行します。
    • good
    • 0
この回答へのお礼

eax にファンクションを設定し、他のレジスター(あるいはスタック)に引数を設定するという考え方です。「int $0x80」という関数を呼び出すとき前に、あらかじめファンクションや引数を設定しておかなければいけません。「int $0x80」の中では eax を見て何を実行するかを決め、他の引数でそれを実行します。
ここがよく分かりません。教えていただけないでしょうか?すみません。

お礼日時:2021/06/30 13:46

「2行前を見て判断する」は人間がそのように判断しているということであり、CPUは「int が実行された時点での レジスターeax の値を見て判断する」ということです。


ここでいう「ルーチン」とは、int を実行する前にやっておかなければいけない手順のことです。
    • good
    • 0
この回答へのお礼

intを実行する前にやっておく事とは何でしょうか?教えていただけないでしょうか?すみません。後、割り込み処理ルーチンとは、プログラムに割り込んで、システムコールの入り口のシステムコールがwriteの4番だと分かるという事でしょうか?教えていただけないでしょうか?すみません。

お礼日時:2021/06/30 10:14

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人はこんなQ&Aも見ています

gooドクター

このQ&Aを見た人がよく見るQ&A

このカテゴリの人気Q&Aランキング