Windows Portable Executable-formatet har sine egne små nyanser, så her er en rask guide til hvordan de fungerer.
En Windows Portable Executable (PE) er det opprinnelige Windows-filformatet for kjørbare filer og andre binære filtyper. PE-filformatet er designet for å være plattformuavhengig, så det kan brukes på alle Windows-maskiner kjører samme operativsystemversjon og prosessorarkitektur som filen var for kompilert.
Så la oss dissekere Windows PE-filformatet, og lære om strukturen og bestanddelene.
Hva er en bærbar Windows-kjørbar fil?
Før du utforsker Windows Portable Executable-formatet, er det viktig å rydde opp i det grunnleggende. La oss ta et skritt tilbake og lære om det underliggende konseptet til Windows PE—COFF.
Når du kompilerer kildekoden til et program, genererer kompilatoren en objektfil (.obj). Denne objektfilen inneholder instruksjoner for datamaskinen i binært format.
COFF eller Common Object File Format er et standardisert sett med konvensjoner for å representere binære instruksjoner. COFF hjelper til med å opprettholde kompatibilitet på tvers av plattformer ettersom alle COFF-filformater følger det samme settet med regler og konvensjoner for organisering av kode og data. Selv om COFF opprinnelig ble utviklet for bruk på *NIX-systemer, er den nå allestedsnærværende på alle plattformer.
Windows Portable Executable (PE) filformatet er en modifikasjon av COFF og er utviklet for utelukkende å brukes på 32-biters og 64-biters Windows-systemer. I motsetning til COFF, som gir et standardisert format for objektfiler, gir Windows PE et standardisert format for kjørbare filer og bibliotekfiler.
Den inneholder seksjoner og overskrifter som gir informasjon om den aktuelle kjørbare filen og hjelper systemlasteren med å administrere data relatert til den kjørbare. Overskriftene i en PE-fil hjelper systemlasteren med å kartlegge filen til minnet, løse avhengigheter som API-eksport/import, administrere ressurser og forberede filen for kjøring.
Linux har også sin egen iterasjon av COFF; det kalles Executable Link File eller kort sagt ELF binær. Du kan sjekke om en fil er ELF eller ikke ved å kjøre filkommando på Linux med filnavnet som det første argumentet.
Strukturen til en bærbar Windows-kjørbar
Portable Executable-filformatet består av flere komponenter, hver med et bestemt formål. Disse komponentene inkluderer:
- Seksjonsoverskrifter, som beskriver oppsettet og egenskapene til hver seksjon av filen Selve seksjonene, som inneholder kjørbar kode, data og ressurser.
- PE-headeren, som gir informasjon om filens overordnede struktur og krav.
- DOS-headeren, som inkluderer et lite program som kjører når filen kjøres på et DOS-system.
- Og til slutt PE-seksjonsoverskriftene, som beskriver hver seksjons plassering og attributter i filen.
Totalt sett jobber disse komponentene sammen for å lage et strukturert format som lar operativsystemet laste, kjøre og administrere den kjørbare koden i filen på riktig måte. La oss lære nøyaktig hva hver komponent gjør.
DOS-hode
Den første delen av en PE-fil kalles DOS Header. En liten mengde kjørbar kode er lagret i DOS-headeren som også kan kjøres på en DOS-maskin.
Denne koden kalles også MS-DOS-stubben og brukes til å sende en feilmelding på systemer som ikke støtter PE-filen.
PE Header
Portable Executable-headeren gir informasjon om den kjørbare filen, som hvor stor filen er, hvor de forskjellige delene er plassert og hvilke ressurser den kjørbare trenger. PE-overskriften har også informasjon om typen kjørbar fil, enten det er en Windows .DLL-fil eller en .EXE.
Seksjonsoverskrifter
Seksjoner er implementert for å organisere de mange komponentene i en kjørbar fil som kode, data og ressurser som tekststrenger, bilder, etc. Seksjonsoverskriftene inkluderer informasjon om størrelsen og plasseringen av hver seksjon, samt eventuelle tilhørende flagg.
Flaggene knyttet til hver seksjonsoverskrift kan indikere ulike attributter for seksjonen, for eksempel om den er kjørbar, skrivbar eller lesbar. Disse flaggene hjelper operativsystemet til å laste og administrere innholdet i hver seksjon på riktig måte under programkjøring.
Seksjoner
Seksjonene i seg selv omfatter den kjørbares virkelige kode, data og ressurser. Hvert segment er justert til en viss minnegrense og har sitt eget sett med attributter som påvirker hvordan operativsystemet håndterer det.
Nå vet du alt om Windows Portable kjørbare filformat
Windows Portable Executable er et robust og allsidig filformat som brukes til å produsere et bredt utvalg av Windows-applikasjoner og systemkomponenter. Ved å forstå strukturen til PE-filformatet kan utviklere konstruere effektive apper som drar nytte av Windows sine særegne egenskaper.
I tillegg til å få en grundig forståelse av plattformen appen din vil kjøre på, ved å følge noen få standardgoder kodingspraksis, vil du kunne maksimere kvaliteten på applikasjonen uavhengig av plattformen den kjøres på.