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!

Était-ce utile?

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:

  1. Appel OpenProcess, ou CreateProcess pour accéder ou lancer un nouveau processus. Dans cet appel, vous devez demander PROCESS_VM_READ accéder.
  2. 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.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top