Bærbar eksekverbar
Portable Executable beskriver et binært format af eksekverbare programmer , såkaldte PE-filer . Det er den filformat bruges til eksekverbare filer på Win32 og Win64 -systemer. Det er også formatet til eksekverbare filer i EFI- miljøer. Det er baseret på det COFF- binære format.
Mulige filtypenavne er for eksempel:
- .exe - eksekverbar , et enkeltstående program eller hovedmodulet
- .dll - Dynamic Link Library
- .sys - system , grundlæggende systemsoftware med særlig behandling af operativsystemet
- .drv - driver , en driver
- .scr - pauseskærm , en pauseskærm
- .cpl - kontrolpanel-applet , et plug-in til Windows kontrolpanel
- .ocx - activex-kontrol , en ActiveX- kontrol
- .ax - et DirectShow- filter
- .efi - et EFI- modul
Bortset fra .exe- udvidelsen , som identificerer en fil som et separat program, er PE-formatet ikke bundet til en udvidelse. Fra et programmeringsmæssigt synspunkt kan systemet fås til at udføre kode i enhver fil i PE-format. DLL-filer kan for eksempel eksportere funktioner, der kaldes af andre programmer. DRV- og SYS-filer er normalt enhedsdrivere, der bruges af Windows til at kontrollere hardwaren .
Ud over Windows bruger ReactOS også PE-filformatet og tillader således (i øjeblikket kun i meget begrænset omfang) udførelse af Windows-programmer. Tidlige versioner af BeOS samt SkyOS brugte også PE-filformatet til deres eksekverbare programmer. Men da de brugte en anden binær grænseflade (ABI), var de ikke binære kompatible med Windows og havde ikke engang til hensigt at gøre det. SkyOS bruger nu det udbredte ELF- format, som tidligere blev populært med Linux- operativsystemet , da det er standardformatet for binære programmer der.
Windows-filer i PE-format kan udføres under Linux ved hjælp af WINE og delvist under DOS ved hjælp af HX DOS Extender .
konstruktion
Hver PE-fil begynder med MZ-headeren, der er kendt fra DOS-tider . Dette bruges primært her til at afslutte et EXE- program, der ikke er beregnet til et DOS-operativsystem med en fejlmeddelelse (f.eks. "Dette program kan ikke køres i DOS-tilstand"), hvis der forsøges at afslutte det men at starte under DOS. I begyndelsen af en PE-fil, ligesom alle MS-DOS EXE-filer, er der de to bogstaver "MZ", initialerne til Mark Zbikowski , udvikleren af DOS-programformatet. Fra et teknisk synspunkt er koden, der udsender fejlmeddelelsen, et komplet DOS-program, der, passende programmeret under DOS, også kan have andre funktioner end en fejlmeddelelse.
Det sidste felt i DOS-headeren henviser til positionen for PE-headeren, som derefter begynder med ASCII-identifikatoren "PE".
Den egentlige PE-header består af to dele, IMAGE_FILE_HEADER, som indeholder antallet af segmenter, den krævede CPU-type og andre flag og IMAGE_OPTIONAL_HEADER (som ikke er valgfri til eksekverbare programfiler på trods af navnet). Dette indeholder blandt andet størrelsen på den enkelte kode og datasegmenter i filen samt yderligere information om de krævede ressourcer (hukommelse, operativsystemversion).
Følgende hex dump illustrerer starten på et EXE-program til Windows (32 bit). Den tomme linje indsættes for at afklare stubens ende. PE-headeren begynder derefter på adresse 00000100h. I dette tilfælde lyder DOS-fejlmeddelelsen for 256- byte MZ-filen indsat som en stub "Dette program skal køres under Win32".
00000000: 4D 5A 50 00 02 00 00 00 04 00 0F 00 FF FF 00 00 MZP............. 00000010: B8 00 00 00 00 00 00 00 40 00 1A 00 00 00 00 00 ........@....... 00000020: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ 00000030: 00 00 00 00 00 00 00 00 00 00 00 00 00 01 00 00 ................ 00000040: BA 10 00 0E 1F B4 09 CD 21 B8 01 4C CD 21 90 90 ........!..L.!.. 00000050: 54 68 69 73 20 70 72 6F 67 72 61 6D 20 6D 75 73 This program mus 00000060: 74 20 62 65 20 72 75 6E 20 75 6E 64 65 72 20 57 t be run under W 00000070: 69 6E 33 32 0D 0A 24 37 00 00 00 00 00 00 00 00 in32..$7........ 00000080: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ 00000090: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ 000000A0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ 000000B0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ 000000C0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ 000000D0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ 000000E0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ 000000F0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ 00000100: 50 45 00 00 4C 01 06 00 19 5E 42 2A 00 00 00 00 PE..L....^B*.... 00000110: 00 00 00 00 E0 00 8E 81 0B 01 02 19 00 38 01 00 .............8.. 00000120: 00 88 06 00 00 00 00 00 F0 45 01 00 00 10 00 00 .........E...... ... ...
Individuelle beviser
Weblinks
- Microsoft Portable Executable og Common Object File Format Specification (engelsk)
- Matt Pietrek: Peering Inside the PE: A Tour of the Win32 Portable Executable File Format (engelsk)
- MIME-registrering (engelsk)
- Win32-montørvejledning
- Microsoft Docs PE-formatspecifikation (engelsk)