[Main]
[Docs]
[Installs]
[Search]
[Team]
[Guestbook]
[Links]
Utilisation de resload_Protect#?
Théorie
Dans certaines situations, il est très utile d'être informé quand le programme
installé accède à certaines zones de la mémoire.
Avec la fonction resload_Protect#?, il est
possible de protéger certaines parties de la mémoire contre la lecture et/ou
l'écriture du processeur. "Protéger" veut dire que chaque accès à une région
de la mémoire protégée créera un Access Fault exception avec comme résultat
un message approprié généré par WHDLoad. Si vous déclarez une partie de la
mémoire comme protégée en utilisant la fonction resload_Protect#? WHDLoad modifiera les
"affected page descriptor" dans l'arbre de traduction MMU.
Maintenant chaque accès à cette page protégée, le CPU provoquera un Access Fault
exception. Cette exception est traitée dans WHDLoad qui en vérifiera la raison.
Si c'était un accès à une page protégée mais que l'accès ne touche pas à la
mémoire protégée, cet accès sera émulé, et le programme continuera à fonctionner
normalement. Autrement, WHDLoad quittera avec un message approprié. Si l'accès
était un accès à des "instructions stream" (par ex. le CPU essaye de charger
le code), ce sera toujours émulé, en d'autres termes, les fonctions resload_Protect#? affecteront seulement
la lecture et l'écriture des données. Le fait est que chaque accès à une page
protégée (actuellement la taille de la page est de 4096 octets) produira un Access Fault,
même si la partie protégée n'est que de 1 octet, en conséquence la vitesse
d'exécution du programme pourra ralentir énormément. Spécialement si une partie du
code se trouve dans la même page. Si le programme dépend de la vitesse d'exécution,
il se peut que le programme ne fontionnera pas avec les fonctions resload_Protect.
Exemple: checksums en dehors du code
Si vous installez un jeu en utilisant WHDLoad, vous devez patcher les routines
originales du loader dans le jeu, dans un même temps, elles utiliseront WHDLoad
pour charger les données du jeu. Quelques jeux exécutent des sommes de contrôle
en dehors du code pour détecter si le code original a été modifié. Ces détections
peuvent être difficiles à trouver. Cela sera plus facile en utilisant les
fonctions resload_Protect#? dans WHDLoad.
Ce que devez faire n'est d'autre que de protéger en lecture les octets que vous
avez changés dans le code du jeu. Maintenant chaque routine qui essayera de calculer
un checksum et lira votre code patché, provoquera un Access Fault.
Vous saurez donc où la routine se trouve.
Limitations
Vous ne devez pas protéger une page de mémoire où le pointeur de pile superviseur
(SSP) se trouve. Si vous
faites cela, et qu'une exception se produit, il y aura un "Double Bus Fault"
car le CPU sera incapable d'écrire le stackframe de l'exception. Après un
Double Bus Fault, un reset de l'ordinateur doit être effectué pour pouvoir continuer.
WHDLoad s'assure qu'il n'y pas de conflit entre la zone protégée et le SSP pour quitter.
Mais ceci n'aide pas si le changement de SSP se fait par la suite.
Pour plus de limitations et d'informations, veuillez s'il vous plait vérifier la documantation Autodoc
des différentes fonctions resload_Protect:
[Main]
[Docs]
[Installs]
[Search]
[Team]
[Guestbook]
[Links]