Het Windows Portable Executable-formaat heeft zijn eigen kleine nuances, dus hier is een korte handleiding over hoe ze werken.
Een Windows Portable Executable (PE) is de native bestandsindeling van Windows voor uitvoerbare bestanden en andere binaire bestandstypen. Het PE-bestandsformaat is ontworpen om platformonafhankelijk te zijn, zodat het op elke Windows-computer kan worden gebruikt met dezelfde versie van het besturingssysteem en processorarchitectuur waarvoor het bestand was gecompileerd.
Laten we dus het Windows PE-bestandsformaat ontleden en meer te weten komen over de structuur en samenstellende componenten ervan.
Wat is een Windows Portable uitvoerbaar bestand?
Voordat u het Windows Portable Executable-formaat gaat verkennen, is het belangrijk om de basis op te helderen. Laten we een stapje terug doen en meer te weten komen over het onderliggende concept van Windows PE: COFF.
Wanneer u de broncode naar een programma compileert, genereert de compiler een objectbestand (.obj). Dit objectbestand bevat instructies voor de computer in binair formaat.
COFF of Common Object File Format is een gestandaardiseerde set conventies voor het weergeven van binaire instructies. COFF helpt bij het handhaven van platformonafhankelijke compatibiliteit, aangezien alle COFF-bestandsindelingen dezelfde regels en conventies volgen voor het organiseren van code en gegevens. Hoewel COFF oorspronkelijk is ontwikkeld voor gebruik op *NIX-systemen, is het nu alomtegenwoordig op alle platforms.
Het bestandsformaat Windows Portable Executable (PE) is een aanpassing van COFF en is ontwikkeld om exclusief te worden gebruikt op 32-bits en 64-bits Windows-systemen. In tegenstelling tot COFF, dat een gestandaardiseerde indeling biedt voor objectbestanden, biedt Windows PE een gestandaardiseerde indeling voor uitvoerbare bestanden en bibliotheekbestanden.
Het bevat secties en headers die informatie geven over het uitvoerbare bestand in kwestie en helpt de systeemlader bij het beheren van gegevens met betrekking tot het uitvoerbare bestand. De headers in een PE-bestand helpen de systeemlader om het bestand in het geheugen te plaatsen, afhankelijkheden zoals API-export/import op te lossen, bronnen te beheren en het bestand voor te bereiden op uitvoering.
Linux heeft ook zijn eigen iteratie van de COFF; het heet Executable Link File of kortweg ELF binary. U kunt controleren of een bestand ELF is of niet door het bestandsopdracht op Linux met de bestandsnaam als eerste argument.
De structuur van een Windows Portable uitvoerbaar bestand
Het Portable Executable-bestandsformaat bestaat uit verschillende componenten, elk met een specifiek doel. Deze componenten omvatten:
- Sectiekopteksten, die de lay-out en kenmerken van elke sectie van het bestand beschrijven. De secties zelf, die uitvoerbare code, gegevens en bronnen bevatten.
- De PE-header, die informatie geeft over de algehele structuur en vereisten van het bestand.
- De DOS-header, die een klein programma bevat dat wordt uitgevoerd wanneer het bestand wordt uitgevoerd op een DOS-systeem.
- En tot slot de PE-sectieheaders, die de locatie en attributen van elke sectie in het bestand beschrijven.
Over het algemeen werken deze componenten samen om een gestructureerd formaat te creëren waarmee het besturingssysteem de uitvoerbare code in het bestand correct kan laden, uitvoeren en beheren. Laten we eens kijken wat elk onderdeel precies doet.
DOS-koptekst
Het eerste deel van een PE-bestand wordt de DOS-header genoemd. Een kleine hoeveelheid uitvoerbare code wordt opgeslagen in de DOS-header die ook op een DOS-machine kan worden uitgevoerd.
Deze code wordt ook wel de MS-DOS-stub genoemd en wordt gebruikt om een foutmelding te genereren op systemen die het PE-bestand niet ondersteunen.
PE-kop
De Portable Executable-header geeft informatie over het uitvoerbare bestand, zoals hoe groot het bestand is, waar de verschillende onderdelen zich bevinden en welke bronnen het uitvoerbare bestand nodig heeft. De PE-header bevat ook informatie over het type uitvoerbaar bestand, of het nu een Windows .DLL-bestand of een .EXE.
Sectiekoppen
Secties worden geïmplementeerd om de vele componenten van een uitvoerbaar bestand te organiseren, zoals code, gegevens en bronnen zoals tekenreeksen, afbeeldingen, enz. De sectiekoppen bevatten informatie over de grootte en locatie van elke sectie, evenals eventuele bijbehorende vlaggen.
De vlaggen die aan elke sectiekop zijn gekoppeld, kunnen verschillende kenmerken van de sectie aangeven, bijvoorbeeld of deze uitvoerbaar, beschrijfbaar of leesbaar is. Deze vlaggen helpen het besturingssysteem om de inhoud van elke sectie correct te laden en te beheren tijdens de uitvoering van het programma.
Secties
De secties zelf bevatten de echte code, gegevens en bronnen van het uitvoerbare bestand. Elk segment is uitgelijnd op een bepaalde geheugengrens en heeft zijn eigen set attributen die van invloed zijn op hoe het besturingssysteem ermee omgaat.
Nu weet u alles over het uitvoerbare bestandsformaat van Windows Portable
De Windows Portable Executable is een robuuste en veelzijdige bestandsindeling die wordt gebruikt om een breed scala aan Windows-toepassingen en systeemcomponenten te produceren. Door de structuur van het PE-bestandsformaat te begrijpen, kunnen ontwikkelaars efficiënte apps bouwen die profiteren van de onderscheidende kenmerken van Windows.
Naast het verkrijgen van een diepgaand inzicht in het platform waarop uw app zal draaien, door een aantal standaardregels te volgen codeerpraktijken, kunt u de kwaliteit van de toepassing maximaliseren, ongeacht het platform waarop deze wordt uitgevoerd op.