c ++ - Bestemmelse af hukommelsesadgangspositioner for åben proces

Indlæg af Hanne Mølgaard Plasc

Problem



Jeg forsøger at skrive et værktøj, der gør det muligt for mig at læse hukommelsen fra en proces, der i øjeblikket kører i Windows. Jeg har brugt CreateToolhelp32Snapshot til at opbygge en aktuel PID-liste for alle programmer, der kører på computeren, og jeg åbner et håndtag via OpenProcess med Vm\_read flagger uden problemer. Den vejkryds, jeg kører ind, er ReadProcessMemory-funktionen i Windows API, læser ikke noget, hvis den baserede adresses adresse ikke er i øjeblikket læsbar. Det siges, hvilken metode jeg kan bruge til at bestemme de læsbare sektioner af en behandle.


Min eneste idé om sagen er, at jeg kunne gentage over readprocessmemory-funktionen, der starter ved midtvejs punktet (procesens størrelse i hukommelsen)/2 og fortsæt, indtil jeg finder den specifikke placering, der vil tillade mig at læse, men jeg tror, ​​det ville være frygtelig ineffektiv for store processer (o (n/2)), og selvom det er den eneste brugerindstilling, hvordan kan jeg endda finde procesens samlede størrelse i hukommelsen?


Hvis dette spørgsmål ikke er beregnet til stackoverflow, lad mig det vide, og jeg lukker det, vær venlig at afstemme mig. Jeg har forsøgt at løse mit problem selv i flere timer nu.

Bedste reference


Du kan ringe VirtualQueryEx for hver række sider i adresserummet for at finde ud af, om adressen er i brug. Hvis den anden proces ikke er suspenderet, vil der naturligvis være en chance for, at en sides status ændres mellem din forespørgsel og læsning af operationer. [2]