Gebruik van resload_Protect#?

Theorie

Er zijn verschillende situaties waarin het handig kan zijn om geïnformeerd te worden wanneer een geïnstalleerd programma toegang maakt tot bepaalde specifieke geheugen locaties. Met de resload_Protect#? functies is het mogelijk om bepaalde geheugen locaties te beschermen tegen het lezen en/of schrijven door de processor. Bescherming betekent dat elke toegang aan zo'n beschermd gebied, wanneer uitgevoerd, het een Toegangs Fout uitzondering maakt wat een geschikte requester geeft door WHDLoad. Als u een geheugen gebied aangeeft als beschermd met de resload_Protect#? functie zal WHDLoad de betrokken page descriptors in de MMU vertaal boom aanpassen. Nu zal bij elke toegang naar de beschermde page de CPU een Toegangs Fout uitzondering maken. De uitzondering handler in WHDLoad zal de reden nakijken voor de uitzondering. Als de reden een toegang was naar een beschermde page maar de toegang niet hetzelfde is zal er een emulatie van de toegang plaatsvinden, en de normale programma uitvoer gaat verder door. Anders zal WHDLoad stoppen met een geschikte requester. Als de toegang er één was naar de instructie stroom (ofwel de cpu probeert code te laden) zal het altijd geëmuleerd worden, of met andere woorden de resload_Protect#? functies hebben alleen effect op het lezen en schrijven van data. Het feit is dat alle toegangen naar een beschermde page (pagegrootte is momenteel $1000) een Toegangs Fout maken, zelfs als het beschermde gebied een grootte heeft van 1 byte, met als gevolg een sterke vertraging van de uitvoerbare snelheid van een programma. Vooral als delen van de code gelegen zijn op dezelfde page. Als het programma afhankelijk is van de uitvoer snelheid, zijn verschillen in uitvoer mogelijk. Dus het is mogelijk dat sommige programma's niet werken met de bescherm eigenschap.

Voorbeeld: checksommen over code

Als u een spel installeert met WHDLoad moet u de originele lader routines patchen in het spel op een manier zodat WHDLoad de speldata laad. Sommige spellen voeren checksommen uit op bepaalde code gebieden om te zoeken of de originele code gewijzigd is. Deze detectie routines kunnen soms moeilijk te vinden zijn. Maar met de resload_Protect#? functies in WHDLoad is er niks makkelijker dan dit. U hoeft alleen de bytes te beschermen die u heeft veranderd in de spelcode tegen lezen. Nu elke routine welke probeert om een checksom te maken en de gepatchte code te lezen zal een Toegangs Fout geven. En u zal komen te weten waar de routine zich bevind.

Beperkingen

U moet niet de geheugen page beschermen waar de SSP naar toeverwijst. Wanneer u dat wel zou doen en een Uitzondering ontstaat, zal het gevolg een Dubbele Bus Fout geven omdat de CPU onmogelijk de stackframe uitzondering kan schrijven. Na een Dubbele Bus Fout kan alleen met een reset de uitvoer hervatten. WHDLoad controleert op een conflict in het beschermde gebied met de SSP en beëindigd zonodig, maar dit helpt niet als de SSP verandert later.