Mikä on kannettava suoritettava tiedosto (PE)?


Paras vastaus

Suoritettava kannettava

Portable Executable -muoto on tiedostomuoto suoritettaville tiedostoille, objektikoodille, DLL-tiedostoille, FON Font-tiedostoille ja muille, joita käytetään 32- ja 64-bittisissä Windows-käyttöjärjestelmissä. PE-muoto on tietorakenne, joka kapseloi tiedot, joita Windows OS-latauslaite tarvitsee käärityn suoritettavan koodin hallitsemiseksi.

Tämä sisältää dynaamisia kirjastoviittauksia linkittämistä varten, API-vienti- ja tuontitaulukoita, resurssienhallintatietoja ja ketjua. – paikallisen tallennuksen (TLS) tiedot. NT-käyttöjärjestelmissä PE-muotoa käytetään EXE: lle, DLL: lle, SYS: lle (laiteajuri) ja muille tiedostotyypeille. EFI (Extensible Firmware Interface) -määrittelyn mukaan PE on vakio suoritettava muoto EFI-ympäristöissä.

Answer

C-lähdekoodin siirrettävyys tarkoittaa, että niin kauan kuin haluamasi kohdealusta on toimiva C-kääntäjä käytettävissä, voit siirtää C-lähdekoodisi kohdealustalle kääntämällä sen uudelleen ilman, että sinun tarvitsee muokata sitä. Koska melkein jokaisella kohdealustalla on käytettävissä C-kääntäjä, C: tä pidetään erittäin kannettavana ohjelmointikielenä.

Siitä huolimatta, yksinkertaisesti koodin kirjoittaminen C: ksi tekee ei takaa siirrettävyyttä. Sinun on harjoitettava kurinalaisuutta välttääksesi kannettavan koodin kirjoittamista. Esimerkiksi koodin kirjoittaminen, joka suorittaa jonkin seuraavista, johtaa ei-kannettavaan koodiin:

  • Olettaa minkä tahansa tietotyypin koosta, paitsi char.
  • Tekee oletuksia siitä, miten data kohdistetaan muistiin ja rakenteisiin.
  • Tehdään oletuksia siitä, miten data pakataan / täytetään rakenteisiin.
  • Tehdään oletuksia tavujärjestyksestä (iso endiani tai pieni endiaani) .
  • Käyttää epätyypillistä kääntäjän laajennusta, joka ei välttämättä ole käytettävissä kaikissa kääntäjän toteutuksissa.
  • Käyttää epätyypillistä kirjastolaajennusta, joka ei ehkä ole käytettävissä kaikilla alustoilla.
  • Perustuu mihin tahansa toteutuksen määrittelemään käyttäytymiseen, joka voi toimia eri tavalla eri kääntäjän toteutuksessa.
  • Sisältää kaikki määrittelemättömät toiminnot, jotka saattavat näyttää toimivan yhdessä ympäristössä, mutta voi käyttäytyä arvaamattomasti toisessa ympäristössä.
  • Suorittaa kaikki sovellusliittymän (sovellusohjelmointirajapinnan) puhelut käyttöjärjestelmälle järjestelmä, joka ei välttämättä ole käytettävissä kaikissa ympäristöissä.
  • Tekee oletuksia tietyistä muistiosoitteista (esim. että tietty muistiosoite on yhdistetty laitteistorekisteriin jne.).
  • Tehdään oletuksia osoittimen koosta tai siitä, että osoitin on saman kokoinen kuin int.
  • Tehdään oletuksia argumenttien välittämisestä (pinossa tai tietyissä rekistereissä).
  • Sisältää minkä tahansa sisäisen kokoonpanokielen lähdekoodin.
  • Käyttää C-kielen uusinta ja suurinta ominaisuutta, jota jotkin kääntäjän toteutukset eivät vielä tue (ja joissain tapauksissa niitä ei ehkä koskaan tueta) tuettu).
  • Luottaa kirjastoon, joka suorittaa jonkin yllä olevista.

Tämä ei ole tyhjentävä luettelo.

Jos voit Älä vältä ei-kannettavan koodin käyttöä, joten parasta on eristää kyseinen ei-kannettava koodi erilliseen lähdetiedostoon. Sitten, kun sinun on siirrettävä koodi uudelle kohdealustalle, on hyvin selvää, mitä lähdekoodin osajoukkoa on muokattava.

Vastaa

Sähköpostiosoitettasi ei julkaista. Pakolliset kentät on merkitty *