Bonjour,
dans le cadre du développement d'une appli, je bloque sur la lecture de la valeur d'une adresse mémoire d'un process. Le but du logiciel est un peu plus complexe que ca, mais c'est simplement la lecture d'une adresse qui pêche.
J'ai parcouru pas mal d'exemples et j'utilise la fonction ReadProcessMemory fourni par la dll "kernel32.dll".
Pour vérifier le bon fonctionnement de mon code, je compare mon résultat avec ce que j'obtiens avec le fameux logiciel cheatEngine. Je prends une adresse au hasard pour un process et je compare les valeurs.
Dans mon code, j'utilise la fonction OpenProcess (toujours fourni par la même dll) afin de retrouver mon process. En debug, je vois bien que le process sur lequel je pointe est le bon car il a bien l'id indiqué dans le gestionnaire des tâches.
Mon erreur se situe donc certainement dans l'utilisation de ReadProcessMemory dont voici l'utilisation:
Mon buffer est déseperement vide, et en tracant l'erreur avec l'instruction Marshal.GetLastWin32Error(), j'obtiens l'erreur "Seule une partie d’une requête ReadProcessMemory ou WriteProcessMemory a été effectuée".
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7 public byte[] ReadMem(int pOffset, int pSize) { byte[] buffer = new byte[pSize]; ReadProcessMemory(this.processHandle, pOffset, buffer, pSize, 0); return buffer; }
Merci d'avance pour votre aide
Partager