2012-03-24 132 views
-1

我有一个指向struct,它的0xB7CD98。和一些浮点值的偏移量为0x540。如何获得这个值。所有它的C++和汇编程序。另一件事是,这是从我的DLL注入到EXE的代码。带偏移量的结构指针

 float buffer ; 

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

但它是行不通的。为什么?

回答

0

你为什么使用Assembly?

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

printf("%f", *pBuffer); 
+0

它不起作用,地址'0xB7CD98'是指向某些游戏的指针e结构我在游戏文档中找到它。额外的信息,当我使用像欺诈引擎和类型手动地址这样的程序有像'指针'我键入指针地址和偏移量,然后它给了我价值。 – user1278659 2012-03-24 13:46:28

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]