http://computacion.cs.cinvestav.mx/~ameneses/pub/tesis/ltesis/node29.html
http://es.wikipedia.org/wiki/Modo_protegido
http://es.wikipedia.org/wiki/Modo_real
Donde cada programa es un proceso nuevo, y todos arrancan desde el address 0000 hasta FFFF (para dar un ejemplo, no se a cuantos llegan, los q sean 4gb en hexadecimal no?)
Nop, en 32 bits sería 00000000h ... 7FFFFFFFh, eso son los 2gb de direccionamiento en memoria para modo usuario (las app de escritorio que haces en vb, corren en este nivel de privilegios). Los otros 2gb son para modo kernel.
Entonces el Trainer esta configurado para que modifique el address 40156F por ejemplo pero indicando que se refiere a la del proceso del juego que se indico. Ya que sino modificaria a cualquier otro proceso abierto q tenga la misma address (cosa que tendra).
Ahora si entendi? esque es lo mas logico que se me ocurre ahora.
Ahora si entendi? esque es lo mas logico que se me ocurre ahora.
Si tu quieres modificar la diercción 40156F del game, pero tu trainer haces esto:
mov dword ptr [40156Fh], -1
NO estás modificando la dirección de cualquier proceso, estás modificando la dirección 40156F que pertenece a tu trainer.
Para modificar la dirección 40156F de otro proceso se usa la API WriteProcessMemory.
WriteProcessMemory ( hProcesoAModificar, 40156F, &lpbuffer, nSize, NULL)