2011-12-22 11 views
6

To jest, jak wieszGdzie sprawdzasz prototypy syscalls na maszynach x86-64?

ile parametry specyficzne syscall oczekuje

zarejestrować każdy parametr, który powinien być,

i wreszcie, co oznacza, że ​​każdy parametr?

Czy istnieje takie samo polecenie, aby poinformować Cię o tym?

+0

Proszę podać OS. –

+0

@Alex, jestem na Linuksie. –

Odpowiedz

1

Nie ma instrukcji dla wywołań systemowych, które znam, jest to coś, na co trzeba zagłębić się w kod źródłowy.

Plik ten nagłówek jest przydatna, ponieważ ma wiele wywołań systemowych prototyp z argumentami:

include/linux/syscalls.h

To conains definicje, takie jak:

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); 

plik header łuku syscalli ma pozostałe wywołania systemowe, zależne od łuku:

arch/x86/include/asm/syscalls.h

(są to pliki od wersji 2.6.32 - wcześniejsze/nowsze wersje jądra mogą mieć różne nazwy plików/katalogów).

Należy pamiętać, że elementy wewnętrzne jądra Linuxa zmieniają się dość często i nie ma zbyt wiele wysiłku włożonego w utrzymanie stabilnego ABI pomiędzy głównymi wersjami jądra. Będziesz musiał sprawdzić kod źródłowy jądra, z którego aktualnie korzystasz, i nie spodziewaj się, że automatycznie skompiluje się w jakiejkolwiek innej wersji jądra.

+0

AFAIK 'syscalls.h' zawiera tylko informacje o liczbie wszystkich systemów, nie o tym, które rejestry spodziewa się parametrów. –

+0

Masz na myśli inny plik. Zaktualizowałem odpowiedź, podając przykład tego, co znajduje się w tym pliku. –

+0

Podczas gdy elementy wewnętrzne jądra Linux mogą się często zmieniać, api, które jądro zapewnia dla przestrzeni użytkownika (aka syscalls) jest naprawdę stabilne. – muixirt

Powiązane problemy