Un dettaglio come le Dll vengono spostati come il risultato di un indirizzo di base urto e conseguenze

Raymond

il 19 gennaio, 2017

Se una DLL deve essere spostata a causa di un conflitto di indirizzo di base, l’immagine verrà trasferita, e l’intero trasferito DLL è ora sostenuta da file della pagina.

Se leggi la descrizione con più attenzione, vedrai che non è esattamente l’intera DLL trasferita che viene supportata dal file di paging. Più precisamente, tutte le pagine che contenevano correzioni vengono inserite nel file di paging. Se sei fortunato e hai una pagina senza correzioni, allora quella pagina sarà ancora richiesta dall’immagine perché il kernel non ha applicato alcuna correzione ad essa, e quindi non ha sostenuto una copia su scrittura per quella pagina, quindi continua ad essere supportata dall’immagine del file system.

Uno degli argomenti che ho visto per causare intenzionalmente una collisione dell’indirizzo di base è che la DLL trasferita viene copiata nel file di paging, che è una vittoria se il file di paging si trova su un supporto più veloce della DLL. Ad esempio, il file di pagina può essere su un SSD o (gasp) un’unità RAM.

Quella logica non tiene conto del caso di pagine senza correzioni. Quelle pagine saranno ancora pagina direttamente dal file originale, che essere un problema se il file originale è su un supporto molto lento, o un supporto che potrebbe essere perso, come ad esempio un CD-ROM o unità di rete.

Fortunatamente, non è necessario giocare a giochi divertenti con conflitti di indirizzo di base per caricare l’intera DLL nel file di paging. Invece, utilizzare il flag /SWAPRUN linker che consente di specificare nell’intestazione del modulo che il caricatore deve copiare l’immagine nel file di swap.

Raymond Chen

Seguire

Lascia un commento

Il tuo indirizzo email non sarà pubblicato.