我指向struct
,0xB7CD98
。并且偏移到某个浮点值0x540
。如何获得这个价值。所有它都在C ++和汇编程序中。另一件事是它的代码从我的dll注入exe。
float buffer ;
_asm {
MOV EAX, [0xB7CD98]+0x540
MOV buffer, EAX
}
但这不起作用。为什么呢?
答案 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]