ReadProcessMemoryが大きいバッファを返す(C、ウィンドウ)
-
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;
}
私はWriteProcessMemoryを使用becuase さて、phandleとpaddressが知られています。私はそこから値を持っています。データサイズも知られています。
この関数は、以下を除いて、[OK]を動作します。 ReadProcessMemory()は= 41 dataread返します(正確である、私はDATASIZEする41を通過した)が、バフの実際の長さは49、私はバフを印刷するとき、私は私の文字列+いくつかのゴミを取得することです。
私が間違って何をしているのですか?
のコードを理解されたい。
ありがとうございます。
解決
「\ 0」あなたの文字列の最後には、あなたが読んだときにあなたが書くとき、あなたのバッファのうちのいずれか、コピー、またはあなたのバッファにされていない可能性があります。その結果、printfの()はちょうどそれが文字化けの番号の後かもしれ「\ 0」を、見るまであなたの文字列の先頭から印刷しようとしている。
他のヒント
あなたが読み込まれたデータが文字列であることを知っていますか?すなわち。それがnullで終了だと?その後、()はstrlenを使用していない場合は信頼できないことが保証されます。
所属していません StackOverflow