Treść książki

Przejdź do opcji czytnikaPrzejdź do nawigacjiPrzejdź do informacjiPrzejdź do stopki
38
Rozdział2:KluczowekoncepcjesystemuWindows
PowykonaniupewnychoperacjiprzygotowawczychEncryptThisTextwywołujefunk-
cjęWindowsAPICryptEncryptMessage,zawartąwbiblioteceCrypt32.dll.Wpewnym
momencieCryptEncryptMessagepotrzebujezaalokowaćpewnąilośćpamięciiwywołu-
jefunkcjęalokowaniapamięcimalloc,zawartąwMsvcrt.dll.Gdymallocwykonaswoją
pracęiprzydzieliżądanąpamięć,wykonywaniejestwznawianewpunkcie,wktó-
rymCryptEncryptMessagezostaławstrzymana.ZaśgdyCryptEncryptMessagezakończy
swojezadanie,sterowaniewracadopunktuwfunkcjiEncryptThisTextbezpośrednio
powywołaniuprzezniąfunkcjiCryptEncryptMessage.
MyApp.exe
HelperFunctions.dll
EncryptThisText()
CryptEncryptMessage()
Crypt32.dll
Msvcrt.dll
malloc()
Rysunek2-8Przykładsekwencjiwywoływaniafunkcji
Stoswywołańtokonstrukt,dziękiktóremusystemwie,jakprzekazywaćsterowanie
wcałymciąguwywołującychsiękolejnofragmentówkodu,jakrównieżpozwalaprze-
kazywaćparametrypomiędzyfunkcjamiiprzechowywaćlokalnezmiennefunkcji.
Uporządkowanyjestwformie„ostatnidośrodka,pierwszynazewnątrz”(lastin,
firstoutLIFO),wktórymfunkcjeusuwająelementywkolejnościodwrotnejdotej,
wjakiejbyłyonedodawane.Gdyfunkcjamawywołaćfunkcjępodrzędną,umieszcza
adrespamięcikolejnejinstrukcjidowykonaniapopowrociezfunkcjipodrzędnej
(swój„adrespowrotny”)naszczyciestosu.Gdypodfunkcjawywołakolejnąfunkcję,
dodajedostosuswójwłasnyadrespowrotu.Wmomenciepowrotuzfunkcjisystem
odczytujeadresznajdującysięnaszczyciestosuiwznawiawykonywanieodtego
punktu.
Standardowakonwencjaprezentowaniaadresupowrotnegowstosiewywołań
mapostaćmodule!function+offset,gdziemodulejestnazwąwykonywalnegopliku
zawierającegofunkcję,zaśoffsetjestliczbąbajtów(podanąszesnastkowo)odpocząt-
kufunkcji.Jeślinazwafunkcjiniejestdostępna,adresjestpodawanypoprostujako
module+offset”.Wczasiewykonywaniafunkcjimallocwfikcyjnymprzykładziepoka-
zanymprzedchwiląstoswywołańmógłbywyglądaćnastępująco: