1

私はこのような機能を持っています:

int __stdcall sub_57BBD0(int a1, int a2, int a3, char a4)
{
  *(_BYTE *)a3 = *(_BYTE *)a1;
}

*(BYTE*)(a1 + 0) is a pointer to a BYTE*

のポインタから、このポインタが指すデータa1を取得するにはどうすればよいですか?BYTESまたはそれは不可能ですか?、メモリ内をa1指しているので、データを取得できますが、別の方法で取得できますか?BYTE*ReadProcessMemory

私はやってみました:

BYTE *data = *(BYTE*)&a1;

しかし、それは機能していません、

ここで何かが足りませんか?

4

2 に答える 2

3

うーん、このコードはかなり汚いようです。分解か何か?

とにかく、値a1はとして使用されるポインタのようですint。あなたはこれを持っています:

*(_BYTE *)a3 = *(_BYTE *)a1;

これは、を指すメモリ位置から最初の_BYTE値を取得し、それををa1指すメモリ位置に格納することa3です。

ポインタ自体を取得したい場合は、それを逆参照しないでください。

BYTE *data = (BYTE*)a1;

ここで行っているのは、整数からaへの型キャストだけですBYTE*(これはと同じだと思い_BYTEます)。

BYTEこれで、配列であるかのように値を参照できますdata(メモリが実際にプロセスに割り当てられていると仮定します)。

BYTE secondVal = data[1];

等々...

于 2012-12-19T00:49:31.253 に答える
0
BYTE * data = *(BYTE*)&a1;

この行は、整数のアドレスa1を取得し、それをBYTEポインターにキャストし、それを逆参照してその値を取得し、それをdataというBYTEポインターに割り当てることを示しています。

したがって、代わりにこれを実行する必要があります。

BYTE data = *((BYTE *)&a1);
于 2012-12-19T00:44:59.323 に答える