Kjørbar - Executable

En hex -dump av en kjørbar loader i ekte modus

Ved databehandling får kjørbar kode , en kjørbar fil eller et kjørbart program , noen ganger bare referert til som en kjørbar eller binær , en datamaskin "til å utføre angitte oppgaver i henhold til kodede instruksjoner ", i motsetning til en datafil som må tolkes ( analysert ) av et program for å være meningsfylt.

Den nøyaktige tolkningen avhenger av bruken. "Instruksjoner" er tradisjonelt forstått som maskinkodeinstruksjoner for en fysisk CPU . I noen sammenhenger kan en fil som inneholder skriptinstruksjoner (for eksempel bytecode ) også betraktes som kjørbar.

Generering av kjørbare filer

Eksekverbare filer kan håndkodes på maskinspråk, selv om det er langt mer praktisk å utvikle programvare som kildekode på et språk på høyt nivå som lett kan forstås av mennesker. I noen tilfeller kan kildekoden spesifiseres i monteringsspråket i stedet, som fortsatt er lesbar for mennesker mens det er nært knyttet til maskinkodeinstruksjoner.

Språket på høyt nivå er samlet til enten en kjørbar maskinkodefil eller en ikke-kjørbar maskinkode- objektfil av en eller annen art; den tilsvarende prosessen på kildekode for forsamling kalles montering . Flere objektfiler er koblet til for å lage den kjørbare. Objektfiler -kjørbare eller ikke -lagres vanligvis i et beholderformat , for eksempel Executable and Linkable Format (ELF) eller Portable Executable (PE) som er operativsystemspesifikt . Dette gir struktur til den genererte maskinkoden, for eksempel ved å dele den i seksjoner som .text (kjørbar kode), .data (initialiserte globale og statiske variabler) og .rodata (skrivebeskyttet data, for eksempel konstanter og strenger).

Eksekverbare filer inkluderer vanligvis også et kjøretidsystem , som implementerer funksjoner for kjøretidsspråk (for eksempel planlegging av oppgaver , håndtering av unntak , oppringing av statiske konstruktører og destruktorer, etc.) og interaksjoner med operativsystemet, spesielt å sende argumenter, miljø og returnere en utgangsstatus , sammen med andre oppstarts- og nedstengingsfunksjoner, for eksempel frigjøring av ressurser som filhåndtak . For C gjøres dette ved å koble til crt0 -objektet , som inneholder det faktiske inngangspunktet og gjør oppsett og nedleggelse ved å ringe til kjøretidsbiblioteket .

Eksekverbare filer inneholder derfor vanligvis betydelig ekstra maskinkode utover den som er direkte generert fra den spesifikke kildekoden. I noen tilfeller er det ønskelig å utelate dette, for eksempel for innebygd systemutvikling, eller bare for å forstå hvordan kompilering, kobling og lasting fungerer. I C kan dette gjøres ved å utelate vanlig kjøretid, og i stedet eksplisitt spesifisere et linker -skript, som genererer inngangspunktet og håndterer oppstart og nedleggelse, for eksempel å ringe for mainå starte og returnere exit -status til kjernen på slutten.

Henrettelse

For å bli utført av systemet (for eksempel et operativsystem, fastvare eller oppstartslaster ), må en kjørbar fil være i samsvar med systemets binære grensesnitt (ABI). I enkle grensesnitt kjøres en fil ved å laste den inn i minnet og hoppe til starten av adresserommet og utføre derfra. I mer kompliserte grensesnitt har kjørbare filer flere metadata som angir et eget inngangspunkt . For eksempel, i ELF, er inngangspunktet spesifisert i topptekstfeltet e_entry, som angir (virtuell) minneadresse for utførelsen. I GCC ( GNU Compiler Collection ) er dette feltet angitt av linkeren basert på _startsymbolet.

Se også

Referanser

Eksterne linker