【问题标题】:What are static pointers in RAM and how can they exist?什么是 RAM 中的静态指针,它们如何存在?
【发布时间】:2013-07-24 20:14:54
【问题描述】:

我已经通过教程学习 C++ Game Hacking 一两个星期了,我几乎完全掌握了。 然而,总有一些事情一直困扰着我。

要自定义一个值(例如玩家的健康),我们必须使用作弊引擎(或类似的)搜索内存地址并将该值设置为其他值。 每次我们启动程序时,这些内存地址显然是不同的,因为它不会总是使用 RAM 中的同一个位置。

为了解决这个问题,人们会尝试找到一个静态指针指向包含该值的内存地址;指针是静态的,它们如何从 RAM 中保留静态地址?

【问题讨论】:

  • 使用相同的关键字。如果您声明static Player player;,那么&player 可能始终是同一个虚拟地址。
  • 关键点是虚拟地址(与物理地址相反,用户程序几乎从不关心)。
  • @H2CO3: 或者一个全局变量,它也有静态存储持续时间。
  • 操作系统会为正在执行的进程虚拟定位可用的RAM,因此每次可执行文件运行时,具体的物理地址可能会发生变化。

标签: pointers memory static


【解决方案1】:

其实并不是指向游戏变量的指针是静态的,而是变量地址的偏移量,参考了另一个数据的地址。

如果您要“破解”的游戏始终将数据存储在相同的、可靠的结构中,则可以找到这些偏移量。当您知道偏移量后,游戏开始时您唯一需要做的就是找到偏移量所引用的地址,而不是执行多次扫描 - 每个变量一次扫描。

编辑:

此外,程序很可能在每次运行时都被赋予相同的虚拟地址空间,因此在实践中,每次运行程序时,具有静态偏移量的变量看起来都具有相同的地址(进一步阅读 @987654321 @ 和 there)。

【讨论】:

  • 是的,我删除了C++ 标签。但我还是不太明白;作弊引擎清楚地显示一个绿色的静态地址,即使我重新启动计算机也不会改变......
  • Here 的教程有点长,我在说什么......
  • @MarkusMeskanen:程序很有可能在您每次运行它们时加载到相同的地址,所以这是一个正确的观察。进一步阅读:here.
  • 程序很可能每次运行时都会加载到内存中的相同位置,除非您在刚完成后立即加载相同的程序,这实际上不太可能
  • @podkova,带有虚拟地址,这是真的。不过,我会改写那句话。被加载到内存中的同一个地方可能意味着在物理内存中。相反,您可以说程序很可能在每次运行时都获得相同的虚拟地址空间
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2012-11-11
  • 1970-01-01
  • 1970-01-01
  • 2010-12-18
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多