71104
19-04-2005, 20:59
ricordate la prima parte? :p
ok, recentemente grazie ad un certo progetto che sto portando avanti ho scoperto come mai in Win32 solitamente non è possibile caricare un programma dalla RAM anziché dal disco; di fatto durante il caricamento vero e proprio con CreateProcess (o LoadLibrary per le DLL) il loader di Windows non scrive il contenuto del file in RAM, semplicemente lo mappa con CreateFileMapping/MapViewOfFile; a scriverlo fisicamente ci pensa poi il Memory Manager (scrive le pagine in RAM solo quando capita il primo vero accesso a quella zona di memoria); l'unico caso in cui il loader usa la ReadFile (o la sua corrispondente interna nei sistemi NT) è per leggere un po' di headers e informazioni generali al fine di stabilire ad esempio il subsystem utilizzato dal programma e altre informazioni simili.
comunque il modo (non sperimentato!) per caricare un programma dalla RAM era quello di passare alla CreateProcess (o alla LoadLibrary) il nome di una named pipe.
EDIT: giusto per la cronaca, ecco il link alla prima parte:
http://forum.hwupgrade.it/showthread.php?t=918319
ok, recentemente grazie ad un certo progetto che sto portando avanti ho scoperto come mai in Win32 solitamente non è possibile caricare un programma dalla RAM anziché dal disco; di fatto durante il caricamento vero e proprio con CreateProcess (o LoadLibrary per le DLL) il loader di Windows non scrive il contenuto del file in RAM, semplicemente lo mappa con CreateFileMapping/MapViewOfFile; a scriverlo fisicamente ci pensa poi il Memory Manager (scrive le pagine in RAM solo quando capita il primo vero accesso a quella zona di memoria); l'unico caso in cui il loader usa la ReadFile (o la sua corrispondente interna nei sistemi NT) è per leggere un po' di headers e informazioni generali al fine di stabilire ad esempio il subsystem utilizzato dal programma e altre informazioni simili.
comunque il modo (non sperimentato!) per caricare un programma dalla RAM era quello di passare alla CreateProcess (o alla LoadLibrary) il nome di una named pipe.
EDIT: giusto per la cronaca, ecco il link alla prima parte:
http://forum.hwupgrade.it/showthread.php?t=918319