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*内存中的a,我可以ReadProcessMemory获取数据,但是我可以用另一种方式吗?

我试过做:

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

但它不工作,

我在这里错过了什么吗?

4

2 回答 2

3

嗯,这段代码看起来很脏。是拆机还是什么?

无论如何,该值a1似乎是一个用作int. 你有这个:

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

那就是从指向的内存位置获取第一个_BYTEa1并将其存储在指向的内存位置中a3

如果您想获取指针本身,请不要取消引用它:

BYTE *data = (BYTE*)a1;

您在这里所做的只是将整数类型转换为 a BYTE*(我假设它与 相同_BYTE)。

现在您可以像引用数组一样引用BYTEdata(假设内存实际分配给您的进程):

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 回答