Wat is een portable executable (PE)?


Beste antwoord

Portable Executable

De Portable Executable-indeling is een bestandsindeling voor uitvoerbare bestanden, objectcode, DLLs, FON-lettertypebestanden en andere die worden gebruikt in 32-bits en 64-bits versies van Windows-besturingssystemen. Het PE-formaat is een datastructuur die de informatie bevat die nodig is voor de Windows OS-lader om de ingepakte uitvoerbare code te beheren.

Dit omvat dynamische bibliotheekreferenties voor het koppelen, API-export- en importtabellen, gegevens voor resourcebeheer en thread -lokale opslag (TLS) gegevens. Op NT-besturingssystemen wordt het PE-formaat gebruikt voor EXE, DLL, SYS (apparaatstuurprogramma) en andere bestandstypen. De Extensible Firmware Interface (EFI) -specificatie stelt dat PE het standaard uitvoerbare formaat is in EFI-omgevingen.

Antwoord

Draagbaarheid van C-broncode betekent dat, zolang het gewenste doelplatform heeft een werkende C-compiler beschikbaar, kunt u uw C-broncode naar het doelplatform verplaatsen door het opnieuw te compileren, zonder deze te hoeven wijzigen. Omdat voor bijna elk doelplatform een ​​C-compiler beschikbaar is, wordt C beschouwd als een zeer draagbare programmeertaal.

Dat gezegd hebbende, het schrijven van code in C doet geen garantie voor draagbaarheid. U moet discipline oefenen om te voorkomen dat u code schrijft die niet draagbaar is. Als je bijvoorbeeld code schrijft die een van de volgende dingen doet, zal dit resulteren in niet-draagbare code:

  • Doet aannames over de grootte van elk gegevenstype, behalve char.
  • Maakt aannames over hoe gegevens zijn uitgelijnd in het geheugen en binnen structuren.
  • Maakt aannames over hoe gegevens worden verpakt / opgevuld binnen structuren.
  • Maakt aannames over de volgorde van bytes (big endian versus little endian) .
  • Gebruikt een niet-standaard compilerextensie, die mogelijk niet beschikbaar is op alle compilerimplementaties.
  • Gebruikt een niet-standaard bibliotheekextensie, die mogelijk niet beschikbaar is op alle platforms.
  • Is afhankelijk van elk door de implementatie gedefinieerd gedrag, dat anders kan werken in een andere implementatie van de compiler.
  • Bevat elk ongedefinieerd gedrag, dat lijken te werken in de ene omgeving, maar kunnen zich onvoorspelbaar gedragen in een andere omgeving.
  • Voert elke API (Application Programming Interface) aanroepen uit naar de systeem, dat mogelijk niet in alle omgevingen beschikbaar is.
  • Doet aannames over specifieke geheugenadressen (bijv. dat een specifiek geheugenadres wordt toegewezen aan een hardware-apparaatregister, enz.).
  • Neemt aannames over de grootte van een pointer, of dat een pointer even groot is als een int.
  • Doet aannames over hoe argumenten worden doorgegeven (op de stapel of in specifieke registers).
  • Bevat elke inline assembleertaal broncode.
  • Gebruikt een nieuwste en beste functie van de C-taal die mogelijk nog niet wordt ondersteund door sommige compilerimplementaties (en in sommige gevallen misschien nooit ondersteund).
  • Vertrouwt op een bibliotheek die het bovenstaande doet.

Dit is geen volledige lijst.

Als je kunt Om het gebruik van niet-draagbare code te vermijden, kun je het beste die niet-draagbare code isoleren in een apart bronbestand. Wanneer u de code vervolgens naar een nieuw doelplatform moet verplaatsen, is het heel duidelijk welke subset van de broncode moet worden gewijzigd.

Geef een reactie

Het e-mailadres wordt niet gepubliceerd. Vereiste velden zijn gemarkeerd met *