2012-03-24 16 views
-1

Ich habe einen Zeiger auf struct, seine 0xB7CD98. Und der Offset zu einem Float-Wert 0x540. Wie bekomme ich diesen Wert? Alles in C++ und Assembler. Eine andere Sache ist, dass dies der Code von meiner DLL in exe injiziert wird.Zeiger auf Struktur mit Offset

 float buffer ; 

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

Aber es ist nicht funktionieren. Warum?

Antwort

0

Warum verwenden Sie Assembly für das?

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

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

Es funktioniert nicht, dass die Adresse '0xB7CD98' Zeiger auf einige Gam ist Die Struktur finde ich in der Spieldokumentation. Zusätzliche Informationen, wenn ich Programm wie Cheat-Engine benutze und Manual Address eintippe, gibt es so etwas wie "Zeiger", wenn ich die Zeigeradresse und den Offset schreibe, dann gibt es mir einen Wert. – user1278659

0

Zerlegung des Codes:

0FB310E7 mov   eax,0B7D2D8h; 
0FB310EC mov   dword ptr [buffer],eax 
//It just fill 'buffer' with 0xB7CD98+0x540 

Was Sie wirklich wollen, ist dies:

DWORD basePtr = *(DWORD*)0xB7CD98; 
float someVal = *(float*)(basePtr + 0x540); 

Oder, wenn Sie einen permanenten Zeiger auf diesen Wert erhalten möchten:

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] 
Verwandte Themen