Effetto del degrado della pagina copy-on-write per leggere e scrivere su altri processi

4

Il sistema operativo Windows tenta di conservare l'utilizzo della memoria fisica consentendo alle DLL caricate nel loro indirizzo di base (desiderato) in processi diversi di utilizzare le stesse pagine fisiche con semantica copy-on-write; questo articolo , ad esempio, descrive il meccanismo.

Ora, l'API di Windows Virtual Memory consente di modificare la modalità di protezione delle pagine di memoria tramite la funzione VirtualProtect. Noterai che due delle modalità di protezione disponibili includono semantica copy-on-write.

Ora che abbiamo il preludio fuori mano, la domanda è: se si prende una pagina di memoria copy-on-write da una DLL appena caricata e si cambia la sua modalità di protezione, per esempio, in lettura-scrittura, come funziona influisce sugli altri processi? Prima della modifica, tutti i processi utilizzano la stessa pagina di memoria fisica, quindi quella singola pagina improvvisamente perde il suo voodoo copy-on-write e diventa un tipo strano di memoria condivisa?

Per motivi di sanità mentale devo presumere che se cambi la modalità di protezione di una pagina di copia su scrittura in lettura-scrittura (o qualsiasi modalità di protezione non COW), il kernel genererà la tua pagina privata con l'identico il contenuto e gli altri processi vivranno felicemente con la loro pagina originale di COW. Il problema è che non sono riuscito a trovare alcun riferimento per supportarlo, quindi se qualcuno mi indicasse qualcosa che dicesse esplicitamente che questo è davvero il caso lo apprezzerei.

EDIT: una domanda ancora più interessante sarebbe cosa succederebbe se si modificasse la pagina COW per leggere-scrivere e quindi scrivere in essa - la modifica influirebbe sugli altri processi (poiché la pagina non è più COW, e mappata in altri anche i processi, sembra che dovrebbe, ma che sarebbe chiaramente pericoloso)?

    
posta alkove 24.02.2016 - 21:27
fonte

3 risposte

0

Tipicamente quando qualcosa è "copia su scrittura"; se un processo scrive sulla loro istanza, allora quella pagina viene convertita in "lettura / scrittura" creando una copia della pagina e sostituendo l'originale con la copia per quel processo. Altri processi continuano a usare l'originale (finché / a meno che non scrivano anche sulla pagina e ottengano la loro copia).

Se un processo utilizza l'API di Windows Virtual Memory per convertire l'istanza di una pagina da "copia su scrittura" a "lettura / scrittura"; quindi (presumo) avrebbe esattamente lo stesso effetto della scrittura sulla pagina - Windows creerebbe una copia, e quella copia sarebbe "lettura / scrittura" per quel processo; e non avrebbe effetto sull'originale e non avrebbe alcun effetto su qualsiasi altra istanza di processo.

    
risposta data 25.02.2016 - 10:37
fonte
1

Sono coinvolti più processi che accedono alla pagina con diritti diversi. Un processo può modificare i propri diritti, ma non può modificare i diritti di altri processi. E il sistema operativo mantiene anche la pagina.

Se modifichi l'accesso da "copia su scrittura" a "leggi scrittura", nessun altro deve essere interessato. Altri processi possono avere accesso "sola lettura" o "copia su scrittura". Non si aspettano che la pagina cambi spontaneamente. Se si modifica l'accesso per leggere la scrittura, la pagina deve essere copiata o il sistema operativo è danneggiato. Fondamentalmente la stessa cosa deve accadere come se avessi appena scritto sulla pagina.

    
risposta data 24.08.2016 - 10:27
fonte
0

No, non ci sarà COW se cambi la protezione della pagina, non importa cosa lo accendi sia che sia in lettura-scrittura o esecuzione, la modifica riguarda solo il processo corrente e non l'intero sistema.

Per quanto ne so non ci sono fonti ufficiali di Microsoft che lo confermino, ma ho lavorato al reverse engineering del sistema operativo Windows per un tempo molto lungo e ho quasi tutte le finestre per assicurarti che la pagina di memoria non verrà mai istanziata e non ne riceverai una copia privata pagina a meno che tu non ci scriva . questo è l'unico modo per forzare il sistema operativo a dare al tuo processo una copia privata della pagina di memoria specificata.

Se riesci a scrivere sulla pagina di memoria che è stata condivisa dal sistema operativo e da molti altri processi e questa pagina contiene dati critici e nessun COW è stato implementato dal SO Questo potrebbe causare instabilità per il sistema operativo o persino crash.

    
risposta data 07.09.2017 - 02:05
fonte

Leggi altre domande sui tag