指向带偏移的struct的指针

时间:2012-03-24 09:33:43

标签: c++ pointers assembly

我指向struct0xB7CD98。并且偏移到某个浮点值0x540。如何获得这个价值。所有它都在C ++和汇编程序中。另一件事是它的代码从我的dll注入exe。

        float buffer ;

    _asm {
        MOV EAX, [0xB7CD98]+0x540
        MOV buffer, EAX
    }

但这不起作用。为什么呢?

2 个答案:

答案 0 :(得分:0)

你为什么要使用Assembly?

float* pBuffer = (float*)(0xB7CD98 + 0x540)

printf("%f", *pBuffer);

答案 1 :(得分:0)

反汇编代码:

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]