Adresses Mémoire des sondes

Adresses Mémoire des sondes - Matériels & problèmes divers - Hardware

Marsh Posté le 02-12-2013 à 19:56:23    

Bonsoir bonsoir,
 
Tout d'abord, je m'excuse si je me trompe d'endroit pour poser ma(mes) questions,  
je ne savais pas trop où les poster...
 
Cela fait plusieurs heures que je cherche un moyen d'accéder aux adresses mémoire des sondes de mon pc (températures, vitesse des ventilos etc...)
 
C'est dans le but de me faire un petit programme style mini-aida64, que je peux mettre sur un périphérique (une espèce de mini écran de monitoring)
 
Pouvez vous m'aider svp ?
 
Les adresses que j'ai trouvées n'ont pas l'air de fonctionner... (après, c'était un banal code C avec un pointeur sur l'adresse et un printf de la valeur pointée, pas certain que ce soit très efficace...)
 
Merci d'avance  !

Reply

Marsh Posté le 02-12-2013 à 19:56:23   

Reply

Marsh Posté le 03-12-2013 à 11:18:16    

Quelles addresses par curiosité?
 
Sinon, je ne connais pas ces valeurs mais il est possible quelle soit stockée dans une zone mémoire "protégée" par le system, ce qui expliquerait que tu te fasses renvoyer si tu essaies d'y acceder.  
 
Comment y accèdes tu avec ton pointeur?

Reply

Marsh Posté le 03-12-2013 à 20:38:46    

Sur Everest, j'ai récupéré un fichier texte "propriété de la sonde"
Les adresses que j'ai utilisées sont celles ci :
 
------[ LM78 ISA Sensor Device at 0290 ]------
 
0000  00 00 00 00  00 00 00 FF  FF FF FF FF  FF FF FF FF
0010  FF 00 00 00  00 00 FF FF  FF FF FF FF  FF FF FF FF
0020  FF 01 02 FF  FF FF FF FF  FF FF FF FF  FF FF FF FF
0030  FF 1F 20 16  FF 1F FF 1F  FF 1F FF 1F  FF 1F FF 1F
0040  F7 1F FF 1F  02 02 02 02  02 FF FF FF  FF FF 06 FF
0050  01 FF FF FF  FF FF FF FF  C1 FF FF FF  FF E1 00 FF
0060  FF FF FF FF  FF FF FF FF  FF FF FF FF  FF FF FF FF
0070  FF FF FF FF  FF FF FF FF  FF FF FF FF  FF FF FF FF
0080  FF FF FF FF  FF FF FF FF  FF FF FF FF  FF FF FF FF
0090  FF FF FF FF  FF FF FF FF  FF FF FF FF  FF FF FF FF
00A0  FF FF FF FF  FF FF FF FF  FF FF FF FF  FF FF FF FF
00B0  FF FF FF FF  FF FF FF FF  FF FF FF FF  FF FF FF FF
00C0  FF FF FF FF  FF FF FF FF  FF FF FF FF  FF FF FF FF
00D0  FF FF FF FF  FF FF FF FF  FF FF FF FF  FF FF FF FF
00E0  FF FF FF FF  FF FF FF FF  FF FF FF FF  FF FF FF FF
00F0  FF FF FF FF  FF FF FF FF  FF FF FF FF  FF FF FF FF
 
Bnk0  01 FF FF FF  FF FF FF FF  C1 FF FF FF  FF E1 00 FF
Bnk1  2A 00 00 4B  00 50 00 FF  FF FF FF FF  FF FF FF FF
Bnk2  FF FF FF FF  FF FF FF FF  FF FF FF FF  FF FF FF FF
Bnk3  FF FF FF FF  FF FF FF FF  FF FF FF FF  FF FF FF FF
Bnk4  00 73 FF FF  00 00 00 FF  FF 1E 17 33  09 FF FF FF
Bnk5  D1 CD 00 FF  00 00 00 00  00 00 00 00  00 00 00 00
Bnk6  7F 7F 7F 7F  FF FF 00 00  05 0A 00 00  00 00 00 00
 
J'ai essayé un peu de tout là dedans (^^" )
Pour le pointeur je fais ;  
int (ou double)* pointeur=NULL;
pointeur=0x*adresse*
 
J'ai aussi essayé les adresses mémoire qu'on peut trouver dans msinfo32, j'ai pris les adresses des "ressources carte mère"


Message édité par Kaidaten le 03-12-2013 à 20:41:15
Reply

Marsh Posté le 04-12-2013 à 10:01:51    

Et qu'est ce que le programme te renvoie quand tu essaies d'accèder a ces valeurs? Ce serait surprenant qu'il ne crash pas ^^
 
Je t'invite a réviser les accès mémoire en C car ta méthode d'accès n'est pas bonne :)
 
EDIT: allez je suis de bonne humeur :

Code :
  1. char ptr = * ((char *) 0x2A00004B);


 
Après rien ne garantie que windows t’autorise l'accès a cet espace mémoire, et la ça va être plus touchy.


Message édité par Av3k le 04-12-2013 à 10:07:40
Reply

Marsh Posté le 04-12-2013 à 18:45:06    

Ah je ne connaissais pas cette méthode ^^
Merci bien !

 

Je n'ai que quelques notions en C... Je suis en train d'étudier ce langage :)

 

Pourquoi faut-il écrire *((char *) *adresse*) ?

 

Et effectivement, lorsque je lançais mon "programme", j'avais un message "... a cessé de fonctionner."

Message cité 1 fois
Message édité par Kaidaten le 04-12-2013 à 18:45:42
Reply

Marsh Posté le 05-12-2013 à 09:24:57    

Kaidaten a écrit :

Ah je ne connaissais pas cette méthode ^^
Merci bien !
 
Je n'ai que quelques notions en C... Je suis en train d'étudier ce langage :)
 
Pourquoi faut-il écrire *((char *) *adresse*) ?
 
Et effectivement, lorsque je lançais mon "programme", j'avais un message "... a cessé de fonctionner."


 
Qu'est ce qui a cessé de fonctionner? Car dans ce cas, si tu es "sur" de ces adresses, tu ne devrais pas avoir ce msg, la ca peut signifier que tu tapes dans l'espace d'adressage d'un autre processus...
 
Pour t'expliquer rapidement : En C, il n'y a pas de moyen direct d'accèder a une adresse donnée "en dure" (car c'est sale, à risque etc....) il faut donc trouver un moyen de contourner la méthode traditionnelle (malloc, free etc..)
 
Donc le (char *) @ est un cast implicite, precisant que l'addresse 0x123456 est de type pointeur sur caractère (1 bit) le *(lecast) signifie  
que tu as un pointeur sur cette adresse. (je sais pas si c est très clair mais c'est pas si facile a explique....)
 
Si tu as que quelques notions en C, tu t'attaques à une partie bien au dessus de ton niveau actuellement, je t'invite à regarder les cours sur developpez.com notamment celui sur la gestion mémoire en C  :)  
 
Et petit conseil : code sous linux, tu auras bcp plus de facilité avec la mémoire qu'avec la gestion

Spoiler :

desastreuse

de celle ci sous windows  :hello:


Message édité par Av3k le 05-12-2013 à 09:27:30
Reply

Marsh Posté le 05-12-2013 à 11:00:34    

Ok je vais aller voir les cours sur developpez.com pour commencer :)
Merci pour ton aide !
 
Quant aux adresses, je ne suis pas sûr du tout. Je fais à tatillon ^^"

Reply

Sujets relatifs:

Leave a Replay

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