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