2017-08-12 14 views
0

添付されたプロセスのベースアドレスを取得するのにDWORD BaseAddress = (DWORD)GetModuleHandle("example.exe");を使用しています。私が使用しているすべてのアドレスはDWORD型で、アドレス番号の前に0xを使用しているので、16進数で10進数ではありません。私はx64コンピュータを使用しています。私が読んでいるこれらのアドレスの両方にテキスト値が含まれています。C++ ReadProcessMemoryベースアドレス+オフセットが動作しない

このコードは、静的アドレスのために働く:

ReadProcessMemory(pHandle, (LPVOID)Address1, (LPVOID)&Address1Value, sizeof(Address1Value)*3, 0); 
char PlayerNameBuffer[13] = {0}; 
snprintf(Address1Buffer, sizeof(Address1Value)*3, "%s", (LPVOID)&Address1Value); 
ImprovedSetWindowText(Address1DisplayLabel, Address1Buffer); 

なぜしないのダイナミックアドレス?:

DWORD Address2 = BaseAddress + Addres2Offset; 
ReadProcessMemory(pHandle, (LPVOID)Address2, (LPVOID)&Address2Value, sizeof(Address2Value)*3, 0); 
char LocationNameBuffer[13] = {0}; 
_snprintf(Address2Buffer, sizeof(Address2Value)*3, "%s", (LPVOID)&Address2Value); 
ImprovedSetWindowText(Address2DisplayLabel, Address2Buffer); 
+0

「Address2Offset」はどのように取得されますか?ここでは問題はないと思っていますが、技術的には、プロセスが64ビットのものであれば、アドレスを保持するために64ビットタイプを使用すべきです。 DWORDは32ビット幅です。 –

+0

リバースエンジニアリングして見つけました。私はアドレスを入力して値を表示するために別のソフトウェアを使用していたので、100%の事実は正しいと知っていますが、C++でそれを使うのに問題があります。また、DWORDをDWORD64に変更しても差異はありません。問題は変数型とは関係ありません。 – Dav3

+0

問題が解決しました。私は不適切にGetModuleHandleを使用しています。 – Dav3

答えて

-1

私の問題が解決された、私が使用しているのGetModuleHandleため、この作業不適切に。

+0

誤って使用している次の人は、(1)間違ったコードがあなたのものと一致することを認識し、(2)正しいコードを参照できるようにしてください。 –

関連する問題