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 

Search the boards