Accéder à la mémoire des autres applications C ++
-
14-11-2019 - |
Question
Je pense à un problème que j'ai depuis un certain temps maintenant. Je voudrais écrire un programme C / C ++ (sous Windows d'abord) qui peut accéder (lire / modifier les valeurs) la mémoire (pile, tas, tout) de Autres programmes de course. (Pas comme la mémoire partagée mais n'importe quelle mémoire que l'ordinateur a ..) sans avoir à démarrer l'application à partir de ma propre application .. J'ai déjà vu quelque chose comme ça auparavant, mais je ne peux pas comprendre comment cela se fait .. si je devais accéder à la mémoire de tout programme en cours d'exécution, j'obtiendrais des erreurs du système d'exploitation, n'est-ce pas? Toute aide est appréciée!
La solution
Comme l'a dit @sharptooth, cela nécessite le soutien du système d'exploitation. Différents OS le font différemment. Puisque vous êtes sous Windows, il y a quelques étapes que vous pourriez suivre:
- Appel
OpenProcess
, ouCreateProcess
pour accéder ou lancer un nouveau processus. Dans cet appel, vous devez demanderPROCESS_VM_READ
accéder. - Appel
ReadProcessMemory
pour lire un morceau de mémoire dans ce processus ouvert.
Si vous souhaitez changer la mémoire d'un autre processus, vous avez alors besoin PROCESS_VM_WRITE
accès et utilisation WriteProcessMemory
pour y parvenir.
Dans Linux, par exemple, vous utiliseriez PTRACE pour se fixer à un processus et jeter un coup d'œil, piquer sa mémoire.
Autres conseils
Vous pouvez démarrer un processus (un autre programme) à partir de votre propre application et accéder à certaines de ses informations (en particulier la mémoire partagée). Le contraire est très difficile, le CPU simule les adresses de mémoire, donc chaque processus estime qu'il a toute la mémoire disponible ...
Vous pourriez être intéressé à jeter un œil au Toolhelp32ReadProcessMemory
fonction.