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”是指向某个游戏结构的指针,我在游戏文档中找到了它。另外,当我使用诸如作弊引擎和键入手动地址之类的程序时,会有类似于
指针的内容
我键入指针地址和偏移量,然后它会给我值。