Ich versuche, einen Prozess-Speicher mit dem folgenden Code zu lesen:Readprocessmemory gibt einen größeren Puffer (C, Fenster)
void readdata(HANDLE phandle, LPCVOID paddress, SIZE_T datasize)
{
char *buff;
SIZE_T dataread;
BOOL b = FALSE;
buff = (char *) malloc (datasize);
b = ReadProcessMemory(phandle, paddress, (LPVOID)buff, datasize, &dataread);
if(!b)
{
printf("error reading memory, err = %d\n", GetLastError());
return;
}
printf("Data Read = %d\n", dataread);
printf("Len of actual buffer = %d\n", strlen(buff));
printf("Data = %s\n", buff);
free(buff);
return;
}
Nun phandle und pAddress sind dafür bekannt, weil ich Write verwendet. Ich habe die Werte von dort. Datengröße ist auch bekannt.
Die Funktion funktioniert bis auf die folgenden Ausnahmen. ReadProcessMemory() gibt data_read = 41 zurück (was korrekt ist, ich habe 41 an datasize übergeben), aber die tatsächliche Länge des Buffs ist 49. Wenn ich buff drucke, bekomme ich meine Zeichenfolge + etwas Müll.
Was mache ich falsch?
Code wird geschätzt.
Danke!
OK, wie würde ich das beheben (wenn das der Fall ist)? Ich schreibe die Zeichenfolge dort selbst. die Zeichenkette ist (zum Testen): "<1234567890><1234567890> \ 0" –
wonderer
Schreiben Sie Strlen (String) Bytes? Wenn dies der Fall ist, enthält strlen() das '\ 0' nicht, also müssen Sie eins zur Zählung hinzufügen. – Jonathan
haben es geschafft. Vielen Dank! – wonderer