[C++]Lire qqc à une adresse mémoire précise

Lire qqc à une adresse mémoire précise [C++] - C++ - Programmation

Marsh Posté le 20-05-2002 à 12:23:41    

Déjà, est ce que c'est possible, et ensuite, comment ?
C'est tout, merci d'avance :)

Reply

Marsh Posté le 20-05-2002 à 12:23:41   

Reply

Marsh Posté le 20-05-2002 à 12:25:15    

Tu mets l'adresse que tu veux dans un pointeur.
Mais si tu sors de l'espace mémoire de ton application il y a des chances que ton programme se fasse tuer par le système...


---------------
mes programmes ·· les voitures dans les films ·· apprenez à écrire
Reply

Marsh Posté le 20-05-2002 à 12:26:20    

Sachant que l'espace mémoire de ton programme n'a rien à voir avec la mémoire réelle.

Reply

Marsh Posté le 20-05-2002 à 12:30:48    

Oui, aussi... Mais bon il dit pas vraiment ce qu'il veut faire :D


---------------
mes programmes ·· les voitures dans les films ·· apprenez à écrire
Reply

Marsh Posté le 20-05-2002 à 12:33:12    

Ben en fait ce que g voudrai c lire qqc qui est au dehors de l'espace mémoire du programme !

Reply

Marsh Posté le 20-05-2002 à 12:42:06    

Reply

Marsh Posté le 20-05-2002 à 12:57:34    

Y'a pas moyen d'accéder à une adresse mémoire, directement sans passer par les handles d'autres processus ?  
Genre g une adresse et g lie à l'adresse directement koi
:??:

Reply

Marsh Posté le 20-05-2002 à 13:08:55    

Nan !

Reply

Marsh Posté le 20-05-2002 à 13:11:24    

ayeuh ok, dommage :(
g v essayer de me renseigner du côté de l'asm, ptet que c possible :??:
Merci de votre aide en tout cas :)

Reply

Marsh Posté le 20-05-2002 à 13:18:48    

cgmarmotte a écrit a écrit :

g v essayer de me renseigner du côté de l'asm, ptet que c possible :??:




Que tu le fasses en C ou ASM, ce sera pareil ! L'OS t'empechera d'accéder à toute portion de la RAM à laquelle tu n'as pas droit d'accéder...


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

Marsh Posté le 20-05-2002 à 13:18:48   

Reply

Marsh Posté le 20-05-2002 à 14:11:03    

Si tu veux juste lire ou ecrire  dans l'epace mémoire d'un autre prog obtient un handle sur le process et utilise ReadProcessMemory et WriteProcessMemory . Il y a déjà de quoi bidouiller avec ça.
Sinon c'est possible de lire n'importe quelle adresse mais c'est du code cochon qui va dépendre de l'os utilisé ( plus facile avec 95/98 )

Reply

Marsh Posté le 20-05-2002 à 17:33:29    

Harkonnen a écrit a écrit :

 
Que tu le fasses en C ou ASM, ce sera pareil ! L'OS t'empechera d'accéder à toute portion de la RAM à laquelle tu n'as pas droit d'accéder...  




ok...Mais alors comment tu fais pr accéder à des données comme (par ex.) le type de ton proc sans passer par des variables globales ?

Reply

Marsh Posté le 20-05-2002 à 18:16:20    

Tu peux utiliser des sémaphores... sous Windows avec VisualC++ tu as des classes toutes faites pour partager des segments de mémoires entre process. Mais tu ne fais pas ce que tu veux quand même ! Et heureusement pour la stabilité du système !
 :bounce:  :bounce:  :bounce:

Reply

Marsh Posté le 20-05-2002 à 18:50:10    

Les sémaphores ?! Oulà, j'en ai vaguement entendu parler ;)
g v essayer de me renseigner :)

Reply

Marsh Posté le 20-05-2002 à 20:53:20    

Citation :

