Na odpoveď pre túto otázku by nestačilo pár riadkov. Je to dosť zložitá a rozsiahla téma, pričom je viacero postupov, napríklad pri používaní DLL alebo pre 16-bitové programy je postup dosť rozdielny, pri iných platformách operačného systému, hardware takisto hrá úlohu, atď. Proste neexistuje akási presná definícia, ale v podstate kolega to vystihol dosť presne, ale pre teba asi málo výstižne. Skúsim ti to opísať, ako by to asi prebiehalo na 32-bitových Windows:
danciwo píše:
ked sa spusti nejaky program, ako sa zdrojovy kod toho programu zmeni na 1 a 0
Ono, keď spustíš program, tak ten program už nie je zdrojový kód - program už je binárny súbor, pričom tá "premena" sa vlastne deje pri kompilácii a linkovaní. Pri kompilácii sa celý zdrojový kód pretvorí (najčastejšie) na strojový kód, ku ktorému má najbližšie jazyk symbolických adries assembler (každá inštrukcia procesora má nejaké symbolické označenie). Každý PE-súbor (spustiteľný súbor, DLL, ovládač jadra, ...) má svoju určitú štruktúru, tzn. na akej adrese (bavíme sa o RAW adrese, tj adrese umiestenia v súbore, nie v pamäti) má uložené aké informácie o danom programe - teda kde začína program entry point, tabuľka importov, sekcií, atď. Takže ak dôjde k spusteniu určitého programu, ten bude načítaný do operačnej pamäte (v chránenom režime procesora nie sú dáta a kód v tom istom segmente) a bude mu pridelený určitý procesorový čas (ten závisí od privilégií tohto programu). Ak príde "rad" na tento náš program, nastavia sa potrebné registre, najmä páry registrov CS:EIP, ktorých kombinácia ukazuje na nasledujúcu inštrukciu programu, ktorá sa má vykonať. Takto budú prebiehať operácie, ktoré ma program vykonávať a po odovzdaní riadenia operačnému systému ho ten odstráni z operačnej pamäte.