Newsgroup: it.comp.os.dibattiti
Titolo: Eseguibili indipendenti dal sistema operativo

con gcc posso creare eseguibili che non usano funzioni di sistema ad
esempio :
l -fomit-frame-pointer serve a mantenere integrità negli indirizzi
delle varie funzioni ed è obbligatorio
il -Wall serve a dire al compilatore di mostrarci tutti i warning, si
potrebbe mettere anche il --pedantic, ma non lo consiglio perché da
warning inutili sugli assegnamenti con indirizzi, sulla parte in asm e
sulle direttive del gcc.
il -march=i386 indica che il nostro codice è per 386 e quindi non
ottimizzera per processori superiori. Questa è necessaria perché se
si utilizzano caratteristiche del processori superiori bisogna
abilitarle ed al momento ciò non è ancora stato fatto.
il -c indica che vogliamo solo la compilazione senza il linking
il -nostdlib indica che non vogliamo che sia possibile usare la
libreria standard, questo perché, ovviamente, la libc e la libc++ sono
librerie dinamiche che lavorano in user mode con le api di linux ^__^
il -nostdinc fa in modo che non vengano usati gli header di default
il fno-builtin fa in modo che non usi roba interna che ovviamente vale
solo per linux
il fno-exceptions fa in modo che non usi le eccezioni perché esse sono
dipendenti dall'os
il fno-rtti fa in modo che non possiamo usare la rtti per lo stesso
motivo visto sopra
Se creo un eseguibile del genere c'è un modo per farlo eseguire
direttamente all'avvio
agganciandolo a grub o  a  lilo?
e se fosse cosi indipendente potrei eseguirlo anche per esempio in osx
?
mi passate qualche link a riguardo?
GRAZIE

 ?
Alla prima domanda non so risponderti, ma per la seconda, a spanne,
direi di no... Se non altro perche se un programma del genere vuole
scrivere sullo schermo puo' farlo solo interfacciandosi direttamente
con HW ed i S.O. moderni sono piuttosto sucettibili a riguardo. Se
invece vuole interfacciarsi con altre funzioni del S.O. deve
necessariamente seguire le convenzioni di quel S.O.
Infine se gli indirizzi del programma sono da rilocare, ad un simile
programma manca l'intestazione che consente al S.O. di rilocarlo, se
gli indirizzi sono fissi, e' abbastanza probabile che questi siano
gia' occupati dal S.O. stesso.
Ma in materia sono un po' ignorante, lo ammetto. Potresti chiedere
a Vegeta/Pegasus come fa VegetaOS ad utilizzare i driver di periferica
indipendentemente dal S.O. per cui sono stati generati: il problema mi
sembra abbastanza simile. :-)
C:\>iao Angelo
-- 
Posted via Mailgate.ORG Server - 
http://www.Mailgate.ORG

 esempio :
ancora!?!??!! ma non ti è bastata la risposta su
it.comp.os.linux.development?
Studianti l'oskit, è il primo link che trovi su google:
http://www.cs.utah.edu/flux/oskit/

 mi passate qualche link a riguardo?
Leggiti il codice di grub e del codice di boot di linux. Poi guardati 
un altro OS come Haiku che e` compilabile da linux, visto che ti danno 
i tool.
-- 
Sensei <senseiwa@Apple's mail>
Research (n.): a discovery already published by a chinese guy one month
               before you, copying a russian who did it in the 60s.



il problema degli eseguibili indipendenti dal SO è duplice....
innanzitutto bisogna astrarre l'ISA del microprocessore per rendere il
software portabile su architetture diverse e in secondo luogo bisogna
astrarre le chiamate al sistema operativo.....
bisognerà inoltre astrarre tutte le caratteristiche hardware che possono
variare, come per esempio la gestione degli IRQ....
.NET per esempio fa un buon
lavoro in questo senso, una soluzione ancora migliore è quella usata dallo
Tao Systems per il suo kernel Elate
al giorno d'oggi, inoltre è inutile parlare di perdita di performance, un
2-3% di overhead è tollerabile visti i benefici che si ottengono....