Obecná struktura PE souboru - 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:



Assembler

Obecná struktura PE souboru

27. června 2001, 00.00 | První díl "pomocného seriálu" k Cracker proof. Zde si vysvětlíme pojmy jako PE cryptor, compressor atd..

Pozn. autora: Tento seriál vznikl jako doprovod (snad už populárního :-))) seriálu CRACKER PROOF a lze ho využít převážně jako referenci k tomuto seriálu. V brzké době se v něm totiž setkáte s pojmy jako jsou PE cryptor, compressor…atd. a bez 100% znalosti PE formátu byste neměli šanci danou problematiku pochopit. 

Pokud si někdo z vás říká: "PE formát souborů - co to je?", tak je tento seriál určen právě pro něj. Seznámí vás s Portable Executable formátem, ukáže vám k čemu je v praxi dobrý a jak se využívá.

Bez zbytečných okolků a nudných úvodů se pustíme na věc.

Specifikace PE souborového formátu vznikla odněkud z Unixového COFFu (Common Object File Format) a stala se nativním souborovým formátem pod Win32. Hlavním smyslem "Portable Executable", jak už sám název napovídá, je univerzálnost souborového formátu na všech Win32 platformách. PE loader každé Win32 platformy rozpozná a umí použít tento formát i v případě, že Windows fungují na jiné CPU platformě než Intel. Každý Win32 spustitelný soubor (kromě VxD a 16-bitových Dll knihoven) využívá tento formát a tak s jeho znalostí můžete nejenom s tzv. "exáči" provádět zcela neuvěřitelné věci.

Základní struktura PE souboru vypadá asi takto:

DOS MZ hlavička
úsek pro DOS
PE hlavička
Tabulka sekcí
Sekce 1
Sekce 2
Sekce n

DOS MZ hlavička (DOS MZ header) je v PE souboru čistě pro zachování kompatibility s DOSem. Pokud je program spuštěn v DOSu, ten díky této hlavičce vyhodnotí soubor jako korektní a následně spustí úsek pro DOS (tzv. DOS stub) - většinou zde jen bývá uložen všem dobře známý text: "This program cannot be run in DOS mode." Můžete se však setkat i s takovými programy, které v této části mají uloženou verzi programu pro DOS. Pokud je soubor spuštěn na systému, který zná PE formát, najde PE loader v DOS MZ hlavičce umístění PE hlavičky, kterou následně zpracuje - dojde tak k přeskočení úseku pro DOS.
V PE hlavičce (PE header) je uložena velice důležitá a rozsáhlá struktura IMAGE_NT_HEADERS. Zde jsou data, která používá PE loader. S postupem tohoto seriálu se s touto strukturou velice dobře obeznámíte.

Skutečný obsah PE souboru je však rozdělen do bloků dat, které se nazývají sekce. Data do nich nejsou rozdělena na základě logiky, ale podle atributů dat - např. read-only, system, hidden..atd. Vůbec nezáleží na tom, jak jsou data v programu využívána, záleží jen na jejich atributech - neměly byste proto chápat sekce jako nějaké logické celky dat, kódu..atd. Možná se vám to zdá trochu matoucí, ale má to svůj velice jednoduchý důvod. Když PE loader načítá soubor do paměti, může pak velmi rychle zjistit atributy, které má na daná místa v paměti přidělit.
Pokud ale rozdělíme obsah PE souboru do sekcí, musíme někam o nich uložit nejrůznější informace - od jejich umístění až po jejich velikost. Přesně k tomuto účelu slouží tabulka sekcí (section table). Je to pole struktur, kde každý prvek pole (resp. každá struktura) obsahuje informace o jedné sekci. Pokud tedy budeme mít PE soubor např. se třemi sekcemi, bude mít toto pole 3 prvky (resp. struktury).

To by bylo k obecné struktuře PE formátu asi tak všechno a příště se podíváme na to, jak detekovat platný PE soubor.

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: