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

gagner79 Messages postés 261 Date d'inscription   Statut Membre Dernière intervention   -  
mamiemando Messages postés 33778 Date d'inscription   Statut Modérateur Dernière intervention   -
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 !
A voir également:

5 réponses

mamiemando Messages postés 33778 Date d'inscription   Statut Modérateur Dernière intervention   7 884
 
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   Statut Membre Dernière intervention   40
 
Si j'ai bien compris je met l'adresse de la variable dans x ?
0
mamiemando Messages postés 33778 Date d'inscription   Statut Modérateur Dernière intervention   7 884
 
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   Statut Membre Dernière intervention   40
 
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 33778 Date d'inscription   Statut Modérateur Dernière intervention   7 884
 
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