Accès aux adresses mémoire directes et obtention des valeurs en C ++
Je me demandais si il était possible d'accéder directement bloc de mémoire à l'aide de C/C++ et de saisir la valeur. Par exemple:
int i = 15;
int *p = &i;
cout << &i;
Si j'ai pris les imprimés de valeur ici, ce serait me donner l'adresse de la variable i, qui contient la valeur 15. Je vais juste dire que c'imprimé 0x0ff9c1 pour cet exemple. Si j'ai un programme distinct qui déclare un pointeur comme si...
int *p = 0x0ff9c1;
cout << *p;
Serait-il possible d'imprimer la qui 15 que l'autre demande placée dans le bloc de mémoire 0x0ff9c1? Je sais que ma déclaration de pointeur avec l'adresse de la mémoire est incorrect, je ne sais pas comment le faire autrement. J'ai essayé d'utiliser memcopy
mais je n'ai pas été en mesure d'obtenir que le travail soit. Je sais que c'est possible en quelque sorte comme j'ai un programme appelé Moteur de Triche qui modifie le jeu de la mémoire des valeurs d'adresse de bénéficier d'avantages injustes. J'ai réussi à placer les imprimés de l'emplacement de la mémoire et de l'obtention de la valeur (15) si le Moteur de la Triche. Mon objectif est de faire cela à l'aide de C++.
Si c'est trop confus, fondamentalement, je voudrais accéder à une variable d'une autre application stockée à l'aide de son adresse de mémoire et afficher la valeur. Je suis avec Windows 7 x64 avec le compilateur MinGW si ce qui compte. Merci!
PS: je vais poster une photo de ce que Cheat Engine ne pour donner une meilleure idée.
source d'informationauteur llk
Vous devez vous connecter pour publier un commentaire.
Les deux processus ont des espaces d'adressage différents. Un processus ne peut pas accéder à un autre processses mémoire, sauf si elle est explicily de la mémoire partagée.
Vous ne pouvez pas le faire dans une plate-forme de façon agnostique en C++. Alors que je n'ai pas utilisé ce "cheat engine" plus précisément, il est presque certainement l'aide de la même API que d'un débogueur utilise. Le code spécifique à Windows, et vous aurez besoin d'un certain niveau de privilège sur le processus en cours d'exécution.
(Par exemple, si vous utilisez Visual Studio et d'exécuter un programme en Mode Debug, Visual Studio permet d'afficher et de modifier les valeurs de ce programme.)
Je n'ai pas écrit un débogueur en temps, donc je ne sais pas où est un bon endroit pour commencer sur les API de Débogage est, mais vous pouvez effectuer une recherche sur le web pour des choses comme cet article:
http://www.woodmann.com/fravia/iceman1.htm
Si vous souhaitez modifier la quantité de mémoire utilisée par un autre processus, un moyen serait d'injecter du code dans les autres processus. À partir de ce point, vous pouvez faire ce que vous voulez à l'autre du programme de la mémoire comme si c'était le propriétaire.
De recherche autour de à distance de création de thread ou accrocher. Il y a plus que quelques questions à ce sujet ici (et icipour commencer).
En général, il n'est généralement pas possible pour un programme à modifier la mémoire de l'autre. Le système va de grands efforts pour s'en assurer. Si elle n'a pas, aucun programme ne serait à l'abri. Cela est particulièrement vrai dans toutes les variantes d'Unix j'ai travaillé sur, mais pas sur tous les Systèmes d'exploitation que j'ai vu.
Noter qu'aucune de ces règles s'appliquent pour le noyau ...
Il y a aussi un paradigme de programmation appelée mémoire partagée, mais vous devez définir explicitement que.
Réponse courte: vous ne pouvez pas l'habitude de le faire. Je croire vous avez mentionné windows. Je ne sais rien à propos de Windows, de sorte que votre kilométrage peut varier.
Un peu en retard, mais vous avez cette grâce à une injection de DLL. Voici un lien vers un tutoriel: http://resources.infosecinstitute.com/using-createremotethread-for-dll-injection-on-windows/