`int 0x80` の背後にある呼び出し規約を何と呼びますか?

`int 0x80` の背後にある呼び出し規約を何と呼びますか?

規則があることは知っていますが、このようにではなくsyscallを呼び出すときに表示される、その前に来る呼び出し規則を何と呼ぶのでしょうか。int 80syscall

mov  rax,4     ; system call number (sys_write)
mov  rbx,1     ; file descriptor (stdout)
mov  rcx,hello ; message to write
mov  rdx,12    ; message length
int  0x80      ; call kernel

私は読むここの後の引数は、、(またはx64の場合は、、、)ですrdxが、esiediebprsirdirbpWikipedia の呼び出し規約のページ、 しかし整数80hWindows でもこの規則が使用されているようですね?

raxこの慣例的な名前は何ですか。Linuxカーネルソースのどこで定義されていますか?また、を呼び出すときに手順を解決するテーブルはどこにありますかint 0x80? の場合syscallsys_writerax=1

答え1

あなたの質問は多くのトピックに及んでいますので、私はそれらすべてに答えるように努めます。

  1. SYSENTERシステムコールの呼び出し方法を表す単一の標準的な用語があるかどうかはわかりませんが、システムコールの呼び出し方法(またはではなく割り込み0x80 SYSCALL)についてはさらにわかりません。x86-64では、文書化されたを使用するシステム コール インターフェイスはSYSCALL、System V x86-64 ABI で説明されていますが、これは参考情報であり、規範的ではありません。同様に、これを「i386 Linux カーネル ABI」(「i386」を、使用しているアーキテクチャに置き換えてください) と呼べば、ほとんどの人が何について話しているのか理解できるでしょうが、「カーネル ABI」には別の意味があり (カーネル モジュールのコンテキストで)、これも割り込み 0x80 に限定されないため、混乱を招く可能性があります。

    実際には、ほとんどの人は、特に進化する可能性があるため、このレベルの詳細まで気にする必要はありません。SYSCALLあなたが言及したように、割り込み 0x80 などだけでなく、独自の微妙な点を導入し、現在 x86 のすべてのシステム コールの推奨エントリ ポイントとなっている vDSO もあります... もちろん、これは特定の呼び出し規約を参照する用語が存在しないことを意味するものではありませんが、それがそれほど役立つかどうかはわかりません。

  2. Windowsはシステムコールインターフェース0x2Eの割り込みの使用もサポートしていますが、その「呼び出し規約」は全く違う: 引数はスタックにプッシュされ、要求されたシステム コールは EAX によって指定され、EBX はスタック上の引数を指します。

  3. 現在のx86カーネルはシステムコールインターフェースを次のように定義しています。arch/x86/entry:entry_32.Si386インターフェースを含み、entry_64.Sx86-32 および x86-64 インターフェース、entry_64_compat.S32ビットx86-64インターフェース(下位互換性のため)syscalls/syscall_32.tbli386 システムコールテーブル、syscalls/syscall_64.tblx86-32 および x86-64 システム コール テーブル。

    これらのファイル内のコメントは、特に引数がどのように渡されるかというインターフェースを文書化しています。32ビット呼び出しの場合、EAXにはシステムコール番号が含まれ、そのパラメータはEBX、ECX、EDX、ESI、EDI、およびEBPに配置されます( のパラメータ自体はSYSENTER、割り込み0x80のパラメータを含むユーザースタックへのポインタです)。64ビット呼び出しの場合、RAXにはシステムコール番号が含まれ、そのパラメータはRDI、RSI、RDX、R10、R8、およびR9に配置されます(システム コール レジスタと順序が Intel 32 ビットから 64 ビットに変更されたのはなぜですか?)。図解付きのわかりやすい要約があります。calling.h

ちなみに、歴史的な比較では、主にMS-DOSの呼び出しインターフェースが参照されることが多い。割り込み 0x21; 多重割り込みも含まれていました。0x2F、提供された拡張可能なメカニズムシステム サービスを追加するため (通常は TSR が関係し、デバイス ドライバーはほとんどの場合、異なるインターフェイスを使用します)。

関連情報