en fin detalje om, hvordan DLL’ er flyttes som følge af en baseadressekollision og konsekvenser

Raymond

19. januar, 2017

hvis en DLL skal flyttes på grund af en base-adressekonflikt, flyttes billedet, og hele den flyttede DLL understøttes nu af sidefilen.

hvis du læser beskrivelsen mere omhyggeligt, vil du se, at det ikke er nøjagtigt hele den flyttede DLL, der bliver bakket op af sidefilen. Mere præcist sættes alle de sider, der indeholdt rettelser, i sidefilen. Hvis du er heldig og har en side uden nogen rettelser, vil den side stadig blive efterspurgt fra billedet, fordi kernen ikke anvendte nogen rettelser på den og derfor ikke pådrog sig en kopi-på-Skriv for den side, så den fortsætter med at blive bakket op af filsystembilledet.

et af de argumenter, jeg har set for forsætligt at forårsage en basisadressekollision, er, at den flyttede DLL bliver kopieret til sidefilen, hvilket er en gevinst, hvis sidefilen er på et hurtigere medium end DLL. For eksempel kan sidefilen være på en SSD eller (gisp) et RAM-drev.

denne logik tager ikke højde for tilfælde af sider uden rettelser. Disse sider vises stadig direkte fra den oprindelige fil, hvilket er et problem, hvis den oprindelige fil er på et meget langsomt medium eller et medium, der kan gå tabt, såsom et CD-ROM-drev eller netværksdrev.

heldigvis behøver du ikke spille sjove spil med basisadressekonflikter for at få hele din DLL indlæst i sidefilen. Brug i stedet linker-flagget , som lader dig angive i moduloverskriften, at læsseren skal kopiere billedet til byttefilen.

Raymond Chen

Følg

Skriv et svar

Din e-mailadresse vil ikke blive publiceret.