[Main]
[Docs]
[Installs]
[Search]
[Team]
[Guestbook]
[Links]
Usando resload_Protect#?
Teoría
Hay varias situaciones en las cuales puede ser útil ser informado cuando el programa
instalado realiza accesos a ciertas ubicaciones especificas en memoria.
Con las funciones resload_Protect#? es posible proteger
ciertas ubicaciones de memoria contra ser leídas y/o escritas por el procesador.
Esta protección implica que cada acceso a una de estas áreas protegidas, de realizarse,
generará una excepción de Falla de Acceso que resultará en un cuadro de diálogo apropiado
por parte de WHDLoad. Si Ud. declara como protegida un área de memoria usando una
función resload_Protect#? WHDLoad modificará los descriptores
de la página afectada en el árbol de traducción de la MMU. Luego, en cada acceso a la
página protegida, la CPU creara una excepción de Falla de Acceso. El gestor de excepciones
dentro de WHDLoad verificara la razón de la excepción. Si la razón ha sido un acceso
a una página protegida pero el acceso no corresponde al área protegida
los accesos serán emulados, y la ejecución normal del programa continuara. De otra forma
WHDLoad saldrá de la ejecución con el cuadro de dialogo apropiado. Si el acceso fue
realizado dentro del flujo de instrucciones (es decir, la CPU ha intentado leer código)
siempre será emulado, o en otras palabras, las funciones resload_Protect#?
solo afectan a la lectura y escritura de datos. El hecho de que cada acceso a una página
protegida (el tamaño de página es actualmente 4096 octetos) generara una falla de acceso,
aun si el área protegida tiene una longitud de tan solo 1 octeto, resultara en un gran
enlentecimiento de la velocidad de ejecución del programa. Especialmente si partes
del código están ubicadas en la misma página. Si el programa es critico en cuanto
a velocidad de ejecución, existen diferencias en cuanto a la ejecución del mismo.
Por lo tanto es posible que algunos programas no funcionen con la funcionalidad
resload_Protect.
Ejemplo: sumas de control sobre el código
Si Ud. instala un juego usando WHDLoad Ud. deberá parchar las rutinas de carga en el cargador original
del juego de tal forma que usen WHDLoad para cargar los datos del juego. Algunos juegos realizan
sumas de control sobre ciertas áreas de código para detectar si el código original ha sido modificado.
Estas rutinas de detección pueden ser en ocasiones bastante difíciles de encontrar. Pero usando
la funcionalidad resload_Protect#? en WHDLoad será sencillo.
Todo lo que Ud. tiene que hacer es proteger los bytes que Ud. ha cambiado en el código
del juego contra lectura. Ahora cada rutina que intenta realizar una suma de control y leer el código
parchado causara una falla de acceso. Y Ud. conocerá donde esta ubicada la rutina.
Limitaciones
Ud. no debe proteger la página de memoria donde apunta el SSP. Si lo hace y ocurre una excepción,
se producirá una Falla de Doble Bus dado que la CPU no será capaz de escribir el entorno de pila
de la excepción. Luego de una Falla de Doble Bus solamente puede hacerse un reset para continuar
con la ejecución. WHDLoad verificará si hay un conflicto del área protegida mediante el SSP y terminará
si se cumple dicha condición. Pero esto no será de ayuda si el SSP cambia posteriormente.
Para más limitaciones e información por favor lea las entradas de Autodoc para las
diferentes funciones resload_Protect:
[Main]
[Docs]
[Installs]
[Search]
[Team]
[Guestbook]
[Links]