PDA

View Full Version : [c#] caricamento in memoria dell'assembly


vittorio130881
16-12-2009, 12:19
ciao a tutti, volevo chiedervi una cosa:
il caricamento in memoria di un assembly che avviene ancora non ho capito bene, se non sbaglio referenziando l'assembly manualmente, oppure con assembly.load, o se ci sono altri modi ditemelo perchè mi piacerebbe saperlo, comporta il caricamento di tutto il prg????
mi spiego meglio, se l'assembly fosse grande 512 mbyte, il framework porta in memoria un file di 512 mbyte intero (indipendentemente dall'uso della paginazione e memoria virtuale)????

Teo@Unix
16-12-2009, 20:55
Scusa, non capisco a cosa ti riferisci intendi il caricamento in memoria di un eseguibile o dll?

vittorio130881
22-12-2009, 14:33
entrambi!

Teo@Unix
22-12-2009, 16:01
Se ho capito bene allora, ti riferisci al "Portable exutable".
Esso rappresenta ogni file eseguibile, dll, ocx ed altro.. insomma tutto ciò che necessita di essere eseguito.
Avevo affrontato la faccenda dal punto di vista di windows, non credo comunque cambi molto per gli altri os


mi spiego meglio, se l'assembly fosse grande 512 mbyte, il framework porta in memoria un file di 512 mbyte intero (indipendentemente dall'uso della paginazione e memoria virtuale)????


in effetti no, il file non viene caricato in memoria come è su disco.
Per spiegartelo diciamo che... a grandi linee ogni file eseguibile è composto da 4 parti:
I° Il dos header
II° NT header
III° Section table
IV° Sections
Il "loader" lo carica in memoria secondo regole ben precise contenute nella section table.
Le sezioni del file vero e proprio (.text .data ecc..) sono solo l'ultima parte "le sections" ciò che c'è prima specialmente gli NT header che è il PE vero e proprio, contengono importanti altre informazioni per il loader.
La cosa non è proprio banale, le informazioni sono tante.... avevo messo in bella un pò di appunti al riguardo,
puoi guardare qui:
http://www.tosatomatteo.altervista.org/section_teoria/WinPE/WinPE.htm
cmq, rispondendo alla tua domanda il caricamento in memoria deve tener conto di cose come:
"imageBase" varia a seconda dei casi, se non mi sbaglio solitamente è 1000h
"Allineamento" il s.o. necessita di allineare ciò che c'è in memoria, un modo per tenere una sorta di "ordine" diciamo. Quindi l'indirizzo di partenza del file sarà un multiplo di questo valore.

Solitamente la dimensione in memoria di un file è superiore a quella su disco.