ReadProcessMemory возвращает больший буфер (C, Windows) - PullRequest
1 голос
/ 20 августа 2009

Я пытаюсь прочитать память процесса, используя следующий код:

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 для изменения размера данных), но фактическая длина баффа равна 49. Когда я печатаю бафф, я получаю свою строку + немного мусора.

Что я делаю не так?

код приветствуется.

Спасибо!

Ответы [ 2 ]

2 голосов
/ 20 августа 2009

'\ 0' в конце вашей строки, вероятно, не копируется ни из вашего буфера при записи, ни в буфер при чтении. В результате printf () просто печатает с начала вашей строки до тех пор, пока не увидит '\ 0', что может быть после ряда символов мусора.

1 голос
/ 20 августа 2009

Знаете ли вы, что прочитанные вами данные являются строкой? То есть. что это ноль прекращается? Если нет, то использование strlen () гарантированно будет ненадежным.

...