【问题标题】:What is the base / static address for variables in a program?程序中变量的基址/静态地址是什么?
【发布时间】:2014-08-05 06:09:57
【问题描述】:

我正在对黑客进行一些研究,并且发现了一些关于内存黑客的作弊引擎教程。 如果我们想找到变量的内存地址,我们必须使用作弊引擎扫描进程的内存以找到地址。但是,由于这些地址是动态的,所以每次运行这个游戏的新进程时,地址都会改变。

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

操作码 [esi + 偏移量]

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

但是这是如何工作的呢?

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

【问题讨论】:

  • 我想确保我明白:你问的是“一些作弊引擎”是如何工作的?
  • 更多基指针的工作原理

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


【解决方案1】:

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

【讨论】:

    猜你喜欢
    • 2015-10-25
    • 2017-03-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-12-19
    • 2014-09-24
    相关资源
    最近更新 更多