J'utilise une application d'édition de mémoire appelée Cheat Engine. J'attache Cheat Engine à un jeu. Dans mon jeu, j'ai un entier de 32 bits connu sous le nom de HP. Si je redémarre mon jeu, HP est stocké à une nouvelle adresse mémoire B. Il semble qu'avec Cheat Engine, je puisse faire un scan du pointeur et trouver une adresse mémoire statique, C, qui pointe vers une autre adresse mémoire et son décalage, D et offset, de sorte que [D + offset] stocke toujours l'adresse mémoire de HP pendant cette session. Donc, si je déréférence [D + offset], je reçois toujours l'adresse mémoire qui stocke HP.Quel est l'avantage des offsets pour les pointeurs?
Voici un diagramme:
A ou B -> HP
D + offset -> A ou B
C -> D
Quel est l'avantage d'utiliser des compensations? Pourquoi C ne peut-il pas pointer directement vers A ou B directement? Je suis familier que l'utilisation de décalages est bénéfique lorsqu'il s'agit de tableaux dans le langage C. Cela signifie-t-il que chaque fois que je vois un décalage sur un pointeur, le pointeur pointe vers le premier élément d'un tableau et que le décalage fait référence à l'un des éléments du tableau?
Les réponses à ce niveau peuvent être fortement influencées par l'architecture et le jeu d'instructions de la puce (ou machine virtuelle) sur laquelle le code est destiné à s'exécuter. Certains ensembles d'instructions encouragent ce genre de choses en fournissant des modes d'adressage rapides pour l'indexation de décalage. – dmckee