Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
2983 connectés 

  FORUM HardWare.fr
  Programmation
  C++

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

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

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

n°141199
cgmarmotte
Posté le 20-05-2002 à 12:23:41  profilanswer
 

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

mood
Publicité
Posté le 20-05-2002 à 12:23:41  profilanswer
 

n°141200
antp
Super Administrateur
Champion des excuses bidons
Posté le 20-05-2002 à 12:25:15  profilanswer
 

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
n°141203
verdoux
And I'm still waiting
Posté le 20-05-2002 à 12:26:20  profilanswer
 

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

n°141204
antp
Super Administrateur
Champion des excuses bidons
Posté le 20-05-2002 à 12:30:48  profilanswer
 

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


---------------
mes programmes ·· les voitures dans les films ·· apprenez à écrire
n°141206
cgmarmotte
Posté le 20-05-2002 à 12:33:12  profilanswer
 

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

n°141210
verdoux
And I'm still waiting
Posté le 20-05-2002 à 12:42:06  profilanswer
 
n°141211
cgmarmotte
Posté le 20-05-2002 à 12:57:34  profilanswer
 

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
:??:

n°141212
verdoux
And I'm still waiting
Posté le 20-05-2002 à 13:08:55  profilanswer
 

Nan !

n°141213
cgmarmotte
Posté le 20-05-2002 à 13:11:24  profilanswer
 

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 :)

n°141215
Harkonnen
Modérateur
Un modo pour les bannir tous
Posté le 20-05-2002 à 13:18:48  profilanswer
 

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)
mood
Publicité
Posté le 20-05-2002 à 13:18:48  profilanswer
 

n°141231
obfuscator
Posté le 20-05-2002 à 14:11:03  profilanswer
 

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 )

n°141293
cgmarmotte
Posté le 20-05-2002 à 17:33:29  profilanswer
 

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 ?

n°141313
yung3000
Posté le 20-05-2002 à 18:16:20  profilanswer
 

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:

n°141327
cgmarmotte
Posté le 20-05-2002 à 18:50:10  profilanswer
 

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

n°141365
HelloWorld
Salut tout le monde!
Posté le 20-05-2002 à 20:53:20  profilanswer
 

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
n°151581
cgmarmotte
Posté le 05-06-2002 à 12:05:37  profilanswer
 

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

Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  C++

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

 

Sujets relatifs
[VB] erreur 10048, Adresse en utilisation[UNIX] Comment faire du monitoring pour le CPU et la mémoire?
[delphi]Coment faire pour save et lire une variable dans un fichier[PHP] Crée un lettre avec l'adresse du destina qui se trouve dans BD
[ALGO] Lire les n dernières lignes d'un fichier textelire dans un buffer audio
Lire les infos de la bsae SAM sous NT4[C / C++] lire un fichier ASF sans flux audio ??
[TCL] Lire une ligne depuis l'entrée standard ?partage de la memoire
Plus de sujets relatifs à : [C++]Lire qqc à une adresse mémoire précise


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR