.EXE
.EXE (lyhennetty englanniksi executable - executable) - laajennus suoritettaville tiedostoille , joita käytetään käyttöjärjestelmissä DOS , Windows , Symbian OS , OS / 2 ja joissakin muissa, jotka vastaavat useita muotoja . Kohdekoodin lisäksi se voi sisältää erilaisia metatietoja ( resurssit , digitaalinen allekirjoitus [1] ).
.EXE-muodot
- MZ on 16-bittinen muoto, tärkein DOS .EXE -tiedostomuoto .
- EXE-tiedostot Windowsille ja OS / 2 :lle käyttävät eri muotoja ohjelman pääosassa , mutta alkavat silti MZ-muodossa olevalla tyngällä, joka yleensä näyttää viestin "Tätä ohjelmaa ei voi ajaa DOS-tilassa" yrittäessään suorittaaksesi tiedoston DOSissaThis program cannot be run in DOS mode. ) ja lopettaa suorituksen, vaikka se voisi teoriassa suorittaa mielivaltaisen DOS-koodin.
- NE on 16-bittinen muoto, jota käyttävät Windows 3.x [2] , OS/2 ja MS-DOS .
- LE on sekoitettu 16-bittinen ja 32-bittinen muoto, jota aiemmin käyttivät OS/2 ja Windows (VxD).
- LX on OS/2:n käyttämä 32-bittinen muoto.
- PE on 32-bittinen ja 64-bittinen muoto, jota käytetään Windowsin moderneissa versioissa Windows NT :stä ja Windows 95 :stä alkaen .
Tiedostorakenne
Linkittäjän luoma EXE-tiedosto koostuu kahdesta osasta:
- käynnistyslataimen ohjaustiedot;
- latausmoduuli.
Alla kuvatut lataajan tiedot sijaitsevat tiedoston alussa ja muodostavat ns. otsikon . Sitä seuraa välittömästi latausmoduulin runko, joka on kopio linkerin rakentaman tehtävän muistikuvasta.
Vakiootsikkoosan muoto on seuraava [3] :
00-01 4D5A - .EXE-tiedoston allekirjoitus;
02-03 Tehtäväkuvan modulo 512 pituus (eli hyödyllisten tavujen määrä viimeisessä lohkossa). Linkit ennen 1.10 laittaa 04 tähän kenttään; jos sillä on tällainen arvo, on suositeltavaa jättää se huomiotta);
04-05 Tiedoston pituus lohkoina;
06-07 Osoiteasetustaulukon merkintöjen määrä;
08-09 Otsikon pituus 16-tavuisissa kappaleissa. Käytetään kuormitusmoduulin rungon alun selvittämiseen;
0A-0B Tehtäväkuvan päättymisen jälkeen varattava vähimmäismäärä muistia (16-tavuisissa kappaleissa);
0C-0D Tehtäväkuvan päätyttyä varattava enimmäismäärä muistia (16-tavuisissa kappaleissa);
0E-0F Pinosegmentin alun segmentin osoite suhteessa tehtäväkuvan alkuun;
10-11 SP-arvo tehtävää syötettäessä;
12-13
Tarkistussumma - nolla miinus summan tulos siirtämättä kaikkia tiedoston sanoja;
14-15 IP- arvo
(komentolaskuri) tehtävää syötettäessä;
16-17 Koodisegmentin alun segmenttiosoite suhteessa tehtäväkuvan alkuun;
18-19 Osoiteasetustaulukon ensimmäisen elementin osoite suhteessa tiedoston alkuun;
1A-1B Päällekkäisen segmentin numero (0 ohjelman juurisegmentille).
Seuraava on osoitteen asetustaulukko. Taulukko koostuu elementeistä, joiden lukumäärä on kirjoitettu tavuina 06-07. Asetustaulukon merkintä koostuu kahdesta kentästä, 2-tavuisesta poikkeamasta ja 2-tavuisesta segmentistä, ja määrittää latausmoduulin sanan, joka sisältää osoitteen, joka asetetaan muistipaikkaan, johon tehtävä ladataan. Asetus on seuraava:
- Ohjelmasegmentin etuliite (PSP) rakennetaan muistialueelle latausohjelman pysyvän osan jälkeen ;
- Otsikon vakioosa luetaan muistiin;
- Latausmoduulin rungon pituus määritetään (tiedoston 04-07 pituuden ja otsikon pituuden 08-09 ja viimeisen lohkon 02-03 tavumäärän välinen erotus). Tehtävän lataamista muistin loppuun tai alkuun osoittavasta merkistä riippuen määritetään ladattavan segmentin osoite. Tätä segmenttiä kutsutaan alkusegmentiksi ;
- Latausmoduuli luetaan alkusegmenttiin;
- Viritystaulukko luetaan työmuistiin erissä;
- Jokaisen asetustaulukon merkinnän kohdalla aloitussegmentin segmenttiosoite lisätään segmenttikenttään. Tämän seurauksena taulukon syöttö osoittaa muistissa olevaan sanaan, johon lisätään aloitussegmentin segmenttiosoite;
- Kun osoiteasetustaulukkoa käsitellään, otsikossa määritetyt arvot kirjoitetaan SS- ja SP-rekistereihin ja aloitussegmentin segmenttiosoite lisätään SS:ään. PSP:n alun segmenttiosoite kirjoitetaan ES:lle ja DS:lle. Ohjaus siirretään otsikossa määritettyyn osoitteeseen (tavut 14-17).
Ohjelmasegmentin rakenne
Kun käytetään ulkopuolista komentoa tai kutsutaan ohjelmaa Exec-toiminnolla, DOS määrittää minimiosoitteen, josta vastaava ohjelma voidaan ladata. Tätä aluetta kutsutaan ohjelmasegmentiksi.
Ohjelmasegmentin siirtymäkohdassa 0000 DOS luo ohjelmasegmentin etuliite (PSP) . Itse ohjelma ladataan offsetissa 0100.
Ohjelma lopetetaan hyppäämällä osoitteeseen 0000 ohjelmasegmentissä suorittamalla INT 20, tai suorittamalla INT 21, kun AH=0 tai AH=4C, tai kutsumalla aliohjelmaa osoitteessa 0050 ohjelmasegmentissä, jossa AH=0 tai AH = 4C.
Huomautus: kun se lopetetaan muuten kuin operaatiolla 4C, ohjelman on ensin lähetettävä CS:lle ohjelmasegmentin alun osoite.
Kaikki neljä menetelmää palauttavat ohjauksen COMMAND.COM:n pysyvään osaan (tässä tapauksessa toiminto 4C lähettää poistumiskoodin). Kaikki neljä menetelmää saavat Exec-operaation (4B) kutsuneen ohjelman jatkamaan suorittamista. Tässä tapauksessa keskeytysvektorit 22, 23 ja 24 (lopetus, Ctrl-Break, kohtalokas vaihtovirhe) palautetaan suoritettavan tehtävän ohjelmasegmentin etuliitteestä . Tämän jälkeen ohjaus siirtyy lopetusosoitteeseen. Jos ohjelma palaa osoitteeseen COMMAND.COM, ohjaus siirtyy ulkomaiselle osalle. Jos näin tapahtuu komentojonotiedoston ollessa käynnissä, se jatkaa, muussa tapauksessa COMMAND pyytää päätettä ja odottaa seuraavan komennon antamista.
Kun ladattu ohjelma ottaa hallinnan, seuraavat ehdot ovat voimassa:
Kaikille ohjelmille:
- Mediaosoite lähetetään ohjelmasegmentin etuliitteessä offsetissa 2C. Ympäristö on ASCIIZ- merkkijonojen sarja , jonka muoto on parametri=arvo. Ympäristömerkkijonojen kokonaispituus on enintään 32 kt; Keskiviikko alkaa kappaleen rajalta. Viimeistä riviä seuraa nollatavu. COMMANDin tehtävälle välittämä ympäristö sisältää ainakin parametrin COMSPEC= (tämän parametrin arvo on käytettävän COMMAND.COM -tiedoston sisältävän tiedoston koko nimi ). Se sisältää myös PATH-, PROMPT- ja SET-komentojen asettamat arvot. Välitettävä ympäristö on kopio emoprosessin ympäristöstä. Jos tehtävä pysyy pysyvänä, seuraavat PATH-, PROMPT- ja SET-komennot eivät vaikuta sen ympäristöön.
- Offsetissa 0050 ohjelmasegmentin etuliite sisältää ohjelman DOS-toimintojen kutsumiseksi. Siten asettamalla operaationumeron AH:hen, ohjelma voi kutsua proseduureja (LCALL) PSP + 50:ssä eikä pääsykeskeytystä 21.
- DTA-puskurin osoitteeksi on asetettu PSP +80.
- Ohjelmasegmentin etuliitteen poikkeuksissa 5C ja 6C sijaitsevat tiedostojen ohjauslohkot täytetään komentoriviparametrien mukaan . Tässä tapauksessa, jos vastaava parametri sisältää hakemiston nimen, vain laitekoodi syötetään FCB:hen, tiedostonimi on muodostettu väärin.
- Muotoilematon osa, joka alkaa siirrosta 81, sisältää komentorivin merkit komennon nimen jälkeen, mukaan lukien kaikki välilyönnit ja erottimet. Tämän merkkijonon pituus sijoitetaan siirtymäkohtaan 80. Jos komentorivillä on uudelleenohjausvaihtoehtoja (ne on merkitty symboleilla > ja <), niitä ei sisällytetä tähän, koska uudelleenohjaus on ohjelmille läpinäkyvää.
- Sana offsetissa 6 sisältää tavujen määrän tässä segmentissä.
- AX-rekisteri kertoo, ovatko parametrien laitenimet oikein:
- AL = FF - ensimmäisen parametrin laitenimi on asetettu väärin, muuten AL = 00;
- AH = FF - Ensimmäisen parametrin laitenimi on virheellinen, muuten AH = 00.
.EXE-ohjelmat:
- DS ja ES osoittavat ohjelmasegmentin etuliitettä.
- CS-, IP-, SS- ja SP-rekisterit saavat linkittäjän määrittämät arvot .
.COM-ohjelmat:
- Kaikki neljä segmenttirekisteriä osoittavat ohjelman segmentin etuliitettä.
- Kaikki vapaa muisti on varattu ohjelmalle. Jos ohjelma käynnistää muita ohjelmia Exec-toiminnolla, sen on vapautettava sille muistia Setblock-toiminnolla (4A)
- IP-komentolaskuri on asetettu arvoon 0100H.
- SP-rekisteri osoittaa ohjelmasegmentin lopun. Segmentin pituutta etuliitepaikassa 6 pienennetään 0100H:lla, jotta tämän kokoiselle pinolle saadaan tilaa.
- Nollasana sijoitetaan pinon päälle.
Muistiinpanot
- ↑ Windows Authenticode Portable Executable Signature Format (englanniksi) (linkki ei ole käytettävissä) . Haettu 11. joulukuuta 2009. Arkistoitu alkuperäisestä 1. maaliskuuta 2012.
- ↑ .DLL- tai .EXE-tiedoston avaaminen Resource Editorissa (englanniksi) (downlink) . Haettu 11. joulukuuta 2009. Arkistoitu alkuperäisestä 1. maaliskuuta 2012.
- ↑ Lataa Windows-ohjelmat DOS-kehotteesta WINSTART // PC Mag. - Nro 30. kesäkuuta 1992 .
Linkit