2011-12-22 5 views
6

は、どのように、各パラメータがでなければなりません登録 x86-64マシンのsyscallsのプロトタイプはどこで確認していますか?ある

、最終的に各パラメータが何を意味するのか、特定のシステムコールが期待するどのように多くのパラメータ

を知っていますか?

man alikeコマンドがありますか?

+0

OSを指定してください。 –

+0

@Alex、私はLinuxです。 –

答えて

1

私が知っているシステムコールのマニュアルはありません。あなたがソースコードを掘り下げなければならないものです。アーチのシステムコールのヘッダファイルがあり

asmlinkage long sys_getresuid(uid_t __user *ruid, uid_t __user *euid, uid_t __user *suid); 
asmlinkage long sys_getresgid(gid_t __user *rgid, gid_t __user *egid, gid_t __user *sgid); 
asmlinkage long sys_getpgid(pid_t pid); 
asmlinkage long sys_getpgrp(void); 
asmlinkage long sys_getsid(pid_t pid); 
asmlinkage long sys_getgroups(int gidsetsize, gid_t __user *grouplist); 

:それは次のように、定義をconains

include/linux/syscalls.h

:それは引数を指定して試作したシステムコールの多くを持っているよう

このヘッダファイルには、便利です残りのシステムコールは、アーチに依存するものです:

arch/x86/include/asm/syscalls.h

(これらのファイルは2.6.32以降です。以前のバージョンのカーネルのファイル/ディレクトリ名が異なる場合があります)。

Linuxカーネルの内部はかなり頻繁に変更されることに注意してください。主要なカーネルバージョン間で安定したABIを維持する努力はあまりありません。したがって、あなたは現在実行しているカーネルのカーネルソースコードを見なければならず、他のカーネルバージョンでも自動的にコンパイルするとは思わないでしょう。

+0

AFAIK 'syscalls.h'には、各システムコールの番号に関する情報だけが含まれており、どのレジスタにパラメータが入るのかに関する情報は含まれていません。 –

+0

あなたは別のファイルを考えています。私はこのファイルのwhatsの例を使って答えを更新しました。 –

+0

Linuxカーネルの内部は頻繁に変更されることがありますが、カーネルがユーザスペース(別名システムコール)用に提供するAPIは本当に安定しています。 – muixirt

3

も参照してください。What are the calling conventions for UNIX & Linux system calls on x86-64

あなたが探していることは、カーネルABIで、私は公式サイトを見つけることはできませんが、a blogは、このような情報でもあります。

のint 80hを呼び出しとx64のでは、それは次のとおりです。

value storage 
syscall nr rax 
arg 1 rdi 
arg 2 rsi 
arg 3 rdx 
arg 4 r10 
arg 5 r9 
arg 6 r8 
関連する問題