Я пытаюсь прочитать память процесса, используя следующий код:ReadProcessMemory возвращает буфер большего размера (C, окна)
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;
}
Теперь phandle и Paddress известны потому что я использовал WriteProcessMemory. У меня есть значения оттуда. Данные также известны.
Функция работает нормально, за исключением следующих. ReadProcessMemory() возвращает dataread = 41 (это правильно, я передал 41 на datasize), но фактическая длина баффа равна 49. Когда я печатаю buff, я получаю свою строку + некоторый мусор.
Что я делаю неправильно?
код оценивается.
Спасибо!
ОК, как бы я это исправить (если это так)? Я сам пишу там строку. строка (для тестирования): «<1234567890><1234567890> \ 0" –
wonderer
Вы пишете strlen (string) байты? Если это так, strlen() не включает '\ 0', поэтому вам нужно добавить его в счет. – Jonathan
получил. благодаря! – wonderer