そのため、最近、私は WinAPI を扱っておりWriteProcessMemory
、ReadProcessMemory
どちらもLPVOID
2 番目の引数として、読み取りたい別のプロセスのメモリ内の実際のアドレスを受け取ります。
それを考慮すると、この整数からポインターへの変換は正しいC++コードになります(未定義の動作などはありません):
#include <windows.h>
int main()
{
WriteProcessMemory(/*...*/,
//want to read from memory address 0x1234 in the target process
reinterpret_cast<void*>(static_cast<uintptr_t>(0x1234)),
/*...*/);
return 0;
}
私の知る限り、標準でuintptr_t
は、ポインターの値を変更せずにポインターを保持できる整数型であると言われています。整数なので、0x1234 を格納できるはずです。標準では、reinterpret_cast
an uintptr_t
to avoid*
を使用しても値が変更されないことも示されています。