[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]