en fin detalj om hur dll-filer flyttas till följd av en basadresskollision och konsekvenser

Raymond

19 januari, 2017

om en DLL måste flyttas på grund av en basadresskonflikt, kommer bilden att flyttas och hela den omplacerade DLL-filen stöds nu av sidfilen.

om du läser beskrivningen mer noggrant ser du att det inte är exakt hela den omplacerade DLL-filen som stöds av sidfilen. Mer exakt läggs alla sidor som innehöll korrigeringar i sidfilen. Om du har tur och har en sida utan några korrigeringar, kommer den sidan fortfarande att efterfrågas från bilden eftersom kärnan inte tillämpade några korrigeringar på den och därför inte medför en kopia-på-Skriv för den sidan, så den fortsätter att backas upp av filsystembilden.

ett av argumenten jag har sett för att avsiktligt orsaka en basadresskollision är så att den omplacerade DLL-filen kopieras till sidfilen, vilket är en vinst om sidfilen är på ett snabbare medium än DLL. Till exempel kan sidfilen vara på en SSD eller (gasp) en RAM-enhet.

den logiken tar inte hänsyn till fallet med sidor utan korrigeringar. Dessa sidor kommer fortfarande sida i direkt från den ursprungliga filen, vilket är ett problem om den ursprungliga filen är på en mycket långsam medium, eller ett medium som kan gå förlorade, till exempel en CD-ROM-enhet eller nätverksenhet.

lyckligtvis behöver du inte spela roliga spel med baskonflikter för att få hela din DLL laddad i sidfilen. Använd istället länkflaggan / SWAPRUN som låter dig ange i modulhuvudet att lastaren ska kopiera bilden till swapfilen.

Raymond Chen

Följ

Lämna ett svar

Din e-postadress kommer inte publiceras.