Treść książki

Przejdź do opcji czytnikaPrzejdź do nawigacjiPrzejdź do informacjiPrzejdź do stopki
Rysunek1.2.Powywołaniuadrespowrotujestodłożonynastosie
Rysunek1.3.WywołaniefunkcjizapomocąinstrukcjiCALL,widokprogramuIDAPro
1.Listęisposóbprzekazywaniaparametrów.Wtymceluzazwyczajwykorzystywaneokreślonerejestryorazstos.
2.Sposóbzwracaniawartości(wynikudziałaniafunkcji).
3.Listęrejestrówprocesora,któreniezostanązmienionepowykonaniufunkcji(tzw.bezpiecznerejestry).Najczęściejtożsamejest
tozzapisaniemichnastosiewprologufunkcji,anastępniezdjęciemwepilogu.
4.Ustalenie,kto„sprząta”(nastosie)pozakończeniufunkcji:
funkcjawywoływana:najczęściejprzezwywołanieinstrukcjiRETzwłaściwymparametrem,copowodujeodpowiedniezwiększenie
wartościwskaźnikastosu;
kodwywołującyfunkcję:poinstrukcjiCALLnastępuje
explicite
„poprawienie”wartościwskaźnikastosuoodpowiedniąwartość.
Jakmożnasiędomyślić,nawiększościplatformistniejąjużdobrzezdefiniowanekonwencje,rozwiązującetenproblemzaprogramistów,
którzydziękitemumogąskupićsięnawłaściwejlogicekodu.Wponiższychpunktachomówionoszczegółowokonwencjeobowiązujące
wpopularnychsystemachdziałającychpodkontroląprocesorówzrodzinyx86ix86-64.
1.1.2.Konwencjewywołańx86
Ponieważplatformax86rozwijałasiębardzoburzliwieodwczesnychlat90.powstałowielesystemówoperacyjnych,ajeszczewięcej
kompilatorównicwięcdziwnego,żeniemajednejidealnej(ipreferowanejprzezwszystkich)konwencjiwywołań.Wtabeli1.1
przedstawionopięćnajbardziejpopularnychznich.Kolumnyzawierająkolejnoopis:
1.Przyjętejnazwypotocznej.
2.Sposobuprzekazywaniaparametrówpoprzezrejestryorazstos,wszczególności:
a.WkonwencjijęzykaC
C-style
(„odtyłu”)argumentyodkładanenastosodostatniegodopierwszego:
f(a1,a2)->pusha2,pusha1,call
b.WkonwencjiPascala
Pascal-style
(„odprzodu”)argumentyodkładanenastosodpierwszegodoostatniego.
3.Ktosprzątastos:samafunkcja,czyteżkodwywołujący.
Wewszystkichprzedstawionychkonwencjachuznajesię,żefunkcjawynikswojegodziałaniazapisujenakoniecwrejestrzeEAX(lubST0
wprzypadkuwartościzmiennoprzecinkowej).Przyjmujesięrównież,żefunkcjapodczasdziałaniamożewpełnikorzystaćzwszystkich
rejestrów,ztymzastrzeżeniem,żeEBX,ESI,EDIorazEBPpozakończeniufunkcjimusząmiećprzywróconąoryginalnąwartość(wartość
przedrozpoczęciemwykonaniakodufunkcji).
Tabela1.1.Spisnajbardziejpopularnychkonwencjiwywołańnaplatformiex86
Nazwa
wrejestrach
Parametry
cdecl
brak
Parametry
nastosie
Ktosprząta
stos
Opis
C-style
caller
Nazwapochodziod
Cstylefunctiondeclaration
.Pozwalanazmiennąliczbęargumentów(tzw.
variadicfunctions
),ponieważ