Posted By: PV (Blaaaa...) on 'CZprogram'
Title: Hlavicka Windowsackeho Exace
Date: Tue Feb 3 22:42:43 1998
Windowsovsky EXE soubor se sklada ze dvou casti: kratkeho DOSovskeho programu
(vcetne hlavicky), ktery vetsinou vytiskne informace o tom, ze program je
urcen pro Windows: "This program requires Microsoft Windows" - muze to byt
samozrejme jakakoli jina akce, napr. spusteni Windows (se jmenem programu
jako parametrem). WinZip Self-Extractor generuje soubory, ktere obsahuji
rozbalovaci programy zaroven pro DOS i Windows.
Informace o tom, kde zacina hlavicka NE, jsou uvedeny v hlavicce pro DOS.
Hlavicka NE
Offset Delka Popis
00h word signatura "NE"
02h byte Verze linkeru
03h byte Revizni cislo linkeru
04h word Offset vstupni tabulky (od zacatku hlavicky NE)
06h word Delka vstupni tabulky v bytech
08h dword Rezervovano
0Ch byte Program flags:
bit 0: SINGLEDATA - program obsahuje jeden datovy segment
(program je knihovna DLL)
bit 1: MULTIPLEDATA - program obsahuje vice datovych segmentu
(program je spustitelna aplikace)
pokud ani jeden z bitu 0, 1 neni nastaven, program je
NOAUTODATA (neobsahuje automatic data segmenr)
bit 2: globalni inicializace (?)
bit 3: pouze chraneny mod
bit 4: instrukce 8086
bit 5: instrukce 80286
bit 6: instrukce 80386
bit 7: instrukce 80x87
0Dh byte Aplication flags:
bity 0-2 typ aplikace (0 - full screen/konzolova aplikace, 1
- kompatibilni s Windows API, 2 - pouziva WinAPI)
bit 3: aplikace OS/2
bit 4: prvni segment v programu obsahuje kod, ktery nacita
aplikaci
bit 5: linker zjistil pri sestavovani programu chybu, presto
byl EXE vytvoren
bit 6: rezervovano
bit 7: soubor je DLL knihovna
0Eh byte Cislo automatic data segmentu
10h word Pocatecni velikost haldy
12h word Pocatecni velikost zasobniku
14h dword Vstupni bod programu (CS:IP, CS je index v segmentove tabulce)
18h dword Pocatecni ukazatel na zasobnik (SS:SP, SS je index v
segmentove tabulce)
1Ch word Pocet prvku segmentove tabulky
1Eh word Pocet prvku v module-reference tabulce
20h word Pocet bytu v nonresident-name tabulce
22h word Offset segmentove tabulky (od zacatku NE hlavicky)
24h word Offset resource tabulky (od zacatku NE hlavicky)
26h word Offset resident-name tabulky (od zacatku NE hlavicky)
28h word Offset module-reference tabulky (od zacatku NE hlavicky)
2Ah word Offset imported-name tabulky (pole retezcu, ukoncene retezcem
s delkou 0) (od zacatku NE hlavicky)
2Ch dword Offset nonresident-name tabulky (od zacatku souboru)
30h word Pocet presunovatelnych polozek ve vstupni tabulce
32h word File alignment size shift count
0 is equivalent to 9 (default 512-byte
pages)
34h word Pocet zdroju v resource tabulce
36h byte Cilovy operacni system
bit 0: neznamy
bit 1: OS/2
bit 2: Windows
bit 3: European MS-DOS 4.x
bit 4: Windows 386
bit 5: BOSS (Borland Operating System Services)
37h byte Doplnkove informace
bit 0: Podporuje dlouha jmena souboru
bit 1: Aplikace pro Windows 2.x, ktera bezi v chranenem modu
3.x
bit 2: Aplikace pro Windows 2.x, ktera podporuje
proporcionalni fonty
bit 3: Program obsahuje fast-load prostor
38h word Offset fast-load prostoru (v sektorech od zacatku souboru)
3Ah word Delka fast-load prostoru (v sektorech)
3Ch word Rezervovano
3Eh byte Ocekavana verze Windows.
Segmentova tabulka
Polozky popisuji segmenty pouzite v programu.
Offset Delka Popis
00h word Offset datoveho segmentu (v sektorech) (0 - datovy segment
neexistuje)
02h word Delka segmentu (v bytech) (0 - delka je 64kB)
04h word Obsah EXE
bit 0: datovy segment
bit 1: pamet pro segment alokovana
bit 2: segment je nacten
bit 3: rezervovano
bit 4: segment je typu MOVEABLE (0 - FIXED)
bit 5: segment je typu PURE nebo SHAREABLE (0 - segment je
IMPURE nebo NONSHAREABLE)
bit 6: segment je typu PRELOAD (0 - LOADONCALL)
bit 7: pokud je tento bit nastaven a: segment je kodovy, pak je to typ
EXECUTEONLY, pokud je segment datovy, pak je to typ READONLY
bit 8: segment obsahuje relokacni data
bit 9: rezervovano
bit 10: rezervovano
bit 11: rezervovano
bit 12: segment je typu DISCARDABLE
bit 13: rezervovano
bit 14: rezervovano
bit 15: rezervovano
06h word Minimalni prostor pro alokaci segmentu (v bytech) (0 -
prostor je 64 kB)
Tabulka zdroju (Resource Table)
Tabulka ma tento format:
WORD rscAlignShift; Alignment shift pro data, tato
hodnota pouzita jako exponent dvou da faktor (v bytech) pro vypocet pozice
zdroje v souboru.
TYPEINFO rscTypes[]; Pole informaci o typech zdroju (jedna
polozka pro kazdy typ pouzity v programu)
WORD rscEndTypes; Urcuje konec definice typu. Musi byt
nula.
BYTE rscResourceNames[]; Jmena zdroju ulozenych v souboru,
polozky jsou ulozeny za sebou - prvni byte polozky urcuje pocet nasledujicich
znaku.
BYTE rscEndNames; Urcuje konec definice jmen. Musi byt
nula.
Struktura TYPEINFO
typedef struct _TYPEINFO {
WORD rtTypeID;
WORD rtResourceCount;
DWORD rtReserved;
NAMEINFO rtNameInfo[];
} TYPEINFO;
Polozky:
rtTypeID Urcuje typ zdroje. Je to bud konstanta typu zdroje (viz nize)
nebo offset ve jmenu resource-type. Jestlize je nastaven nejvyssi bit
(0x8000), typ je urcen jednou z konstant:
Hodnota Typ
RT_ACCELERATOR Tabulka akceleratoru
RT_BITMAP Bitmapa
RT_CURSOR Kurzor
RT_DIALOG Dialogovy box
RT_FONT Font
RT_FONTDIR Adresar fontu
RT_GROUP_CURSOR Adresar kurzoru
RT_GROUP_ICON Adresar ikony
RT_ICON Ikona
RT_MENU Menu
RT_RCDATA Uzivatelska data
RT_STRING Tabulka retezcu
Pokud nejvyssi bit neni nastaven, hodnota urcuje offset
If the high bit of the value in this member is not set, the value represents
an offset, in bytes relative to the
beginning of the resource table, to a name in the rscResourceNames member.
rtResourceCount Specifies the number of resources of this type in the
executable file.
rtReserved Reserved.
rtNameInfo Specifies an array of NAMEINFO structures containing
information about individual resources. The
rtResourceCount member specifies the number of structures in the array.
1000FF, SoftwareContact, 1997
-----------------
Toto jsem vytahnul z helpu 1000 File Formats - urcite to najdes nekde na Inetu
(Windows New Executable File (NE-EXE) Header
Bla
,,Problem je vzdy mezi zidli a klavesnici`` PV alias Bla
+ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +
emajl: pvac5561@barbora.mff.cuni.cz http://atrey.karlin.mff.cuni.cz/~bla