.ALKALMAZÁS
.EXE (rövidítve angol futtatható - futtatható) - a DOS , Windows , Symbian OS , OS / 2 és néhány más operációs rendszerekben használt futtatható fájlok kiterjesztése , amely számos formátumnak felel meg . Az objektumkódon kívül különféle metaadatokat ( források , digitális aláírás [1] ) is tartalmazhat.
.EXE formátumok
- Az MZ egy 16 bites formátum, a fő DOS .EXE fájlformátum .
- A Windows és az OS / 2 EXE fájlok a program fő részéhez különböző formátumokat használnak , de továbbra is egy MZ formátumú csonkkal kezdődnek, amely általában a "Ez a program nem futtatható DOS módban" üzenetet jelenít meg , amikor megpróbálja. a fájl DOSThis program cannot be run in DOS mode. -ban való futtatásához ) és leállítja a végrehajtást, bár elméletileg tetszőleges DOS-kódot futtathat.
- Az NE egy 16 bites formátum, amelyet a Windows 3.x [2] , az OS/2 és az MS-DOS használ .
- Az LE egy kevert 16 bites és 32 bites formátum, amelyet korábban az OS/2 és a Windows (VxD) használt.
- Az LX egy 32 bites formátum, amelyet az OS/2 használ.
- A PE egy 32 bites és 64 bites formátum, amelyet a Windows modern verzióiban használnak, kezdve a Windows NT -től és a Windows 95 -től .
Fájlszerkezet
A linker által generált EXE fájl két részből áll:
- vezérlő információk a rendszerbetöltőhöz;
- modul betöltése.
Az alábbiakban ismertetett betöltő információi a fájl elején találhatók, és az úgynevezett fejlécet alkotják . Közvetlenül utána következik a betöltési modul törzse, amely a linker által felépített feladat memóriaképének másolata.
A szabványos fejlécrész formátuma a következő [3] :
00-01 4D5A - .EXE fájl aláírása;
02-03 A modulo 512 feladat képének hossza (azaz a hasznos bájtok száma az utolsó blokkban). Az 1.10 előtti linkek 04-et tesznek ebbe a mezőbe; ha ilyen értéke van, ajánlatos figyelmen kívül hagyni);
04-05 Fájlhossz blokkban;
06-07 Bejegyzések száma a címbeállító táblázatban;
08-09 Fejléc hossza 16 bájtos bekezdésekben. A terhelési modul testének kezdetének megállapítására szolgál;
0A-0B A feladatkép vége után lefoglalandó minimális memóriamennyiség (16 bájtos bekezdésekben);
0C-0D A feladatkép vége után lefoglalható memória maximális mennyisége (16 bájtos bekezdésekben);
0E-0F A veremszegmens kezdetének szegmenscíme a feladatkép elejéhez viszonyítva;
10-11 SP érték a feladat beírásakor;
12-13
Ellenőrző összeg - nulla mínusz az összeadás eredménye anélkül, hogy a fájl összes szavát átvinné;
14-15 IP- érték
(parancsszámláló) feladat beírásakor;
16-17 A kódszegmens kezdetének szegmenscíme a feladat képének kezdetéhez viszonyítva;
18-19 A címbeállító táblázat első elemének címe a fájl elejéhez viszonyítva;
1A-1B Átfedési szegmens száma (0 a program gyökérszegmenséhez).
Következő a címbeállító táblázat. A táblázat elemekből áll, amelyek száma 06-07 bájtokban van írva. A beállítási táblázat bejegyzése két mezőből áll, egy 2 bájtos eltolásból és egy 2 bájtos szegmensből, és egy szót ad meg a betöltési modulban, amely tartalmazza a feladat betöltésének helyére beállítandó címet. A beállítás a következő:
- A program szegmens előtagja (PSP) beépül a memóriaterületen a betöltési program rezidens része után ;
- A fejléc szabványos része beolvasásra kerül a memóriába;
- A betöltési modul törzsének hossza meghatározásra kerül (a 04-07 fájl hossza és a 08-09 fejléc hossza, valamint a 02-03 utolsó blokk bájtok száma közötti különbség). A feladatnak a memória végére vagy elejére való betöltését jelző előjeltől függően a rendszer meghatározza a betöltendő szegmens címét. Ezt a szegmenst nevezzük kezdeti szegmensnek ;
- A betöltési modul beolvasásra kerül a kezdeti szegmensbe;
- A hangolási táblázat kötegekben kerül beolvasásra a munkamemóriába;
- A beállítási táblázat minden bejegyzésénél a kezdőszegmens szegmenscíme hozzáadódik a szegmensmezőhöz. Ennek eredményeként a táblázatbejegyzés egy szóra mutat a memóriában, amelyhez hozzáadódik a kezdőszegmens szegmenscíme;
- A címbeállítási táblázat feldolgozása során a fejlécben megadott értékek beírásra kerülnek az SS és SP regiszterekbe, és a kezdő szegmens szegmenscíme hozzáadódik az SS-hez. A PSP kezdetének szegmenscíme az ES-be és a DS-be íródik. A vezérlés átkerül a fejlécben megadott címre (14-17. bájt).
Programszegmens szerkezete
Egy nem rezidens parancs elérésekor vagy egy program Exec művelettel történő meghívásakor a DOS meghatározza azt a minimális címet, ahonnan a megfelelő program betölthető. Ezt a területet programszegmensnek nevezzük.
A programszegmens 0000 eltolásánál a DOS egy programszegmens előtagot (PSP) generál . Maga a program 0100 eltolásnál töltődik be.
A program a programszegmensben a 0000-es címre ugrással fejeződik be az INT 20 végrehajtásával, vagy az INT 21 végrehajtásával AH=0 vagy AH=4C esetén, vagy a 0050-es szubrutin meghívásával az AH=0 vagy AH programszegmensben. = 4 °C.
Megjegyzés: ha a 4C művelettől eltérően fejeződik be, a programnak először el kell küldenie a CS-nek a programszegmens kezdetének címét.
Mind a négy módszer visszaadja a vezérlést a COMMAND.COM rezidens részére (ebben az esetben a 4C művelet kilépési kódot küld). Mind a négy módszer az Exec műveletet (4B) meghívó program végrehajtását folytatja. Ebben az esetben a 22-es, 23-as és 24-es megszakítási vektorok (lezárás, Ctrl-Break, végzetes cserehiba) visszaállnak a folytatható feladat programszegmens előtagjából . Ezután a vezérlés átkerül a befejezési címre. Ha a program visszatér a COMMAND.COM-hoz, akkor az irányítás átkerül a nem rezidens részhez. Ha ez a kötegfájl futása közben történik, akkor folytatódik, ellenkező esetben a COMMAND felszólítja a terminált , és várja a következő parancs bevitelét.
Amikor egy betöltött program átveszi az irányítást, a következő feltételek érvényesek:
Minden programhoz:
- A médiacímet a 2C eltolásnál a programszegmens előtagban továbbítják. A környezet ASCIIZ karakterláncok sorozata, paraméter=érték formátumban. A környezeti karakterláncok teljes hossza nem haladja meg a 32 KB-ot; A szerda egy bekezdéshatáron kezdődik. Az utolsó sort egy null byte követi. A COMMAND által a feladatnak átadott környezet legalább a COMSPEC= paramétert tartalmazza (ennek a paraméternek az értéke a használni kívánt COMMAND.COM -ot tartalmazó fájl teljes neve ). Tartalmazza a PATH, PROMPT és SET parancsok által beállított értékeket is. Az átadott környezet a szülőfolyamat környezetének másolata. Ha egy feladat rezidens marad, akkor a következő PATH, PROMPT és SET parancsok nem lesznek hatással a környezetére.
- A 0050 eltolásnál a programszegmens előtag tartalmazza a DOS-műveletek meghívására szolgáló programot. Így a műveleti szám AH-ba helyezésével a program PSP + 50-nél eljárásokat (LCALL) hívhat, és nem érheti el a 21-es megszakítást.
- A DTA puffer címe PSP +80.
- A programszegmens előtag 5C és 6C eltolásánál található fájlvezérlő blokkok a parancssori paraméterek szerint kerülnek kitöltésre . Ebben az esetben, ha a megfelelő paraméter tartalmazza a könyvtárnevet, csak az eszközkód kerül be az FCB-be, a fájlnév hibásan van kialakítva.
- A formázatlan rész, amely a 81-es eltolástól kezdődik, a parancs neve utáni parancssori karaktereket tartalmazza, beleértve az összes szóközt és határolót. Ennek a karakterláncnak a hossza 80 eltolásnál van. Ha a parancssorban vannak átirányítási opciók (ezeket a > és < szimbólum jelzi), akkor azok itt nem szerepelnek, mivel az átirányítás átlátszó a programok számára.
- A 6-os eltolásnál lévő szó tartalmazza a bájtok számát ebben a szegmensben.
- Az AX regiszter jelzi, hogy a paraméterekben szereplő eszköznevek helyesek-e:
- AL = FF - az első paraméter eszközneve helytelenül van beállítva, ellenkező esetben AL = 00;
- AH = FF - Az első paraméter eszközneve hibás, ellenkező esetben AH = 00.
.EXE programok esetén:
- A DS és ES a programszegmens előtag elejét jelzik.
- A CS, IP, SS és SP regiszterek a linker által megadott értékeket kapják .
.COM programok esetén:
- Mind a négy szegmensregiszter a programszegmens előtagra mutat.
- Minden szabad memória le van foglalva a programnak. Ha a program más programokat indít el az Exec művelettel, akkor a Setblock művelettel (4A) memóriát kell felszabadítania számára.
- Az IP parancsszámláló 0100H-ra van állítva.
- Az SP regiszter egy programszegmens végét jelzi. A szegmens hosszát a 6. előtag helyén 0100H-val csökkentjük, hogy helyet biztosítsunk az adott méretű köteg számára.
- A null szó a verem tetejére kerül.
Jegyzetek
- ↑ Windows Authenticode Portable Executable Signature Format (angol) (elérhetetlen hivatkozás) . Letöltve: 2009. december 11. Az eredetiből archiválva : 2012. március 1..
- ↑ .DLL vagy .EXE fájl megnyitása az Erőforrásszerkesztőben (angolul) (lefelé mutató hivatkozás) . Letöltve: 2009. december 11. Az eredetiből archiválva : 2012. március 1..
- ↑ Töltsön be Windows-programokat a DOS parancssorból a WINSTART // PC Mag segítségével. - 1992. június 30-i szám .
Linkek