程序中变量的基本/静态地址是什么?

时间:2014-06-15 03:51:40

标签: c++ pointers memory memory-management stack

我正在做一些关于黑客攻击的研究,我发现了一些关于内存黑客攻击的Cheat Engine教程。 如果我们想要找到变量的内存地址,我们必须使用Cheat Engine扫描进程的内存以查找地址。但是,由于这些地址是动态的,因此每次运行此游戏的新进程时,地址都会发生变化。

因此,本教程介绍了静态地址,这些地址不会因游戏的每个实例而改变。为了找到这个地址,我们必须反复扫描“访问该地址的内容”,使用上一次扫描中的汇编行中的寄存器来查找下一个地址。 该程序集将采用

的形式
  

操作码[esi + offset]

所以最后,我们得到一个地址和一个偏移量,它恰好是基地址。

但这是如何运作的?

另外,我真的不明白基地址的概念。它是某种程序在内存中加载的相对地址吗?这样,当我们再次加载程序时它不会改变吗?

1 个答案:

答案 0 :(得分:1)

有问题的变量可能存储在运行时动态分配的类中,这就是变量的地址在每次运行时都会发生变化的原因。动态分配,必须引用该地址,这就是静态地址开始发挥作用的地方。在您的示例中,ESI可能已分配了已分配类的基本内存地址,例如使用mov esi, [somevar]语句(其中somevar是包含已分配地址的指针变量)和offset是类中目标变量的字节偏移量。因此,首先找到somevar,然后您可以将其跟踪到目标变量。