Hva er en bærbar kjørbar (PE)?


Beste svaret

Portable Executable

Portable Executable-formatet er et filformat for kjørbare filer, objektkoder, DLL-filer, FON Font-filer og andre som brukes i 32-biters og 64-biters versjoner av Windows-operativsystemer. PE-formatet er en datastruktur som innkapsler informasjonen som er nødvendig for at Windows OS-lasteren kan administrere den innpakket kjørbare koden.

Dette inkluderer dynamiske biblioteksreferanser for lenking, API-eksport og importtabeller, ressursadministrasjonsdata og tråd -lokal lagringsdata (TLS). På NT-operativsystemer brukes PE-formatet for EXE, DLL, SYS (enhetsdriver) og andre filtyper. EFI-spesifikasjonen (Extensible Firmware Interface) sier at PE er det standard kjørbare formatet i EFI-miljøer.

Svar

Portabilitet av C-kildekode betyr at så lenge ønsket målplattform har en fungerende C-kompilator tilgjengelig, kan du flytte C-kildekoden din som målplattformen, ved å kompilere den uten å måtte endre den. Fordi nesten alle målplattformer har en C-kompilator tilgjengelig for den, regnes C som et veldig bærbart programmeringsspråk.

Når det er sagt, skriver du bare kode i C ikke garanterer bærbarhet. Du må utøve disiplin for å unngå å skrive kode som ikke er bærbar. For eksempel vil skriving av kode som gjør noe av det følgende resultere i ikke-bærbar kode:

  • Gjør antakelser om størrelser på alle datatyper, bortsett fra tegn.
  • Gjør antagelser om hvordan data er justert i minnet og innenfor strukturer.
  • Gjør antakelser om hvordan data pakkes / polstres i strukturer.
  • Gjør antagelser om bytebestilling (stor endian vs liten endian) .
  • Bruker en ikke-standard kompilatorutvidelse, som kanskje ikke er tilgjengelig på alle kompilatorimplementeringer.
  • Bruker en ikke-standard bibliotektillegg, som kanskje ikke er tilgjengelig på alle plattformer.
  • Stoler på enhver implementeringsdefinert atferd, som kan fungere annerledes i en annen implementering av kompilatoren.
  • Inneholder enhver udefinert oppførsel, som kan ser ut til å jobbe i ett miljø, men kan oppføre seg uforutsigbart i et annet miljø.
  • Ringer ethvert API (applikasjonsprogrammeringsgrensesnitt) til operatøren system, som kanskje ikke er tilgjengelig i alle miljøer.
  • Gjør antakelser om spesifikke minneadresser (f.eks. at en spesifikk minneadresse er kartlagt til et maskinvareenhetsregister osv.).
  • Gjør antakelser om størrelsen på en peker, eller at en peker er av samme størrelse som en int.
  • Gjør antakelser om hvordan argumenter sendes (på bunken eller i bestemte registre).
  • Inneholder hvilken som helst innebygd kildekode for forsamlingsspråk.
  • Bruker en nyeste og beste funksjon i C-språket som kanskje ikke støttes av noen kompilatorimplementeringer ennå (og i noen tilfeller kanskje aldri støttes).
  • Stoler på et bibliotek som gjør noe av det ovennevnte.

Dette er ikke en uttømmende liste.

Hvis du kan t unngå å bruke ikke-bærbar kode, så er det best å isolere den ikke-bærbare koden i en egen kildefil. Når du da trenger å flytte koden til en ny målplattform, er det veldig klart hvilken delmengde av kildekoden som må endres.

Legg igjen en kommentar

Din e-postadresse vil ikke bli publisert. Obligatoriske felt er merket med *