Raymond
19 januari, 2017
Als een DLL-bestand moet worden verplaatst als gevolg van een basis-adres conflict, dan zal het beeld worden verplaatst, en de hele verplaatst DLL-bestand wordt nu gesteund door de pagina-bestand.
als u de beschrijving nauwkeuriger leest, zult u zien dat het niet precies de gehele verplaatste DLL is die door het paginabestand wordt ondersteund. Meer precies, alle pagina ‘ s die fixups bevatten worden in het Pagina-bestand gezet. Als je geluk hebt en een pagina zonder fixups hebt, dan zal die pagina nog steeds opgevraagd worden vanuit de image omdat de kernel er geen fixups op heeft toegepast, en daarom geen copy-on-write voor die pagina heeft gemaakt, dus het wordt nog steeds ondersteund door de image van het bestandssysteem.
een van de argumenten die ik heb gezien voor het opzettelijk veroorzaken van een botsing met het basisadres is dat de verplaatste DLL wordt gekopieerd naar het paginabestand, wat een overwinning is als het paginabestand zich op een sneller medium bevindt dan de DLL. Het paginabestand kan bijvoorbeeld op een SSD of (naar adem) een RAM-station staan.
deze logica houdt geen rekening met het geval van pagina ‘ s zonder fixups. Deze pagina ’s zullen nog steeds direct vanuit het originele bestand pagina’ s, wat een probleem is als het originele bestand zich op een zeer traag medium bevindt, of een medium dat verloren kan gaan, zoals een CD-ROM-station of netwerkstation.
gelukkig hoeft u geen grappige spelletjes te spelen met basisadresconflicten om uw volledige DLL in het paginabestand te laden. Gebruik in plaats daarvan de /SWAPRUN linker-vlag waarmee u in de modulekop kunt opgeven dat de lader de afbeelding naar het wisselbestand moet kopiƫren.
Raymond Chen
Volgen