C++Avoir la valeur d'une var avec son adresse

Fermé
gagner79 Messages postés 261 Date d'inscription mercredi 28 mai 2008 Statut Membre Dernière intervention 20 décembre 2009 - 21 sept. 2009 à 20:29
mamiemando Messages postés 33135 Date d'inscription jeudi 12 mai 2005 Statut Modérateur Dernière intervention 4 juin 2024 - 23 sept. 2009 à 18:53
Bonjour !

Je souhaite comparer une valeur avec la valeur de toutes les variables de la ram, et les modifier.
Comment faire pour trouver la valeur d'une variable quand on ne connait que son adresse ?
Par exemple avoir la valeur de la variable d'adresse 0x805f000.

Merci d'avance !

5 réponses

mamiemando Messages postés 33135 Date d'inscription jeudi 12 mai 2005 Statut Modérateur Dernière intervention 4 juin 2024 7 756
21 sept. 2009 à 21:03
En admettant que tu aies stocké dans un int * l'adresse d'un int (ca paraît un bon départ :p) il suffit d'utiliser l'opérateur unaire * :

#include <stdio.h>

int main(){
  int x = 69;
  int *px = &x;
  int y = *px;
  printf("%d\n",y);
  return 0;
}


Bonne chance
0
gagner79 Messages postés 261 Date d'inscription mercredi 28 mai 2008 Statut Membre Dernière intervention 20 décembre 2009 40
22 sept. 2009 à 19:40
Si j'ai bien compris je met l'adresse de la variable dans x ?
0
mamiemando Messages postés 33135 Date d'inscription jeudi 12 mai 2005 Statut Modérateur Dernière intervention 4 juin 2024 7 756
22 sept. 2009 à 21:38
Dans l'exemple que je t'ai donné, px stocke l'adresse de x.
Pour accéder à la valeur à l'adresse px, il suffit d'appeler *px (ici je stocke cette valeur dans la variable y).

Bonne chance
0
gagner79 Messages postés 261 Date d'inscription mercredi 28 mai 2008 Statut Membre Dernière intervention 20 décembre 2009 40
23 sept. 2009 à 15:37
Donc avec ça je ne peux pas partir avec juste l'adresse d'une variable d'un autre programme ?
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
mamiemando Messages postés 33135 Date d'inscription jeudi 12 mai 2005 Statut Modérateur Dernière intervention 4 juin 2024 7 756
23 sept. 2009 à 18:53
Je ne comprends pas ce que tu veux faire ou ce que tu ne comprends pas. Quand tu as une adresse px, tu interprètes ce qui est à cette px en appelant *px.

- Si px est de type int *, alors *px est interprété comme un int.
- Si px est un char *, *px est interprété comme un char.
- Si px est int *** alors *px est interprété comme un int **, **px est interprété comme un int *, et ***px comme un int.

Si lorsque tu évalues *px, px n'est pas une adresse (valide), tu obtiens en général une erreur de segmentation.
Si *px est interprété dans un type qui fait par exemple 4 octets, alors qu'en fait la donnée en fait 1, tu obtiens en général une erreur de segmentation.

Tu n'es pas sensé accéder à la plage mémoire d'un autre programme.

Bonne chance
0