C++ 指向带偏移量的结构的指针
我有一个指向结构的指针,它的C++ 指向带偏移量的结构的指针,c++,pointers,assembly,C++,Pointers,Assembly,我有一个指向结构的指针,它的0xB7CD98。以及某个浮点值的偏移量0x540。如何得到这个值。全部在C++和汇编程序中。另一件事是,这是它的代码从我的dll注入到exe float buffer ; _asm { MOV EAX, [0xB7CD98]+0x540 MOV buffer, EAX } 但这是行不通的。为什么?为什么要使用汇编来实现这一点 float* pBuffer = (float*)(0xB7CD98 +
0xB7CD98
。以及某个浮点值的偏移量0x540
。如何得到这个值。全部在C++和汇编程序中。另一件事是,这是它的代码从我的dll注入到exe
float buffer ;
_asm {
MOV EAX, [0xB7CD98]+0x540
MOV buffer, EAX
}
但这是行不通的。为什么?为什么要使用汇编来实现这一点
float* pBuffer = (float*)(0xB7CD98 + 0x540)
printf("%f", *pBuffer);
反汇编代码:
0FB310E7 mov eax,0B7D2D8h;
0FB310EC mov dword ptr [buffer],eax
//It just fill 'buffer' with 0xB7CD98+0x540
你真正想要的是:
DWORD basePtr = *(DWORD*)0xB7CD98;
float someVal = *(float*)(basePtr + 0x540);
或者,如果希望获得指向此值的永久指针:
typedef struct _XStruct
{
BYTE fill_0[0x540];
float Value;
}*PXStruct;
//...
PXStruct basePtr = (PXStruct)0xB7CD98;
//0F0745E7 mov dword ptr [basePtr],0B7CD98h
float buffer = basePtr->Value;
//0F0745EE mov eax,dword ptr [basePtr]
//0F0745F1 fld dword ptr [eax+540h]
//0F0745F7 fstp dword ptr [buffer]
它不工作,地址“0xB7CD98”是指向某个游戏结构的指针,我在游戏文档中找到了它。另外,当我使用诸如作弊引擎和键入手动地址之类的程序时,会有类似于
指针的内容
我键入指针地址和偏移量,然后它会给我值。