Hvad er en bærbar eksekverbar (PE)?


Bedste svar

Bærbar eksekverbar

Det bærbare eksekverbare format er et filformat til eksekverbare filer, objektkoder, DLLer, FON-skrifttypefiler og andre, der bruges i 32-bit og 64-bit versioner af Windows-operativsystemer. PE-formatet er en datastruktur, der indkapsler de oplysninger, der er nødvendige for, at Windows OS-loader kan styre den indpakkede eksekverbare kode.

Dette inkluderer dynamiske biblioteksreferencer til sammenkædning, API-eksport og importtabeller, ressourcestyringsdata og tråd -Lokal lager (TLS) data. På NT-operativsystemer bruges PE-formatet til EXE, DLL, SYS (enhedsdriver) og andre filtyper. EFI-specifikationen (Extensible Firmware Interface) angiver, at PE er det standardkørbare format i EFI-miljøer.

Svar

Bærbarhed af C-kildekode betyder, at så længe din ønskede målplatform er har en fungerende C-kompilator til rådighed, kan du flytte din C-kildekode, der er målrettet mod platform, ved at kompilere den uden at skulle ændre den. Fordi næsten alle målplatforme har en C-kompilator til rådighed, betragtes C som et meget bærbart programmeringssprog.

Når det er sagt, skriver man bare kode i C ikke garanterer bærbarhed. Du skal udøve disciplin for at undgå at skrive kode, der ikke er bærbar. For eksempel vil skrivning af kode, der gør et af følgende, resultere i ikke-bærbar kode:

  • Giver antagelser om størrelser på alle datatyper, undtagen tegn.
  • Gør antagelser om, hvordan data er justeret i hukommelsen og inden for strukturer.
  • Gør antagelser om, hvordan data pakkes / polstres inden for strukturer.
  • Giver antagelser om bytebestilling (stor endian vs lille endian) .
  • Bruger en ikke-standard compiler-udvidelse, som muligvis ikke er tilgængelig på alle compiler-implementeringer.
  • Bruger en ikke-standard biblioteksudvidelse, som muligvis ikke er tilgængelig på alle platforme.
  • Er afhængig af enhver implementeringsdefineret adfærd, der kan fungere forskelligt i en anden implementering af compiler.
  • Indeholder enhver udefineret adfærd, der muligvis ser ud til at arbejde i et miljø, men kan opføre sig uforudsigeligt i et andet miljø.
  • Foretager ethvert API-opkald (applikationsprogrammeringsgrænseflade) til operativsystemet system, som muligvis ikke er tilgængeligt i alle miljøer.
  • Giver antagelser om specifikke hukommelsesadresser (f.eks. at en bestemt hukommelsesadresse er tilknyttet et hardwareenhedsregister osv.).
  • Gør antagelser om størrelsen på en markør, eller at en markør har samme størrelse som et int.
  • Gør antagelser om, hvordan argumenter sendes (på stakken eller i bestemte registre).
  • Indeholder kildekode til indbygget samlingssprog.
  • Bruger en nyeste og bedste funktion i C-sproget, som muligvis endnu ikke understøttes af nogle compilerimplementeringer (og i nogle tilfælde måske aldrig understøttet).
  • Stoler på et bibliotek, der gør noget af det ovenstående.

Dette er ikke en udtømmende liste.

Hvis du kan t undgå at bruge ikke-bærbar kode, så er dit bedste valg at isolere den ikke-bærbare kode i en separat kildefil. Derefter, når du har brug for at flytte koden til en ny målplatform, er det meget klart, hvilken delmængde af kildekoden der skal ændres.

Skriv et svar

Din e-mailadresse vil ikke blive publiceret. Krævede felter er markeret med *