Relation entre VirtualQueryEx et ReadProcessMemory

Je sais que les processus Windows sont mappés dans ram en chargeant l’en-tête PE puis les sections suivantes (.text .data, etc.) et que je peux les lire avec ReadProcessMemory, mais quel est l’intérêt de VirtualQueryEx? Je pense qu’il devrait lire une page à la fois (les pages de mémoire utilisées par le système de radiomessagerie) mais je ne vois pas en quoi les pages de mémoire sont liées aux sections de PE. devrais-je aussi utiliser VirtualQueryEx ou les pages ne sont pas liées à leur contenu?

VirtualQueryEx vous fournit des informations sur l’atsortingbution d’une page, le type général d’informations qu’elle contient, etc. J’ai posté du code de démonstration dans une réponse précédente . Cela passe par un processus et extrait certaines informations sur chaque bloc de mémoire alloué depuis le système d’exploitation pour un processus cible.

ReadProcessMemory vous permettra de lire le contenu réel d’un bloc de mémoire dans un processus spécifié. Pour l’utiliser, vous devez spécifier une adresse dans le processus cible, mais en soi, il n’a aucune idée de ce qui se trouve dans ce processus.

Si vous voulez lire une partie de l’exécutable mappé dans un processus, vous utiliserez généralement VirtualQueryEx pour trouver en mémoire les parties qui vous intéressent, puis ReadProcessMemory pour lire les éléments qui vous intéressent. Par exemple, dans une autre réponse précédente , j’ai publié du code qui recherche un modèle spécifié dans toutes les pages d’un processus qui sont validées et privées ou mappées.

Selon ce que vous recherchez (en particulier si vous souhaitez examiner des éléments comme le code dans le processus cible), vous pouvez utiliser quelque chose comme l’API du gestionnaire de symboles pour trouver les éléments qui vous intéressent. VirtualQueryEx examine les choses avec une granularité assez grossière – par exemple, il vous indiquera l’adresse de base et la taille de tout le bloc de mémoire où un exécutable entier a été mappé, mais ne vous dit pas grand-chose sur ce qui se trouve à l’intérieur. (souvent grand) bloc.

L’API du gestionnaire de symboles peut vous indiquer (par exemple) l’adresse d’une fonction spécifique à partir de cet exécutable (à condition que ces informations soient disponibles, telles que le fichier exécutable, les informations de débogage ou la fonction qui vous intéresse).

Pour déterminer quelle page de mémoire appartient à quelle section d’un PE chargé en mémoire, vous devez lire son en-tête PE, l’parsingr et trouver les sections .text, .code, .bss, etc.

VirtualQueryEx renvoie PMEMORY_BASIC_INFORMATION qui inclut des informations sur cette page de mémoire, telles que read, write, execute flag.