ReadProcessMemory Größe

Wie kann ich feststellen wieviel Bytes die Funktion nun wirklich gelese hat ?
Ich habe mir dazu mal eine kleine Funktion geschrieben:
Code:
BYTE* ReadFromProcess ( HANDLE winHandle, void* baseAddress )
{
    BYTE buffer[256];
    SIZE_T size = 0;
    ReadProcessMemory ( winHandle, baseAddress, &buffer, sizeof(buffer), &size );
    BYTE *readBytes = new BYTE[size];

    for ( int i = 0; i <= size; i++ )
    {
        readBytes[i] = buffer[i];
    } return readBytes;
}

Ich möchte in dem Array "readBytes" nun die tatsächlich vorhandenen Bytes stehen haben.

Aber die Variable "size" ist ja immer so groß wie mein vordefiniertes Array 0o
Ich kann doch vorher gar nicht wissen wie viele Bytes an der Speicheradresse stehen.
 
VirtualQueryEx
http://msdn.microsoft.com/en-us/library/aa366907(VS.85).aspx
ergibt:
Code:
typedef struct _MEMORY_BASIC_INFORMATION {
  PVOID  BaseAddress;
  PVOID  AllocationBase;
  DWORD  AllocationProtect;
  SIZE_T RegionSize;    <--------<------
  DWORD  State;
  DWORD  Protect;
  DWORD  Type;
} MEMORY_BASIC_INFORMATION, 
 *PMEMORY_BASIC_INFORMATION;
also wieviel Bytes man hier maximal auslesen kann :)
 
Danke erstmal.
Aber soweit ich das verstanden habe ließt der gleich eine ganze Speicherregion mit gleichen Attributen, aber ich möchte ja nur die größe in Bytes an meiner Speicheradresse :>

Also ich habe das mal ausprobiert und in RegionSize waren 4096 Bytes -.-
 
Das ist auch richtig so. Du findest IMMER mindestens die Größe einer Speicherseite vor. Üblicher Standard ist 4096 Byte.
Wenn man Speicherbereiche mit Access-Flags besetzt, dann geht das immer nur für eine ganze Seite.
Wenn du also am Anfang einer Seite mit ReadProcessMemory anfängst zu lesen, und das erste Byte konnte erfolgreich gelesen werden, dann werden garantiert auch die nächsten 4095 Byte gelesen werden können. ;)
Anders sieht das natürlich aus, wenn du am Ende einer Seite liest und die nächste direkt anliegende nächste Seite ist nicht lesbar.

Mit VirtualQueryEx kannst du schauen, wie groß die Memory-Region ist (Sammlung an konsekutiv folgenden Sepicherseiten mit gleichen Schreib/Lese/Ausführrechten), von der du lesen möchtest.

[1] http://de.wikipedia.org/wiki/Speicherseite
[2] http://de.wikipedia.org/wiki/Seitentabelle
 
Zurück
Oben