つまり、どうやってわかるの
特定のシステムコールが期待するパラメータの数
各パラメータが入るレジスタ、
最後に、各パラメータの意味は?
それを伝える同様のコマンドはありman
ますか?
つまり、どうやってわかるの
特定のシステムコールが期待するパラメータの数
各パラメータが入るレジスタ、
最後に、各パラメータの意味は?
それを伝える同様のコマンドはありman
ますか?
参照: x86-64 での UNIX および Linux システム コールの呼び出し規約とは
あなたが探しているのはカーネル ABI です。公式サイトは見つかりませんが、このような情報が記載されたブログがあります。
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
Linuxのmanページプロジェクト(もちろんC中心)
私が知っているシステムコールのマニュアルはありません。それは、ソースコードを掘り下げる必要があるものです。
このヘッダー ファイルは、引数でプロトタイプ化された多くのシステム コールを含んでいるため、便利です。
include/linux/syscalls.h
次のような定義が含まれています。
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);
arch syscalls ヘッダー ファイルには残りのシステム コールがあり、そのうちの 1 つはアーキテクチャに依存します。
arch/x86/include/asm/syscalls.h
(これらのファイルは 2.6.32 の時点のものです。カーネルの以前のバージョンと新しいバージョンでは、ファイル/ディレクトリ名が異なる場合があります)。
Linux カーネルの内部はかなり頻繁に変更され、主要なカーネル バージョン間で安定した ABI を維持するために多大な労力が費やされているわけではないことに注意してください。そのため、現在実行しているカーネルのカーネル ソース コードを確認する必要があり、他のカーネル バージョンで自動的にコンパイルされるとは思わないでください。