Ultima modifica:
Ho appena finito di leggere Tiny PE, davvero interessante, a quanto pare anche loro non hanno trattato la ragione per cui i file eseguibili con
Interessante il fatto che
Ieri feci un paio di test per creare un file eseguibile con
Ormai ho eliminato quel sample e non posso fare uno screen nel quale si veda il campo delle sezioni per intero, ma in questo caso il membro
Avviando il sample e vedendo la mappa della memoria da Xdbg, a quanto pare il loader forza il caricamento delle sezioni al loro
Se 2 sezioni con attributi diversi finiscono all'interno di una pagina il loader imposterà gli attributi della pagina in modo da soddisfare tutte e due le richieste, quindi per due sezioni con RW e l'altra con RX imposterà la protezione della pagina a RWX, del resto me lo sarei aspettato siccome vidi che questo comportamento del loader fu abusato per nascondere la presenza di driver mappati manulmente.
Quindi sono arrivato alla conclusione che effettivamente la documentazione ufficiale del format PE della Miscodoft non tratti molti aspetti interessanti riguardo al loader, quindi vedrò di continuare le mie richerche altrove, grazie per il vostro supporto .
SectionAlignment
minore di una pagina di sistema debba per forza avere PointerToRawData
uguale a VirtualAddress
per ogni sezione, ma sono d'accordo con te che sia per qualche problema di compatibilità.Interessante il fatto che
FileAlignment
possa essere impostato ad 1 ed ottenere un file eseguibile funzionante quando nella documentazione ufficiale dice che questo valore debba per forza essere maggiore o uguale a 512 byte , ma presumo sia un comportamento non intenzionale del loader.Ieri feci un paio di test per creare un file eseguibile con
SectionAlignment
uguale a 0x200, e riuscii a creare questo:Ormai ho eliminato quel sample e non posso fare uno screen nel quale si veda il campo delle sezioni per intero, ma in questo caso il membro
VirtualSize
è stato impostato uguale a SizeOfRawData
anche per l'ultima sezione non ostante non sfasi l'indirizzo base di nessun'altra sezione, nel caso questi due valori differiscano per qualsiasi sezione, il loader rifiuterà di caricarlo.Avviando il sample e vedendo la mappa della memoria da Xdbg, a quanto pare il loader forza il caricamento delle sezioni al loro
VirtualAddress
, quindi riguardo all'ipotetico scenario che ho trattato prima non sarebbe stato corretto mappare .sec2
al RVA 0x2000 ma bensì a 0x1500 descritto nell'intestazione, mentre per gestire la protezione delle pagine il loader lo risolve in questo modo:Se 2 sezioni con attributi diversi finiscono all'interno di una pagina il loader imposterà gli attributi della pagina in modo da soddisfare tutte e due le richieste, quindi per due sezioni con RW e l'altra con RX imposterà la protezione della pagina a RWX, del resto me lo sarei aspettato siccome vidi che questo comportamento del loader fu abusato per nascondere la presenza di driver mappati manulmente.
Quindi sono arrivato alla conclusione che effettivamente la documentazione ufficiale del format PE della Miscodoft non tratti molti aspetti interessanti riguardo al loader, quindi vedrò di continuare le mie richerche altrove, grazie per il vostro supporto .