2010-01-12 11 views

risposta

10

Sì, codice sotto forma di opcode e operandi e dati ovviamente. Qualsiasi cosa tu voglia fare che coinvolge il sistema operativo in qualche modo dipende dal sistema operativo, non dalla CPU. Ecco perché hai bisogno di programmi diversi per diversi sistemi operativi. L'apertura di una finestra in Windows non avviene con la stessa sequenza di istruzioni di Linux e così via.

+2

I file eseguibili di volte contengono metadati sul programma stesso che il sistema operativo può utilizzare per alcune cose. Penso che i file '.com' fossero l'ultimo residuo dei programmi eseguibili che erano solo codice e dati in cui il sistema operativo avrebbe solo caricato il file in memoria, puntare l'IP e lasciarlo funzionare :-) – Joey

8

Come unwind nella sua risposta, un file eseguibile contiene chiamate alle routine nel sistema operativo.

Sarebbe estremamente inefficiente per un file eseguibile tentare di implementare funzioni già fornite dal sistema operativo (ad esempio, scrivere su disco, accettare input), quindi si fa un uso pesante delle chiamate alle funzioni del sistema operativo.

diversi sistemi operativi forniscono funzioni che fanno cose simili, ma i dettagli di come per chiamare le funzioni (e dove sono) possono essere diverse.

Quindi, a parte le principali differenze del tipo di processore, gli eseguibili scritti per un sistema operativo non funzionano con un altro.

4

Per eseguire qualsiasi tipo di I/O, un eseguibile deve interfacciarsi con il sistema operativo mediante chiamate sys. in Windows queste sono chiamate all'API Win32 e su linux/unit si tratta principalmente di chiamate posix.

Inoltre, il formato del file eseguibile differisce dal sistema operativo nello stesso modo in cui un file PNG differisce da un file GIF. i dati sono ordinati in modo diverso e ci sono diverse intestazioni e sottotitoli.

+0

In Windows le chiamate di sistema fanno l'API nativa, non l'API Win32. Win32 è un residuo dei giorni pre-NT ed è solo un wrapper attorno all'API nativa. – wj32

+0

Vero, a parte il fatto che l'API nativa non è ufficialmente documentata e non si dovrebbe mai usarla. – shoosh

9

Processori capire i programmi in termini di codici operativi - in modo che le Intution su eseguibili contenenti codici operativi è corretto, e si indovinato che qualsiasi eseguibile deve avere codici operativi e gli operandi per l'esecuzione del programma su un processore.

Tuttavia, i programmi vengono eseguiti principalmente con l'aiuto di sistemi operativi (è possibile scrivere programmi che non utilizzano un sistema operativo da eseguire, ma sarebbe un lavoro non necessario) - che forniscono le astrazioni in cima all'hardware che il i programmi possono usare. Il sistema operativo è responsabile della creazione di un "contesto" per qualsiasi programma da eseguire, ovvero fornisce al programma la memoria di cui ha bisogno, fornisce librerie di carattere generale che il programma può utilizzare per fare cose comuni come scrivere su file, stampare su console, ecc.

Tuttavia, per impostare il contesto per il programma (fornire memoria, caricare i suoi dati, impostare uno stack per esso), il sistema operativo deve leggere il file eseguibile di un programma e deve conoscere alcune cose sul programma come come i dati che il programma si aspetta di utilizzare, la dimensione di tali dati, i valori iniziali memorizzati in quella regione di dati, l'elenco di opcode che compongono il programma (chiamato anche area di testo di un processo), le loro dimensioni ecc. Tutto questi dati e molto altro (informazioni di debug, dati di sola lettura come stringhe codificate nel programma, tabelle dei simboli, ecc.) sono memorizzati nel file eseguibile.Ogni sistema operativo comprende un formato diverso di questo file eseguibile, poiché si aspettano che tutte queste informazioni vengano archiviate nell'eseguibile in diversi modi. Controlla i link forniti da Groo.

Un paio di formati che sono stati utilizzati per archiviare informazioni in un file eseguibile sono ELF e COFF su sistemi UNIX e PE su Windows.

P.S. - Non tutti i programmi richiedono formati eseguibili. Cerca i bootloader su Google. Si tratta di programmi speciali che occupano il primo settore di una partizione avviabile sul disco rigido e vengono utilizzati per caricare il sistema operativo stesso.

0

Un file eseguibile contiene diversi blob di dati e istruzioni su come i dati devono essere caricati in memoria. Alcune di queste sezioni contengono codice macchina che può essere eseguito. Altre sezioni contengono dati di programma, risorse, informazioni sulla ricollocazione, informazioni sull'importazione, ecc.

Problemi correlati