2017-07-17 10 views
-1

C++のReadProcessMemory関数に問題があります。実際に関数自体はうまく動作しますが、大きなアドレスの場合(たとえば、DWORDがアドレスに対して小さすぎるためにungsigned __int64を使用した場合など)、関数は私に間違ったポインタアドレスを与えます。私はDWORD tempAddressを変更した場合ReadProcessMemoryが正しく動作しません。

DWORD tempAddress; 
unsigned __int64 potentialBasePointerAddress = 0x13F8A0000 + 0x18606B8; //I used unsigned __int64 since 0x13F8A0000 is too large for DWORD 

if (ReadProcessMemory(hProcess, (LPVOID)potentialBasePointerAddress, &tempAddress, sizeof(tempAddress), NULL)) 
{ 
    cout << tempAddress << endl; 
} 
//in this specific case the tempAddress is 1BD5679 (or 29185657) but actually it should be 3E7D4FE0 (see (*)) 

(*)Cheat Engine Result

;:ここに関連するコードです符号なし__int64 tempAddressに; tempAddressは1953A4A0002C88A5(または18249832811198240377)です。

この問題を解決する方法はありません。私はかなりDWORDサイズよりも大きいベースアドレスを処理する方法があると確信していますが、私はあまりにも愚かであることを知るために愚かです。

私はすべての助けに感謝しています!

答えて

0

プログラムを64ビットバイナリとしてコンパイルしていますか? 32ビットとしてコンパイルしている場合は、LPVOIDへのキャストは実際にはポインタを32ビット値に切り詰めるので、間違ったアドレスを読み取るだけです。

関連する問題