Где вы проверяете прототипы системных вызовов на компьютерах с архитектурой x86-64? - PullRequest
6 голосов
/ 22 декабря 2011

То есть откуда ты знаешь

сколько параметров ожидает конкретный системный вызов,

, в котором должен быть указан каждый параметр,

и, наконец, что означает каждый параметр?

Есть ли man похожая команда, чтобы сказать вам это?

Ответы [ 3 ]

3 голосов
/ 23 декабря 2011

см. Также: Каковы соглашения о вызовах для системных вызовов UNIX и Linux на x86-64

То, что вы ищете, это ядро ​​ABI, я не могу найти официальный сайт, но есть блог с такой информацией.

В x64 с вызовом int 80h это:

value   storage
syscall nr  rax
arg 1   rdi
arg 2   rsi
arg 3   rdx
arg 4   r10
arg 5   r9
arg 6   r8
2 голосов
/ 23 декабря 2011

Проект man-страниц Linux (конечно, C-centric)

1 голос
/ 22 декабря 2011

Не существует руководства по системным вызовам, о котором я знаю, это то, для чего вам нужно покопаться в исходном коде.

Этот заголовочный файл полезен, так как он содержит множество системных вызовов, созданных на основе прототипов с аргументами.:

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/x86/include/asm/syscalls.h

(эти файлы относятся к 2.6.32 - более ранние / более поздние версии ядер могут иметь разные имена файлов / каталогов).

Имейте в видучто внутренние компоненты ядра linux меняются довольно часто, и не требуется много усилий для поддержания стабильного ABI между основными версиями ядра.Итак, вам нужно взглянуть на исходный код ядра, на котором вы сейчас работаете, и не ожидать, что он автоматически скомпилируется в любой другой версии ядра.

...