Poiché ognuna delle risposte & commenti sta dando informazioni utili. Ho appena compilato, tutte le risposte & commenti in un unico post.
Mi stavo chiedendo se è possibile sostituire Loader (programma eseguibile loader non il boot loader) di un sistema operativo (Windows è la mia scelta).
No, in finestre di creazione di processo e il caricatore in modalità utente in ntdll sono legati insieme (PsCreateProcess mapperà direttamente ntdll e saltare ad esso in modo che possa finire risolvere i moduli e la creazione di processo), non è possibile sostituiscilo.
ma ci sono risorse disponibili che descrivono il formato e il caricamento dei processi.
Qui è piuttosto un vecchio ma ancora uptodate articolo di MSDN per quanto riguarda i file PE (EXE + dll)
- Part I. An In-Depth Look into the Win32 Portable Executable File Format di Matt Pietrek (MSDN Magazine, febbraio 2002)
- Part II. An In-Depth Look into the Win32 Portable Executable File Format da Matt Pietrek (MSDN Magazine , marzo 2002)
È possibile utilizzare questo ho informazioni per scrivere un'app che avvia un determinato eseguibile.
Se sei più interessato a linux e al formato elfo troverai tutto ciò che ti serve su google.
Esiste un modo per consentire a di ottenere il controllo sul caricatore del sistema operativo? Voglio dire, voglio che le cose che sta facendo a siano visibili a me (ogni passo).
Su di Windows, è possibile ottenere una certa visibilità nel caricatore al lavoro attivando Loader Snaps. Lo fai con (parte di Strumenti di debug per Windows). C'è un bel riferimento http://www.osronline.com/DDKx/ddtools/gflags_4n77.htm. Con Show Loader Snaps abilitato, è possibile visualizzare i messaggi di traccia del caricatore avviando l'applicazione in un debugger (WinDBG).
Se vuoi giocare con questo genere di cose allora Linux è la migliore strada da percorrere.
Il caricatore fa parte del kernal, ma poiché si ha accesso a tutta la sorgente kernal, si può giocare con esso al contenuto del proprio cuore.
I caricatori per vari formati binari sono in fs/binfmt_*.c
nella sorgente Linux (fs/binfmt_elf.c
è il caricatore utilizzato per gli eseguibili in formato ELF, ovvero la maggior parte).
Il caricatore dinamico /lib{,64}/ld-linux.so.2
viene utilizzato anche per i binari collegati dinamicamente - è un esempio di un "interprete", come riferimento il codice binfmt_elf.c.
Linux ha formati di file eseguibili inseribili, quindi è possibile aggiungere un caricatore di programma aggiuntivo che eseguirà le proprie cose personalizzate con file eseguibili, piuttosto che quelli standard (ELF, script di shell, binfmt_misc).
Il modulo binfmt_misc
consente di scrivere caricatori personalizzati per i programmi eseguibili interamente nello spazio utente; questo è comunemente usato per eseguire binari non nativi o binari interpretati come Java, eseguibili CLR ecc.
D'altro canto, se si desidera sostituire il caricatore ELF con qualcos'altro, è possibile creare un modulo binfmt direttamente nel kernel . Guarda fs/binfmt_*
per esempi. Il caricatore ELF stesso è lì dentro.
Caricatore di avvio o caricatore eseguibile? –
'loader eseguibile' – claws