Указатель на структуру со смещением - PullRequest
0 голосов
/ 24 марта 2012

У меня есть указатель на struct, его 0xB7CD98.И смещение до некоторого значения с плавающей точкой 0x540.Как получить это значение.Все это на C ++ и ассемблере.Другое дело, что этот его код из моей dll введен в exe.

        float buffer ;

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

Но это не работа.Почему?

Ответы [ 2 ]

0 голосов
/ 05 апреля 2012

Разборка вашего кода:

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]  
0 голосов
/ 24 марта 2012

Почему вы используете сборку для этого?

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

printf("%f", *pBuffer);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...