【问题标题】:How can I know whether a variable in memory is a pointer or not?如何知道内存中的变量是否是指针?
【发布时间】:2016-12-30 22:50:24
【问题描述】:

我正在寻找指向程序内存中结构的指针,它们彼此相距 4 个字节,但数量可能会有所不同。我很确定在结构之后会出现其他一些不是指针的变量。

我想如果我尝试将下一个变量用作指针并将我正在寻找的结构可以具有的最高偏移量应用于它,GetProcessMemory(我在 c++ btw 中执行此操作)将失败,并且我'我知道这不是我要寻找的东西,并且我要寻找的指向结构的指针“列表”到此为止。

但这似乎不可靠,因为下一个变量的值可能会指向另一个有效结构,而 GetProcessMemory 会NOT失败,所以我想问是否有更好的方法。

CheatEngline 似乎做得非常完美,所以我错过了什么?

提前谢谢你。

【问题讨论】:

  • 没有完全可靠的方法,只有启发式方法,例如结构类型的对齐,以及用于堆和堆栈的地址范围。
  • 可以使用typeid(variables).name()获取类型
  • @Raindrop7 不,你不能。
  • 您是否在使用/不使用调试信息编译的另一个/您自己的程序的内存中进行搜索?你是在程序已经运行的时候挂钩程序,还是自己启动程序?
  • @chtz 另一个,正在运行。

标签: c++ pointers memory struct


【解决方案1】:

指针转换为地址。

地址是数字,就像任何其他数字一样。

如果您知道地址的有效范围,您可能能够增加数字是指针的概率。虽然不能保证。

内存中没有属性可以指定内存位置所代表的用途或类型。

【讨论】:

    【解决方案2】:

    好的,我一直在想。 这是一个函数,所以我会放置一些参数(带有默认值),比如起始内存地址、指针变量之间的距离、最大数量和结构的最大偏移量。有了这些,我可以知道结构的确切每个说“长度”,它从哪里开始,以及它不会在哪里结束。我找到我不想要的东西的机会很小。

    我们的想法是为一个原本不允许的游戏制作一个 hud(也许是一个 hack,因为我以前从未在游戏中真正使用过太多数学 - 这可能很有趣)。所以也许我可以用我拥有的结构数量找到变量的一些偏移量,那么就不会有问题了。

    【讨论】:

      猜你喜欢
      • 2020-08-24
      • 1970-01-01
      • 1970-01-01
      • 2013-10-29
      • 2010-12-05
      • 1970-01-01
      • 2022-11-22
      • 1970-01-01
      • 2012-09-08
      相关资源
      最近更新 更多