.ALKALMAZÁS

DOS MZ futtatható fájl
Kiterjesztés . alkalmazás
Aláírás MZ vagy ZM
Fejlesztő Microsoft
Formátum típusa bináris , végrehajtható , objektum , dinamikus könyvtár
Kibontva innen .COM
ben fejlődött Új végrehajtható
Lineáris végrehajtható
hordozható végrehajtható

.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

Fájlszerkezet

A linker által generált EXE fájl két részből áll:

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ő:

  1. A program szegmens előtagja (PSP) beépül a memóriaterületen a betöltési program rezidens része után ;
  2. A fejléc szabványos része beolvasásra kerül a memóriába;
  3. 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 ;
  4. A betöltési modul beolvasásra kerül a kezdeti szegmensbe;
  5. A hangolási táblázat kötegekben kerül beolvasásra a munkamemóriába;
  6. 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;
  7. 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:

  1. 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.
  2. 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.
  3. A DTA puffer címe PSP +80.
  4. 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.
  5. 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.
  6. A 6-os eltolásnál lévő szó tartalmazza a bájtok számát ebben a szegmensben.
  7. Az AX regiszter jelzi, hogy a paraméterekben szereplő eszköznevek helyesek-e:

.EXE programok esetén:

  1. A DS és ES a programszegmens előtag elejét jelzik.
  2. A CS, IP, SS és SP regiszterek a linker által megadott értékeket kapják .

.COM programok esetén:

  1. Mind a négy szegmensregiszter a programszegmens előtagra mutat.
  2. 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.
  3. Az IP parancsszámláló 0100H-ra van állítva.
  4. 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.
  5. A null szó a verem tetejére kerül.

Jegyzetek

  1. 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..
  2. .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..
  3. 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