Používání resload_Protect#?

Teorie

Vyskytnou se různé situace, ve kterých se může hodit být informován o přístupech nainstalovaného programu do určitých oblastí paměti. S pomocí funkcí resload_Protect#? je možné chránit určité oblasti paměti před čtením anebo zapisovaním procesorem. Chránit znamená, že každý přístup do tatko chráněné oblasti vyvolá Access Fault vyjímku, která vyústí v chybový requester WHDLoadu. Jestliže označíte oblast paměti jako chráněnou použitím resload_Protect#? funkce, WHDLoad změní popisy oné oblasti v překladači MMU. Nyní při každém přístupu do dané paměti CPU vytvoří vyjímku Access fault. Handler vyjímek uvnitř WHDLoadu ověří důvod pro vyjímku a WHDLoad vyskočí s chybovým hlášením. Tato schopnost se ale projevuje silným zpomalením běhu programu, obzvláště pokud jsou chráněné části kódu ve stejné stránce paměti. Pokud program závisí na rychlosti běhu, rozdíly ve funkčnosti jsou možné - některé programy nemusí s ochranou paměti fungovat.

Příklad: checksums kódu

Pokud instalujete hru pomocí WHDLoad, budete muset patchnout původní loader ve hře tak, aby program nahrával přes WHDLoad. Některé hry provádějí kontrolní součet klíčových oblastí programu, aby detekovaly změny původního kódu. Tyto rutiny může být někdy těžké najít. Ale použití resload_Protect#? funkcí ve WHDLoad problém řeší. Všechno, co musíte udělat, je chránit bajty, které jste změnili v kódu hry před přečtením. Pak každá rutina, která se pokouší přečíst váš opravený kód způsobí chybu a vy zjistíte, kde kontrola je.

Omezení

Nesmíte chránit paměť, kde je SSP. Pokud to uděláte a stane se vyjímka, dojde k dvojité chybě na sběrnici, protože CPU nebude schopné zapsat stackframe vyjímky. Poté už se dá program jen resetnout. WHDLoad ověřuje, jestli existuje konflikt chráněné oblasti se SSP a pokud ano - ukončí se, ale to nepomůže, pokud se SSP později změní.