次のコードを使用してプロセス メモリを読み取ろうとしています。
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;
}
これで、WriteProcessMemory を使用したため、phandle と paddress がわかりました。そこからの価値観を持っています。データサイズも知られています。
以下を除いて、機能は正常に動作します。ReadProcessMemory() は dataread = 41 を返します (これは正しいです。datasize に 41 を渡しました) が、実際のバフの長さは 49 です。バフを出力すると、文字列とガベージが得られます。
私は何を間違っていますか?
コードは大歓迎です。
ありがとう!