Lire qqc à une adresse mémoire précise [C++] - C++ - Programmation
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...
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.
Marsh Posté le 20-05-2002 à 12:30:48
Oui, aussi... Mais bon il dit pas vraiment ce qu'il veut faire
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 !
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
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
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...
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 )
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 ?
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 !
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
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 :
|
Marsh Posté le 05-06-2002 à 12:05:37
Merci bcp d'avoir pris le temps d'écrire toutes ces précisions
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
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