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

Používanie resload_Protect#?

Teória

Existujú rôzne situácie, v ktorých sa môže hodiť informovanosť o prístupoch nainštalovaného programu do určitých oblastí pamäti. S pomocou funkcie resload_Protect#? je možné chrániť určité oblasti pamäte pred čítaním alebo zapisovaním procesorom. Ochrana znamená, že každý prístup do tatko chránenej oblasti vyvolá Access Fault výnimku, ktorá vyústi v chybové hlásenie programu WHDLoad. Ak označíte oblasť pamäte ako chránenú použitím funkcie resload_Protect#?, WHDLoad zmení popisy danej oblasti v translation tree MMU. Potom pri každom prístupe do danej pamäte, CPU vytvorí výnimku Access Fault. Ovládač výnimiek vo vnútri WHDLoad overí dôvod pre výnimku. Ak bola príčina v prístupe do chránenej stránky,ale prístup sa nezhoduje s chránenou oblasťou, potom bude tento prístup emulovaný a program bude pokračovať v normálnom chode. Inak sa WHDLoad ukončí s adekvátnym chybovým hlásením, alebo inými slovami funkcie resload_Protect#? Ovplyvnia len čítanie a zapisovanie dát. Fakt, že každý prístup do chránenej stránky (veľkosť stránky je momentálne $1000) vytvorí zlyhanie prístupu, i keď chránená oblasť má len dĺžku 1 byte, vyústi do silného spomalenia chodu programu, hlavne ak sú chránené časti kódu v rovnakej stránke pamäti. Ak je program závislý na určitej rýchlosti, odchýlky vo funkčnosti nie sú vylúčené, čo znamená, že niektoré programy nemusia s ochranou pamäte fungovať.

Príklad: checksum kódu

Ak inštalujete hru pomocou WHDLoad, budete musieť upraviť pôvodný loader v hre tak, aby sa dáta programu nahrávali cez WHDLoad. Niektoré hry kontrolujú súčet kľúčových oblastí svojho kódu a tým zisťujú, či kód nebol zmenený. Niekedy sa však tieto rutiny ťažko hľadajú. Použitím funkcií resload_Protect#? vo WHDLoad však problém rieši. Všetko, čo musíte urobiť, je chrániť zmenené bajty pred prečítaním. Potom každá rutina, ktorá sa pokúša vypočítať checksum a prečítať váš opravený kód, spôsobí prístupovú chybu a vy tak zistíte, kde je kontrolná rutina lokalizovaná.

Obmedzenie

Nesmiete chrániť stránku pamäťe, na ktorú odkazuje SSP. Ak to spravíte a objaví sa výnimka, dôjde k dvojitej chybe na zbernici, pretože CPU nebude schopné zapísať stackframe výnimky. Potom sa dá program už len resetovať. WHDLoad overuje, či existuje konflikt chránenej oblasti s SSP a ak áno, ukončí sa. To ale nepomôže, ak sa SSP zmení neskôr.
[Main] [Docs] [Installs] [Search] [Team] [Guestbook] [Links]