添付されたプロセスのベースアドレスを取得するのに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);
「Address2Offset」はどのように取得されますか?ここでは問題はないと思っていますが、技術的には、プロセスが64ビットのものであれば、アドレスを保持するために64ビットタイプを使用すべきです。 DWORDは32ビット幅です。 –
リバースエンジニアリングして見つけました。私はアドレスを入力して値を表示するために別のソフトウェアを使用していたので、100%の事実は正しいと知っていますが、C++でそれを使うのに問題があります。また、DWORDをDWORD64に変更しても差異はありません。問題は変数型とは関係ありません。 – Dav3
問題が解決しました。私は不適切にGetModuleHandleを使用しています。 – Dav3