Exekverbar fil
En exekverbar fil är en programinnehållande datafil som – till skillnad från en informationslagrande fil – är avsedd att exekveras (köras), av en processor via ett operativsystem. Exekverbara filers markering är operativsystemsberoende. I Windows används filändelsen ".exe", medan Unix-liknande operativsystem använder "x"-attributet (execute) i filens metadata. Några exempel på exekverbara filformat är: PE, ELF, COFF och COM.
Binära exekverbara filer
[redigera | redigera wikitext]En binär exekverbar fil är slutresultatet efter kompilering av ett programs källkod.
Struktur
[redigera | redigera wikitext]I sin enklaste form innehåller en exekverbar fil maskininstruktioner för en viss typ av processor, samt data som hanteras av dessa instruktioner. Vissa program innehåller operativsystemsspecifika systemanrop och hänvisningar till programbibliotek, vilka vid exekvering behöver finnas tillgängliga för att programkörningen skall lyckas. I vissa operativsystem innehåller exekverbara binära filer mer information än maskininstruktioner och data. Den första delen av filen brukar då vara en header, som berättar för operativsystemet hur filen skall hanteras, inklusive instruktioner för länkaren, samt hänvisningar (liksom ett register) till andra delar av filen. Det kan också förekomma avlusningsrelaterad information och metadata.
Exekvering
[redigera | redigera wikitext]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ödja flera olika typer av exekverbara filer, som då tolkas på olika sätt, 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.
Vid exekvering läser operativsystemet in filen från sekundärminne till primärminne på ett sådant sätt att minnesadresseringar i den nya adressrymden stämmer. Programmet tilldelas behövliga resurser och programpekaren sätts till programmets startadress, varvid programmet startas. Huruvida exekveringen lyckas beror på samspelet mellan filens format och innehåll och operativsystemets förväntningar. Då programmet avslutas återtar operativsystemet de tilldelade resurserna.
Indirekt exekverbara filer
[redigera | redigera wikitext]Det finns filer som formellt hanteras på liknande sätt som exekverbara filer, trots att de innehåller skript eller andra datorprogram som processorn inte direkt kan tolka. 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 Unix-liknande 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 annat program som helst.
På motsvarande sätt körs COM- och BAT-filer i DOS och Windows. Här är det kommandotolken (eller "skalet") som exekverar filen på olika sätt beroende på filändelse.
Då operativsystemet inte direkt stödjer 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.