Sinon c'est possible de lire n'importe quelle adresse mais c'est du code cochon qui va dépendre de l'os utilisé ( plus facile avec 95/98 )


 
Y'a des drivers qui existent et qui permettent de faire ca. J'en connais un qui permet de lire + écrire sur n'importe quel port et n'importe quelle adresse mémoire sous 9x mais aussi NT. Je crois qu'il faut etre admin sous NT ... (ou alors installer le driver en tant qu'admin et apres c'est bon)
C'est pas du code cochon, je rêve même d'être capable d'écrire ça un jour.
Apres, sous 98, il est possible en effet de bidouiller, en assembleur, pour exploiter une faille de protection de cet OS et faire passer le code de son executable en ring0, ce qui est théoriquement impossible sous Windows (seuls les drivers dll + vxd le peuvent). Ca oui c'est plutôt cochon dans le sens ou c'est pas du tout ce qui est préconisé.
va sur ce site : http://www.internals.com  
Ca s'appelle winio.
Si le code asm pour passer en ring0 t'intéresse, un exemple pas mal ici :
http://progzone.free.fr/basniveau/ring0/ring0.htm
 

Citation :

ok...Mais alors comment tu fais pr accéder à des données comme (par ex.) le type de ton proc sans passer par des variables globales ?


 
Je comprend pas la question ... qu'entends tu par type de ton proc ?
Et je pense que tu confonds une variable globale qui est accessible partout au sein d'UN programme et variable partagée entre plusieurs programmes.
 
C'est simple, c'est la communication inter-processus. (IPC)
Y'a pas mal de thechniques ... semaphores, pipes, file mapping ... et aussi messages.
Je pense que dans ton cas un message serait l'idéal.
Renseigne toi sur RegisterWindowMessage (via MSDN ou win32.hlp)
 
Sinon, le type de programme si c'est "concole" ou "GUI", c'est contenu dans l'exe lui meme. Documente toi sur le format PE. J'avais croisé un code qui se chargeait de ca, attends voir ...
A partir de GetModuleHandle ou directement depuis le HINSTANCE si t'es dans WinMain, tu te ballades au fil des sections de ton exe.
Regarde dans Winnt.h pour la définition des sections + constantes.
A savoir IMAGE_SUBSYSTEM_WINDOWS_GUI et IMAGE_SUBSYSTEM_WINDOWS_CUI dans ton cas.
 
Je crois que c'est le champ Subsystem de IMAGE_OPTIONAL_HEADER32 qui contient ca.
Voici le code qui cherche la version du linker pour te donner un exemple :

Code :
  1. void GetLinkerVersion()
  2. {
  3.         PIMAGE_DOS_HEADER   pidh;
  4.         PIMAGE_NT_HEADERS   pinh;
  5.         pidh = (PIMAGE_DOS_HEADER) GetModuleHandle(NULL);
  6.         if ( pidh->e_magic != IMAGE_DOS_SIGNATURE || pidh->e_lfanew == 0)
  7.             return;
  8.         pinh = (PIMAGE_NT_HEADERS)(((PBYTE)pidh) + pidh->e_lfanew);
  9.         verMajor = pinh->OptionalHeader.MajorLinkerVersion;
  10.         verMinor = pinh->OptionalHeader.MinorLinkerVersion;
  11. }


---------------
FAQ fclc++ - FAQ C++ - C++ FAQ Lite
Reply

Marsh Posté le 05-06-2002 à 12:05:37    

Merci bcp d'avoir pris le temps d'écrire toutes ces précisions  :ouch:  
G v essayer de me renseigner sur tout çà, g pense que tu m'as donné pas mal d'indices !
Par type de proc, j'entendais type de processeur (et non processus ;) ) : Ce que g pense, c'est qu'un truc de ce genre doit bien être écrit qq part (par ex. les mobo les reconnaisse), et sous NT y'a des variables d'environnement qui te donnent des infos dessus mais elles sont incomplètes et çà plante sous 9x apparemment ! C'est pour celà que j'aimerai taper à la source directement, si ct possible....Dc lire à une adresse mémoire précise ;)
 
Merci pr ton aide :)


Message édité par cgmarmotte le 06-05-2002 à 16:49:49
Reply

Sujets relatifs:

Leave a Replay

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