Tabulka importů - první část - Builder.cz - Informacni server o programovani

Odběr fotomagazínu

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:

Soutěž

Sponzorem soutěže je:

IDIF

 

Kde se koná výstava fotografií Luďka Vojtěchovského?

V dnešní soutěži hrajeme o:



Assembler

Tabulka importů - první část

21. srpna 2001, 00.00 | Další díl pomocného seriálu k Cracker proof. Tentokrát informace o tabulce importů v PE souboru - první část.

Hned na začátku bych vás rád upozornil, že tyto díly našeho seriálu jsou poněkud obtížnější na pochopení. Možná si je budete muset přečíst několikrát. Pokud to nebude stačit, doporučoval bych vám tabulku importů pečlivě prozkoumat v hexadecimálním editoru (což vám ovšem doporučuji stejně).

Jen pro pořádek se sluší vysvětlit, co to je vlastně ten "import". Importovaná funkce je funkce, která je modulem volána, ale modul sám ji neobsahuje. Většinou jsou tyto funkce uloženy v jedné nebo více DLL knihovnách. V modulu jsou pak uloženy informace potřebné pro jejich používání (jméno funkce, DLL knihovny…).

A kde v souboru se tabulka importů nachází?

Určitě (no možná ne:-)) si ještě pamatujete na strukturu IMAGE_OPTIONAL_HEADER32 (uložena v IMAGE_NT_HEADERS). Jejím posledním prvkem je pole 16 struktur IMAGE_DATA_DIRECTORY nazývané DataDirectory. Každá tato struktura nese informace o důležitých informacích v souboru. V následující tabulce jsou uvedeny nejdůležitější struktury z DataDirectory, jejich umístění a informace o datech, na které ukazují:

Struktura
Info
0
Export symbols
1
Import symbols
2
Resources
3
Exception
5
Base relocation
6
Debug
7
Copyright
9
Thread local storage (TLS)
10
Load configuration
11
Bound Import

Jak již bylo řečeno, jedná se o IMAGE_DATA_DIRECTORY struktury. Jejich stavba je následující:

typedef struct _IMAGE_DATA_DIRECTORY {
DWORD VirtualAddress;
DWORD Size;
} IMAGE_DATA_DIRECTORY, *PIMAGE_DATA_DIRECTORY;

VirtualAddress je vlastně RVA dané datové struktury a Size je její velikost.

Z tabulky je patrné, že v pořadí druhá struktura v DataDirectory nese informace o tabulce importů. VirtualAddress této struktury tedy ukazuje na její začátek.
Tím jsme zjistili umístění tabulky importů. Teď se podíváme na její složení:

Samotná tabulka importů je tvořena polem struktur IMAGE_IMPORT_DESCRIPTOR:

typedef struct _IMAGE_IMPORT_DESCRIPTOR {
union {
DWORD Characteristics;
DWORD OriginalFirstThunk;
};
DWORD TimeDateStamp;
DWORD ForwarderChain;
DWORD Name;
DWORD FirstThunk;
} IMAGE_IMPORT_DESCRIPTOR;

Pole je ukončeno jednou strukturou vyplněnou nulami.

Každá tato struktura nese informace o DLL knihovně, z které jsou funkce importovány. Pokud tedy soubor importuje např. z 5-ti DLL knihoven, bude tabulka importů tvořena polem 5(+1 nulová ukončovací)-ti struktur.

To je pro dnešek všechno.
Tento díl berte jako zahřívací kolo, v příštím díle totiž objasním zbytek popisu tabulky importů…těšte se:-))

Obsah seriálu (více o seriálu):

Tématické zařazení:

 » Rubriky  » Assembler  

 

 

 

Nejčtenější články
Nejlépe hodnocené články

 

Přihlášení k mému účtu

Uživatelské jméno:

Heslo: