Fotografický magazín "iZIN IDIF" každý týden ve Vašem e-mailu.
Co nového ve světě fotografie!
Zadejte Vaši e-mailovou adresu:
Kamarád fotí rád?
Přihlas ho k odběru fotomagazínu!
Zadejte e-mailovou adresu kamaráda:
Assembler
Tabulka exportů
26. října 2001, 00.00 | V dalším díle seriálu o PE file formatu si popíšeme tabulku exportů - druhou stranu mince tabulky importů.
V minulých dílech jsme se bavili o importovaných funkcích. Druhou stranou mince jsou funkce exportované. Je to jednoduché - aby mohli být funkce nějakým PE soborem importovány, musí je jiný PE soubor exportovat.Z minulého dílu víme, že funkce může být importována dvěma způsoby - podle jména a podle umístění (ordinální funkce). Je tedy logické, že u exportovaných funkcí tomu musí být stejně.
Exportování ordinálních funkcí je však velmi zrádné. Nádherným příkladem jsou DLL knihovny, kde programátor nemůže ovlivnit umístění takovýchto funkcí. Při upgradu DLL knihovny tak mohou nastat problémy se všemi programy, které ji využívají.
Stejně jako u tabulky importů, jsou veškeré potřebné informace pro nalezení tabulky exportů uloženy v DataDirectory (pole struktur IMAGE_DATA_DIRECTORY). Tabulka je definována strukturou IMAGE_EXPORT_DIRECTORY:
|
AddressOfFunctions ukazuje na pole adres jednotlivých exportovaných funkcí. Počet prvků tohoto pole je NumberOfFunctions.
AddressOfNames ukazuje na pole RVA jmen exportovaných funkcí. Počet prvků tohoto pole je NumberOfNames.
Pokud nejsou exportovány ordinální funkce, měli by se hodnoty NumberOfFunctions a NumberOfNames rovnat. Pokud ano, měla by platit rovnice: NumberOfFunctions - NumberOfNames = počet ordinálních funkcí.
Mezi poli adres a názvů ale není žádná vazba. Je proto třeba je nějak dodatečně propojit.
Od toho existuje pole indexů (WORD), na které ukazuje AddressOfNameOrdinals. Je jakousi vazbou mezi názvy funkcí a jejich adresami (=> nevztahuje se k ordinálním funkcím). Toto pole má stejný počet prvků jako pole názvů a každý jeho prvek přísluší témuž prvku v poli názvů. Obě pole tak musí být zpracovávána současně.
Ke každému názvu funkce je vždy přiřazena jen jedna adresa - to však nemusí neplatí naopak!!
Postup, jak využít index k výpočtu RVA exportované funkce je následující:
|
Využijete-li výše zmiňovaného algoritmu ve smyčce (např.chcete-li RVA všech export. funkcí) nezapomeňte zvyšovat hodnotu AddressOfNameOrdinals o velikost jednoho prvku pole, na které ukazuje - tedy WORD. AddressOfFunctions se samozřejmě nezvyšuje - není třeba, zvyšuje se index.
Obsah seriálu (více o seriálu):
- Obecná struktura PE souboru
- Jak ověřit platnost PE souboru??
- PE hlavička
- Tabulka sekcí
- Tabulka importů - první část
- Tabulka importů - druhá část
- Tabulka exportů
-
25. listopadu 2012
-
30. srpna 2002
-
10. října 2002
-
4. listopadu 2002
-
12. září 2002
-
25. listopadu 2012
-
28. července 1998
-
31. července 1998
-
28. srpna 1998
-
6. prosince 2000
-
27. prosince 2007
-
4. května 2007