-1

我仍在尝试学习如何将 ASM 与 C++ 一起使用,但遇到了一个问题。我要做的就是在程序中读取整数的指针。

写入该整数的程序代码如下:

00A3EB6C - mov [edi+0C],eax

现在,我想做的就是获取该[edi+0C]地址的指针。我想这样做的原因是因为我无法以任何其他方式找到可靠的内存指针。

任何帮助将不胜感激!

很抱歉,如果措辞不好,很难解释。

编辑:我的最终目标是在我的 Windows 窗体标签[edi+0C]中的地址处的指针处显示整数的值。00A3EB6C

我正在使用附加到外部应用程序的 DLL,只是为了澄清。

4

1 回答 1

1

所以大概,你有一些这样的功能:

void func(...)
{
    asm {
      ... 

      mov [edi+0xc], eax
      ... 
    }
}

现在,要从函数中获取 eax 的值,您需要传入一个指针

void func(..., int *ptr)
{
    asm {
       ... 

       mov [edi+oxc], eax
       mov [ptr], eax
       ... 
    }
 }

或者您可以将其用作返回值:

int func(...)
{
   int ret;

   asm {
       ... 

       mov [edi+oxc], eax
       mov [ret], eax
       ... 
    }

   return ret;
}

可能还有其他选择,但这些是最简单的。

如果你真的想得到一个指向 edi 的指针,你会使用指向指针的指针作为参数 [或作为返回值的指针 - 所以我只会向你展示指向指针的指针,因为返回值完全遵循与上述相同的模式]

void func(..., int **ptr)
{
    asm {
       ... 

     // Assumes eax isn't used elsewhere below! 
     // Otherwise, find another free register. 
       mov [edi+oxc], eax
       lea [edi+0xc], eax      // LEA = load effective address. 
       mov [ptr], eax
       ... 
    }
 }
于 2013-01-01T11:03:14.317 回答