У програмирању, извршни фајл или извршни програм, или понекад једноставно извршни модул, налаже рачунару да "обави одређене задатке према кодираним инструкцијама",[1] за разлику од податка који се мора прво рашчланити да би имао икаквог значаја. Те инструкције су најчешће кодиране у машинском језику и намењене су процесору. Ипак у општем смислу, фајл који садржи инструкције (као што је бајткод) за преводиоца софтвера могу бити прихваћене као извршне; чак би се и фајлови скриптних језика могли сматрати као извршни у овом случају. Тачна интерпретација зависи од употребе; иако се овај термин користи само за фајлове кодиране у машинском језику, да би се заштитили од рачунарских вируса, сви фајлови чије се извршење сматра ризичним, укључујући и скриптне, су спојени заједно.

Хексадецималани приказ извршног модула реалног учитавања.

Извршни код се користи да би се описале секвенце извршних наредби које не морају нужно чинити једну извршну датотеку; нпр, део у програму.

Генерације извршних фајлова уреди

Док се неки извршни фајлови могу кодирати у машинском језику, чешће ће се развијати софтвер као изворни код у програмском језику високог нивоа који људи лако разумеју, или у неким случајевима у асемблерском језику који је много компликованији људима али је много ближе повезан са инструкцијама на машинском језику. Програмски језик високог нивоа је преведен у извршни или неизвршни машински код који је смештен у неку врсту објектне датотеке; еквивалентан процес кодирања асемблерским језиком се назива асембли. Неколико објектних датотека је повезано да би створили извршну датотеку. Објектне датотеке, било да су извршне или не, су углавном у затвореном формату, као што је извршни и линк формат (ИЛФ). Ово је састав генерисаног машинског кода, као што је нпр, дељење на секције као што су .text (извршни код), .data (статичке променљиве), и .rodata (статички садржај).

Да би га систем извршио (као оперативни систем, Фирмвер, или покретач) , извршни фајл мора да подлеже систему апликације бинарни интерфејс (АБИ). Једноставно, фајл се извршава тако што се уноси у меморију и просто прелази директно на адресу позиције и тамо се извршава, али у много комликованијим счучајевима извршни фајлови имају додатну метадату, која захтева посебну тачку улаза. Нпр, у ЕЛФ-у, улазне тачке су унесене у заглављу  e_entry поља, где се стварају виртуалне адресе на које почиње извршавање. У ГНУ колекцији компајлера се то поље се добије помоћу повезивача базираног на _start симболу.

Извршни фајлови такође обично садрже систем извршавања, који је задужен за карактеристике писане у рантајму програмског језика (распоред задатака, изузеци, стварање и рушење кодова, итд.) и повезан је са оперативним системом, пролазећи кроз аргументе, окружење и враћајући статус излаз, заједно са другим системима подизања и гашења као што је ослобађање ресурса као руковођења датотеком. За C програмски језик, то је урађено преко објекта crt0, који садржи стварну улазну тачку, обавља подешавања и искључење помоћу команди у библиотеци извршавања.

На овај начин извршни фајлови најчешће садрже значајан број додатних машинских кодова који су директно генерисани из изворног кода. У неким је случајевима пожељно то изоставити, нпр, за уграђивање развоја система или само да бисмо разумели слагање, повезивање или уношење података. У C-у се ово може извести изостављањем уобичајеног система извршавања, и уместо њега убацити одговарајући скриптни повезивач, који сам генерише улазну тачку и подржава укључење и искључење, нпр. позивањем  main на старту и враћање излазног статуса на крају.[2]

Генерално исти основни код се може превести да ради на другачијим рачунарима и оперативним системима. Понекад то не захтева никакво мењање основног кода, већ се само треба убацити машински код (циља се на другачији скуп инструкција) како би се повезали на неки други систем (зависно од оперативног система који је у употреби). У осталим случајевима потребно је мењати основни код, или се мора обавити додатно превођење (условно превођење), или се мора проверити систем извршавања (проверавањем окружења у извршном систему). Претварање постојећег основног кода у другачију платформу се назива портирање.

Интеракција са рачунарским платформама уреди

Хардвер уреди

Извршни састав машинских кодова за одређен процесор или фамилије процесора. Машински кодиране инструкције за различите фамилије процесора су потпуно другачије, а извршне наредбе су потпуно некомпатибилне. Процесори унутар фамилија могу бити обрнуто компатибилни; нпр, процесор из фамилије x86-64 из 2014 године може да изврши већину кодова процесора из фамилије x86 из 1978 године, али се обруно не може рећи.

Неке зависности о одређеном хардверу, као што је то да одређена графичка картица може бити кодирана у извршним наредбама. Уобичајено је ако је могуће одстранити такве зависности из извршних програма који су дизајнирани да раде на више различитих хардвера, уместо инсталирања драјвера повезаних са хардвером, са којим програм има стандардну интеракцију.

Оперативни систем уреди

Неки оперативни системи одређују извршне фајлове по екстензији (нпр. .еxе) или означавањем поред фајла у његовим метаподацима (нпр. означавањем дозволе "извршавање" на Уникс-лике оперативним системима). Већина такође провери да ли је фајл у прихватљивом формату и заштити га од ненамерног укључивања. Модерни оперативни системи имају контролу над целим рачунаром, имају појединачне програме који издају системску наредбу за системски позив привилегованихм средствима. Како је свака врста оперативног система градитељ сопствених системских команди, извршни фајлови су генерално повезани са одређеним оперативним системом или фамилијом оперативних система.

Постоје многа средства која преправљају извршни фајл који је радио на једном оперативном систему да  би радио савршено и на другом оперативном систему, имплементирањем сличног или компатибилног АПИ-а. Нпр, Вајн, који имплеметнира Wин-32 компатибилну библиотеку за x86 процесор. У неким случајевима се више извршних фајлова повезује и пакује у један дебели бинарни.

Бинарни интерфејс хардвера чији извршни фајлови мирују се разликује од бинарног интерфејса који користи своје извршне фајлове, па им треба преводилац. Тај прогам који обавља ово превођење се назива Емулатор. Одређени фајлови могу бити извршени, али не морају сви бити одговарајући одређеном хардверском биарном интерфејсу, или скупу инструкција, они могу бити или заступљени у бајткоду за just-in-time компилацији, или у изворном коду за употребу у скрипт језику. (види Shebang (Unix))

Референце уреди

  1. ^ „executable”. Merriam-Webster's Online Dictionary. Merriam-Webster. Приступљено 19. 07. 2008. 
  2. ^ Jessica McKellar (16. 3. 2010). „Hello from a libc-free world! (Part 1)”. Архивирано из оригинала 17. 11. 2016. г. Приступљено 22. 11. 2015. 

Спољашње везе уреди