【问题标题】:Pointer to struct with offset指向带有偏移量的结构的指针
【发布时间】:2012-03-24 09:33:42
【问题描述】:

我有一个指向struct 的指针,它是0xB7CD98。以及某个浮点值0x540 的偏移量。如何获得这个值。所有它都在 C++ 和汇编程序中。另一件事是它的代码从我的 dll 注入到 exe。

        float buffer ;

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

但这行不通。为什么?

【问题讨论】:

    标签: c++ pointers assembly


    【解决方案1】:

    您为什么要为此使用 Assembly?

    float* pBuffer = (float*)(0xB7CD98 + 0x540)
    
    printf("%f", *pBuffer);
    

    【讨论】:

    • 它不起作用,地址 '0xB7CD98' 是指向我在游戏文档中找到的某个游戏结构的指针。附加信息,当我使用像作弊引擎这样的程序并输入手动地址时,有类似pointer 我输入指针地址和偏移量,然后它给了我价值。
    【解决方案2】:

    反汇编代码:

    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]  
    

    【讨论】:

      猜你喜欢
      • 2011-08-02
      • 2013-05-30
      • 2012-02-07
      • 2018-08-28
      • 2019-06-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多