2012-03-24 3 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 struct Я нахожу его в игровой документации. Дополнительная информация, когда я использую программу, такую ​​как движок чита и тип Manual Adress, есть что-то вроде 'pointer', набирающего указательный адрес и смещение, тогда это дает мне значение. – user1278659

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] 
Смежные вопросы