Question pointeurs

Question pointeurs - C - Programmation

Marsh Posté le 29-10-2004 à 21:45:36    

Bonjour,  
 
J'ai un petit problème avec les pointeurs: j'aimerai à partir d'une valeur d'adresse mémoire connue, trouver la valeur de la variable correspondant à cette adresse.  
 
Par exemple, j'ai une adresse du style 77E081DE et je veux afficher la valeur de la variable.(je sais que c'est un float qui se trouve à cette adresse)  
 
J'ai essayé:  
 
float *ptr;  
ptr=0x77E081DE; (ou &ptr=0x77E081DE)  
printf("%f",*ptr);  
 
...et ça marche pas  
 
Si quelqu'un pouvait me donner une piste et m'aider un peu ce serait super sympa. Merci d'avance.


Message édité par elo84 le 29-10-2004 à 21:57:54
Reply

Marsh Posté le 29-10-2004 à 21:45:36   

Reply

Marsh Posté le 29-10-2004 à 21:48:29    

oulalala !!! comment peux tu être rééllement SUR que l'adresse absolue que tu donnes contienne un float ? [:wam]
c'est n'importe quoi ton truc ! tu n'alloues que dalle (un float prend plus d'un octet de place), et tu fais des supputations venues d'ailleurs !!
alloues donc la mémoire, places y un float, et tu verras que tu arriveras à tes fins


---------------
J'ai un string dans l'array (Paris Hilton)
Reply

Marsh Posté le 29-10-2004 à 21:50:39    

Je seconde Harko, d'ou vient ton adresse là, comment peux tu être sûr de ce qui s'y trouve?


---------------
Stick a parrot in a Call of Duty lobby, and you're gonna get a racist parrot. — Cody
Reply

Marsh Posté le 29-10-2004 à 22:06:28    

Harkonnen a écrit :

oulalala !!! comment peux tu être rééllement SUR que l'adresse absolue que tu donnes contienne un float ? [:wam]


 
Avec un éditeur de mémoire tu peux lire la valeur qui se trouve à une adresse mémoire à ce que je sache...
 
Je veux juste récupérer la valeur dont je connais l'adresse mémoire. Si quelqu'un d'autre et qui a compris veut bien m'aider, merci davance.

Reply

Marsh Posté le 29-10-2004 à 22:07:37    

oui tu peux. mais à l'exécution. pas à priori

Reply

Marsh Posté le 29-10-2004 à 22:21:51    

Taz a écrit :

oui tu peux. mais à l'exécution. pas à priori


... et seulement si l'adresse appartient à son processus. Parce que d'une part, rien qu'en regardant la tête du pointeur, on voit que c'est du memory map (c'est une addresse valide uniquement pour un process donné donc a priori).  
 
Mais en plus, l'OS (et le processeur) empêche d'accéder à une zone mémoire qui n'appartient pas au process. Il faut donc aller à un niveau plus bas au niveau système...
 

Reply

Marsh Posté le 29-10-2004 à 22:23:33    

t'aurais pas un truc 'la mémoire peut pas être written' ?

Reply

Marsh Posté le 29-10-2004 à 22:29:10    

elo84 a écrit :

Avec un éditeur de mémoire tu peux lire la valeur qui se trouve à une adresse mémoire à ce que je sache...
 
Je veux juste récupérer la valeur dont je connais l'adresse mémoire. Si quelqu'un d'autre et qui a compris veut bien m'aider, merci davance.


tu sais, dans un système multitache, plusieurs processus peuvent cohabiter, avec leur propre zone mémoire, et un processus ne peut pas normalement lire ou écrire la mémoire du voisin [:itm]
rien ne te garantit que l'adresse que tu donnes appartienne à ton processus, tu as toutes les chances de te prendre un Access Violation
 
edit: [:benou_grilled]


Message édité par Harkonnen le 29-10-2004 à 22:29:26

---------------
J'ai un string dans l'array (Paris Hilton)
Reply

Marsh Posté le 29-10-2004 à 22:33:38    

surtout que c'est pas des adresses physiques que tu manipules

Reply

Marsh Posté le 29-10-2004 à 22:39:15    

Des éditeurs mémoires arrivent à accéder à la mémoire d'un processus choisi, on devrait pouvoir faire la même chose en C, non?
 

Reply

Marsh Posté le 29-10-2004 à 22:39:15   

Reply

Marsh Posté le 29-10-2004 à 22:42:11    

moi je serais curieux de savoir pourquoi tu veux faire ça

Reply

Marsh Posté le 29-10-2004 à 22:49:10    

Faire un programme qui contient une partie édition de mémoire.

Reply

Marsh Posté le 29-10-2004 à 22:54:53    

Soit c'est pour se rajouter des points de vie dans Half Life2, soit c'est pour surfer des sites pornos. A cet age là, y a que ça qui motive à la programmation système :)
 
Bon, elo, c'est très très très compliqué, il faut programmer des trucs assez bas niveau. Le fait même que ça marche pour toi me dit que tu es sous Windows XP ou 2000 (NT n'utilisait pas ce genre d'addresses trop proche de son segment kernel), et me dit que tu as le rôle Administrateur sur ton poste. Tu peux jeter un oeil là éventuellement:  
http://msdn.microsoft.com/library/ [...] memory.asp

Reply

Marsh Posté le 29-10-2004 à 22:55:07    

elo84 a écrit :

Des éditeurs mémoires arrivent à accéder à la mémoire d'un processus choisi, on devrait pouvoir faire la même chose en C, non?


Citation :

Mais en plus, l'OS (et le processeur) empêche d'accéder à une zone mémoire qui n'appartient pas au process. Il faut donc aller à un niveau plus bas au niveau système...


 :whistle:


---------------
Stick a parrot in a Call of Duty lobby, and you're gonna get a racist parrot. — Cody
Reply

Marsh Posté le 29-10-2004 à 23:00:53    

Masklinn,elo> http://www.woodmann.com/fravia/iceman1.htm
C'est clairment un poil plus compliqué que d'aller simplement déréférencer un pointeur, non ?
 
 
Taz,Harko> En googlant sur VAD et PTE, on tombe sur ça :) : http://64.233.183.104/search?q=cac [...] dows&hl=en

Reply

Marsh Posté le 29-10-2004 à 23:07:15    

Merci beaucoup Lam's :) c'est exactement ce que je cherchais. Vais regarder tout ça maintenant.

Reply

Marsh Posté le 30-10-2004 à 05:10:36    

Sous linux tu peux accéder à l'espace d'adressage d'un processus via /proc/PID/mem, mais vu qu'on sait toujours pas sous quel OS tu es...
 
PS : vu tes posts dans ce topic tu n'est visiblement pas familier avec le concept de mémoire virtuelle, donc évite de prendre de haut ceux qui répondent.


Message édité par matafan le 30-10-2004 à 05:16:31
Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed