Programming - socket, connect ....
Jaroslav Snajdr
jsnajdr na kerio.com
Úterý Únor 5 11:47:29 CET 2002
Martin Kubecek wrote:
> Ovsem musim se priznat, ze mi zatim unika jak to cele funguje, kdyz
> do zdrojaku uvadim volani jinych funkci, nez ktere se ve skutecnosti
> volaji, podstatnou roli tam musi hrat linker (pride mi to dost
> komplikovane)
Systemova volani funguji tak, ze se do registru ulozi cislo syscallu a
pak se zavola preruseni int $0x80, ktere preda kontrolu jadru. V libc
jsou systemova volani implementovana jako funkce, ktere obsahuji inline
assembler provadejici zminene akce. Podivejte se do souboru
asm/unistd.h, urcite se vam bude libit. Obsahuje makra _syscallx(),
kterymi se syscall wrappery implementuji. Kdyz chcete treba nastavovat
capability procesu, musite si definovat pristup k volani capset, ktere v
libc normalne neni:
_syscall2(int, capset,
cap_user_header_t, header,
cap_user_data_t, data)
Toto makro vam nadefinuje ceckovou funkci se dvema parametry:
int capset(cap_user_header_t header, cap_user_data_t data);
Ta ulozi do spravnych registru parametry volani a jeho cislo, zavola int
$0x80 a vysledek vrati jako int.
-jns
Další informace o konferenci Linux