25Fermer27
ZerosquareLe 02/04/2012 à 18:52
Certains jeux ont des routines de checksum (plutôt pour détecter les ROMs défectueuses que pour détecter les modifs, je pense), si c'est le cas il faut donc trouver la routine en question pour la désactiver.
darkpig (./22) :
Pourtant j'ai vérifié en changeant la valeur de l'adresse et ça change bien le nombre de vies. Mais l'adresse n'apparait nul part dans le code désassemblé. Là, je n'ai aucune idée de comment ça se passe... Un indice ? Est-ce que le jeu peut utiliser un offset plutot que les vraies adresses en clair, ou un truc comme ça ?
Y'a une infinité de façons d'accéder à la mémoire :
- charger un registre avec l'adresse, et utiliser le registre comme pointeur (lea.l variable, a0 / move.b #valeur, (a0))
- idem, mais en rajoutant un offset immédiat (lea.l blocs_de_variables, a0 / move.b #valeur, 5(a0))
- idem, mais en rajoutant un offset dans un registre (lea.l blocs_de_variables, a0 / move.l #5, d0 / move.b #valeur, (a0,d0))
- combinaison des 2 cas précédents
- les 3 cas précédents, mais en utilisant move.l au lieu de lea.l
- la même chose, en PC-relatif (lea.l variable(pc), a0 / move.b #valeur, (a0))
- les cas précédents, en rajoutant un bout de code qui n'a rien à voir au milieu
- ...

Faut désassembler et tracer, c'est tout tongue (ou avoir un émulateur qui peut faire un point d'arrêt en cas d'accès à un emplacement mémoire, ce qui est beaucoup plus pratique).