【发布时间】:2015-04-20 22:56:29
【问题描述】:
我所知道的是你在你试图操纵的软件中寻找一些变量的地址。一旦你找到它,你就会尝试为它找到“基指针”,所以无论进程在哪里,你仍然可以访问这些变量。我的意思是当进程重新启动时,变量会有不同的地址,但你仍然知道他们在哪里 。
现在我不明白为什么会这样?
假设我在 C++ 中这样做:
int *x = (int*)malloc(sizeOf(int));
这不是动态的吗?并且不应该将 x 放置在当时免费的“随机”地址中吗? 基本上我要问的是执行该代码时 x 到底在哪里?
编辑:我的意思是,像健康这样的变量通常存储在像 game.exe + 0000caff 这样的地址中,然后你总是可以在那里找到它们。
【问题讨论】:
-
将依赖于操作系统。您没有提供足够的信息让我们告诉您如何“破解”您的目标可执行文件。您可能还需要稍微查看一下汇编程序的输出,以了解事物的存储方式。
-
" 一旦你找到它,你就会尝试找到它的“基指针”,所以无论进程在哪里,你仍然可以访问这些变量。” 可以请提供一个实际示例,
x的值对于重复运行您的过程是如何相同的,请。还要记住,进程的虚拟地址空间之类的概念取决于实际使用的操作系统的策略。 -
编辑了问题,我的意思是为什么 x 地址与进程的偏移量相同,而它应该是动态的?
-
@vlatkozelka:我认为这里有点混乱。
x似乎是一个全局指针,全局变量几乎总是每次都处于相同的偏移量。它指向“当时免费的随机地址”。即使x是函数的局部变量,它们有时也可能每次都以相同的偏移量结束,具体取决于它的编程方式。我所说的一切都有一千个例外,比如Address Space Layout Randomization -
“这不是动态的吗?不应该将 x 放置在当时空闲的“随机”地址中吗?” 是的,但是程序包含一个指针到它...实际上,
*x位于“随机”地址。不是x。