a végrehajtható fájlok kézzel kódolhatók gépi nyelven, bár sokkal kényelmesebb szoftvereket forráskódként fejleszteni egy magas szintű nyelven, amelyet az emberek könnyen megérthetnek. Bizonyos esetekben a forráskódot assembly nyelven lehet megadni, amely továbbra is ember által olvasható, miközben szorosan kapcsolódik a gépi kód utasításaihoz.
a magas szintű nyelv egy végrehajtható gépi kódfájlba vagy valamilyen nem végrehajtható gépi kód-objektumfájlba kerül; az assembly nyelv forráskódjának egyenértékű folyamatát assembly-nek nevezzük. A végrehajtható fájl létrehozásához több objektumfájl kapcsolódik. Az objektumfájlokat-futtatható vagy nem-általában tárolóformátumban tárolják, például futtatható és összekapcsolható formátumban (Elf) vagy hordozható futtatható formátumban (pe), amely operációs rendszer-specifikus. Ez struktúrát ad a generált gépi kódnak, például szakaszokra osztva, például .szöveg (végrehajtható kód),.adatok (inicializált globális és statikus változók), és .rodata (csak olvasható adatok, például állandók és karakterláncok).
a futtatható fájlok általában tartalmaznak egy futásidejű rendszert is, amely végrehajtja a futásidejű nyelvi funkciókat (például feladatütemezés, kivételkezelés, statikus konstruktorok és destruktorok hívása stb.) és az operációs rendszerrel való interakciók, nevezetesen az argumentumok átadása, a környezet és a kilépési állapot visszaadása, valamint más indítási és leállítási funkciók, például erőforrások, például fájlkezelők felszabadítása. A C esetében ez a crt0 objektumban való összekapcsolással történik, amely tartalmazza a tényleges belépési pontot, és a futásidejű könyvtár meghívásával állítja be és állítja le.
a végrehajtható fájlok így általában jelentős további gépi kódot tartalmaznak azon túl, amelyet közvetlenül az adott forráskódból generálnak. Bizonyos esetekben kívánatos ezt kihagyni, például beágyazott rendszerek fejlesztéséhez, vagy egyszerűen megérteni, hogyan működik az összeállítás, az összekapcsolás, a betöltés. A C-ben ezt úgy tehetjük meg, hogy elhagyjuk a szokásos futási időt, és ehelyett kifejezetten megadunk egy linker szkriptet, amely létrehozza a belépési pontot, és kezeli az indítást és a leállítást, például hívja a main
parancsot a rendszermag indításához, és a végén adja vissza a kilépési állapotot.