2012-03-24 136 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]