Jesli wywolujesz funkcje pochadzace z jadra (poprzez furtke wywolania) to tutaj argumenty sa przekazywane przez stos, z tym ze jesli poziom uprzywilejowania kodu wywolujacego funkcje jadra jest nizszy od poziomu uprzywilejowania samego jadra wowczas nastepuje zmiana stosow tzn. parametry ze stosu programu o nizszym stopniu uprzywilejowania sa kopiowane na stos jadra a SS oraz ESP zostaja ustawione na stos jadra, z tym ze odbywa sie to automatycznie, o wszystko dba procesor. Po powrocie z takiej funkcji stos z powrotem zostaje ustawiony na kod programu wywolujacego funkcje jadra (Te wartosci sa przywracane z segmentu zadania TSS). Jesli chodzi o ilosc bajtow ktore maja zostac skopiowane ze stosu twojego programu na stos jadra, to okreslasz to w definicji furtki wywolania.
Jesli chodzi o biblioteki to cholera wie skomplikowana sprawa ale mozna sobie opisac jakis deskryptor dla kodu biblioteki, zaladowac tam biblioteke a potem z kodu twojej aplikacji cos w stylu call sel_deskrypt:nazwa_funkcji, lub jescze inaczej pakowac kod biblkoteki bezposrednio do segmentu kodu aplikacji, ktora korzysta z funkcji tej biblioteki, potem relokacja, czyli porawianie wszystkich adresow w bibliotece, bo kod biblioteki mogl zostac wstrzykniety np. od adresu 40000h i wowczas trzeba by poprawic wszystkie offsety w pamieci zwlaszcza adresy wywolan funkcji bibliotekcznych.
Chyba najlepiej jak zapoznasz sie z formatem Exe-Pe wtedy, moze zdabedziesz ogolny poglad na sprawe, polecam tez stare dosowe pliki EXE tam sa fajne tablice relokacji mowiace o tym gdzie w pliku sa wskazniki wymagajace porawy. - He he w Exe-Pe NIE MA takich fajowych tabliczek, bo sa przeznaczone do plasikiego modelu pamieci, i wszystkie adresy linker ustawia automatycznie, bo itak wiadomo ze plik wyladuje w segmencie w ktorym adresy zaczynaja sie od 0.
To ile program potrzebuje pamieci na dane wypelnia naogol linker, i wpusuje to do naglowka pliku, a jesli format pliku jest binarny to chyba sam bedziesz musial posilkowac sie jakims wlasnym naglowkiem,
a rozmiar danych "mierzyc" korzystajac z etykiet np: koniec_danych - poczatek_danych (obliczyc roznice adresow).
Bleeeeee trudny temat i zalezny od tak wielu czynnikow ze ciezko cokolwiek precyzyjnie napisac.
Na tym zakoncze bo syndrom uczonego idioty mi sie wlaczyl, wiem ze to nie jest dokladnie to czego oczekiwales, no ale moze cos z tego co napisalem okaze sie przydatne.
A i jescze jedno zamiast furtek wywolania mozesz do wywolywania funkcji jadra korzystac rowniez z przerwan programowych, wtedy argumenty przekazujesz przez rejestry.
Pozdrawiam