Exekverbar fil

Från Wikipedia
Hoppa till: navigering, sök

En exekverbar fil är en fil vars innehåll är avsett att tolkas som ett datorprogram av en dator.

Ofta innehåller en exekverbar fil maskininstruktioner för en specifik processor. Det finns också filer som formellt hanteras på motsvarande sätt, trots att de innehåller skript eller andra datorprogram som processorn inte direkt kan tolka.

Vad som avgör om en fil är exekverbar eller inte är en konventionsfråga; några operativsystem markerar exekverbara filer genom att ge dem specifika namn (till exempel att ge filnamnet en filändelse som ".bin" eller ".exe") eller genom att notera "exekverbarheten" i filens metadata (till exempel 'x'-attributet, execute, i Unixliknande operativsystem). Huruvida exekveringen lyckas beror på samspelet mellan filens format och innehåll och operativsystemets förväntningar.

Binära exekverbara filer[redigera | redigera wikitext]

I sin enklaste form innehåller en binär exekverbar fil endast maskininstruktioner (som direkt kan tolkas av centralprocessorn), data som hanteras av dessa instruktioner och eventuellt övrigt innehåll som ignoreras. I så fall kan operativsystemets roll begränsa sig till att ladda in filen i minnet (på ett sådant sätt att hänvisningarna till olika minnespositioner inom programmet fungerar), tilldela programmet behövliga resurser, låta programpekaren peka på programmets början (varvid programmet kommer att köras) och städa upp då programmet kört färdigt.

De flesta datorprogram innehåller också operativsystemsspecifika systemanrop eller hänvisningar till olika programbibliotek. Därmed räcker det inte att programmet är kompilerat för en viss processor, utan programmet måste också anpassas till ett visst operativsystem och förutsätta att programbiblioteken finns tillgängliga.

I många moderna operativsystem innehåller exekverbara binära filer mer information än enbart programkod. Ofta är den första delen av filen en så kallad header, som dels berättar för operativsystemet hur filen skall hanteras, inklusive instruktioner för länkaren, dels innehåller hänvisningar (liksom ett register) till olika delar av programmet, som befinner sig på andra platser inom filen. Det kan också förekomma debuggningsrelaterad information eller andra former av ytterligare metadata.

Operativsystemen definierar hur innehållet i filen skall tolkas. I synnerhet då programmet länkas och exekveras av ett skilt program och inte direkt av operativsystemkärnan kan systemet stöda flera olika typer av exekverbara filer, som tolkas på olika sätt.

Några konventioner om hur headern i exekverbara filer skall tolkas är de för Microsoft Windows' PE och Unixliknande systems ELF.

Vissa exekverbara filer är konstruerade så att olika kod körs i olika miljöer, antingen genom explicita instruktioner i headern eller så att en programstubb tolkas olika i olika miljöer och därmed leder till hopp till olika kod.

Indirekt exekverbara filer[redigera | redigera wikitext]

Programkoden för skriptspråk kan lagras i en fil som markeras exekverbar. På så sätt erhålls en icke-binär exekverbar fil.

I unixliknande system finns en gammal konvention om att exekverbara filer som börjar med de två tecknen "#!" (hexadecimalt: 0x23 0x21) skall "exekveras" så att operativsystemet istället exekverar programmet som nämns strax efter denna "magiska siffra", men ger filnamnet som indata åt detta program. Skript inleddes vanligen med "#!/bin/sh" och tolkades därmed av Bourne shell, men vilken som helst skriptspråkstolk kunde användas – eller vilket som helst annat program.

På motsvarande sätt körs COM- och BAT- filer i DOS och Microsoft Windows. Här är det kommandotolken (eller "skalet") som exekverar filen på olika sätt beroende på filändelse.

Då operativsystemet inte direkt stöder exekvering via godtyckliga program kan man låta operativsystemet exekvera ett program som förbereder lämplig exekveringsmiljö och låta detta program tolka programfilen, oberoende av huruvida operativsystemet uppfattar programfilen som exekverbar. Detta är vanligt för till exempel java-program.