ハードコーディングされたアドレスを取得し、見た値が保持されることを期待しています。ただし、これにはいくつかの問題があります。
自分のプロセスについて心配している場合は、そのメモリを所有する必要があります。あなたが割り当てnew
たものなどは、そのアドレスを奪ったほうがいいです。そうしないと、何が起こるかわかりません。例えば:
int *someAddress = new int (5);
int *somePtr = someAddress; //point to same address as newed
int someInt = *somePtr; //someInt is 5
++somePtr; //uh-oh, now we've left what we newed; it might not be allocated
someInt = *somePtr; //there's no telling if that memory was ok to use
たまたまうまくいった場合は、乱数を取得するだけです。実際、十分に長くループすると、最終的にクラッシュします。しかし、問題があっても、ここでは直接関係しません。
最大の問題は、同じアドレスを持っていても、同じメモリではないことです。これは紛らわしいかもしれませんが、非常に優れたトピックです ( http://en.wikipedia.org/wiki/Virtual_address_space )。基本的に、各プロセスは同じアドレス値を持ちますが、実際のメモリでは異なる領域にマップされます。したがって、ハードコードされたアドレスはプロセスにのみ関係します。
少なくとも Windows で他のプロセスのメモリを調べる方法の 1 つは、ReadProcessMemoryを使用することです。PROCESS_VM_READ
このページでは、読み取り元のプロセスに対する特権を持っているなどの要件を確認できます。GetLastError
失敗するかどうかも確認してください。ここにちょっとした例があります。
VirtualQueryExも、 を呼び出す前に調べておくとよいことに注意してくださいReadProcessMemory
。
うまくいくかもしれませんし、うまくいかないかもしれませんが、他のプロセスのメモリ空間をいじるには、私が知っている最高のものです。これを達成したいなら、試してみる価値があります。