0

重複の可能性:
特定の固定アドレスへのポインター

int a, hex = 0x573285;
int * pA; // Pointer?
*pa = &a; // &a = the hexadecimal-memory location and *pa is now going to point to that place.

だから私は考えました:

たとえば、次のようなものを書くことが可能だとしましょう。

(*hex) = 5; or whatever the hexadecimal number is

メモリの値を変更するには?

そして、私がプログラムを持っていた場合(私はそれを知りません)、それは私のゲームが使用するすべてのメモリ位置を私に示しました。プログラムの値を変更してからゲームに戻った場合、それはそこでも変更されますか?(ゲームが実行されている場合)。

とは(*this) the same as (this*)

編集:これは動作します

int a = 5, b=0x28ff1c;
int* c = &a;
cout << *(c);

だがしかし:

int a = 5;
int * b=0x28ff1c;
int * c = &a;
cout << *(b);

または:

int a = 5, b=0x28ff1c;
int * c = &a;
cout << *(b);

私がやろうとしていることがわかりますか?

4

1 に答える 1

2

たとえば、次のようなものを書くことができるとしましょう:

(*hex) = 5; or whatever the hexadecimal number is

メモリの値を変更するには?

標準は必ずしもその能力を保証するものではありませんが、多くのシステムでは次のように記述できます。

*((int *) hex) = 5;

hexpointer-to- として「キャスト」し、intそのポインターを逆参照して to を設定しますint5もちろん、値hexが書き込み可能なメモリ位置を実際に参照していることが条件です。ただし、言うまでもなく、実際に使用する予定のプログラムでは、これを行うべきではありません。

私がプログラムを持っていた場合 (私はそれを知りません)、それは私のゲームが使用するすべてのメモリ位置を示しました。プログラムで値を変更してからゲームに戻った場合、そこでも変更されますか? (ゲームが実行中の場合)。

これは組み込みシステムではよくあることですが、通常のオペレーティング システムを搭載した最近のマシンでは、仮想メモリ仮想アドレス空間が使用されているため、一般的にはそうではありません。何が起こるかというと、プロセスは通常、使用しているメモリの実際の物理メモリの場所を知りません (存在する場合でも)。代わりに、ポインターに格納される値は「仮想」であり、プロセスに依存します。2 つのプロセス0x12345678は、完全に別々のメモリ位置にマップされているため、互いに何の関係もありません。

于 2012-12-30T04:19:01.870 に答える