[Main] [Docs] [Installs] [Search] [Team] [Guestbook] [Links]

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 venster geeft door WHDLoad. Als u een geheugen gebied aangeeft als beschermd met de resload_Protect#? functie zal WHDLoad de betrokken pagina descriptors in de MMU vertaal boom aanpassen. Nu zal bij elke toegang naar de beschermde pagina 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 pagina maar de toegang niet hetzelfde is zal er een emulatie van de toegang plaatsvinden, en de normale programma uitvoer gaat dan verder door. Anders zal WHDLoad stoppen met een geschikte venster. 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 pagina (pagina grootte is momenteel 4096 bytes) 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 pagina. 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 resload_Protect functie.

Voorbeeld: checksums 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 checksums 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 het heel erg makkelijk. U hoeft alleen de bytes te beschermen die u heeft veranderd in de spelcode tegen lezen. Nu elke routine welke probeert om een checksum 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 pagina beschermen waar de SSP naar toe verwijst. Wanneer u dat wel zou doen en een Uitzondering ontstaat, dan zal er een Dubbele Bus Fout ontstaan, omdat de processor niet de exception stackframe kan wegschrijven. 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 als er voldaan word aan de conditie. Maar dit zal niet helpen als de SSP later veranderd.

Voor meer limitaties en informatie, bekijk alstublieft de notities onder autodoc voor verschillende resload_Protect functies:


[Main] [Docs] [Installs] [Search] [Team] [Guestbook] [Links]