문제

다음 코드를 사용하여 프로세스 메모리를 읽으려고합니다.

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 ()을 사용하는 것은 신뢰할 수없는 것으로 보장됩니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top