READPROCESSMEMORY 더 큰 버퍼 (C, Windows)를 반환합니다.
-
19-09-2019 - |
문제
다음 코드를 사용하여 프로세스 메모리를 읽으려고합니다.
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를 사용하여 알려져 있습니다. 거기에서 값이 있습니다. DataSize도 알려져 있습니다.
다음을 제외하고 함수는 정상적으로 작동합니다. readProcessMemory ()는 DataRead = 41을 반환합니다.
내가 뭘 잘못하고 있죠?
코드에 감사드립니다.
감사!
해결책
문자열 끝에있는 ' 0'은 쓰기시 버퍼에서 또는 읽을 때 버퍼로 복사되지 않을 수 있습니다. 결과적으로 Printf ()는 문자열의 시작 부분에서 ' 0'이 볼 때까지 인쇄 할 것입니다.
다른 팁
읽은 데이터가 문자열이라는 것을 알고 있습니까? 즉. 널이 끝났다고? 그렇지 않은 경우 strlen ()을 사용하는 것은 신뢰할 수없는 것으로 보장됩니다.
제휴하지 않습니다 StackOverflow