例如我们在Windows XP平台,我们对OllyDbg的程序的,我们期待在指令X。它具有地址0x11111111(例如)。如果我把节目A和不同的计算机上用相同的平台在OllyDbg的运行指令x将具有相同的地址0x11111111? 所以我的问题是:内存地址每次都改变该程序的运行?或者他们在不同的计算机或平台改变了吗?

有帮助吗?

解决方案

取决于系统的架构,但你永远不应该依赖于这些地址是一样的。出于实用目的,答案是否定的。

要回答你的评论,漏洞必须找出他们在哪里。这样做的一个简单的办法是拨打电话并弹出返回地址,像这样的:

  call test_eip
test_eip:
  pop eax

在这种情况下,你必须在eax指令指针。这是用于确定在何处注入的代码是有用的。

当然,你必须去的地步,这是跑,大多使用缓冲区溢出攻击的地步。

维基百科 - 一如既往 - 提供了一个很好的解释和很多链接后看看:的http:// en.wikipedia.org/wiki/Stack_buffer_overflow

其他提示

你看到的是一个虚拟地址。 CPU包含只能由操作系统可见专用寄存器;这些寄存器控制虚拟内存到物理存储器的映射。每次OS切换到一个不同的过程时,它重新编程这些寄存器,使得程序认为其存储器总是在同一个地方。

在使用相同的可执行文件相同的操作系统版本,你可能会,但不肯定,看到相同的代码的地址。不同的操作系统版本,不太可能。

视窗PE二进制文件不与位置无关,这一手段,他们需要假设固定的地址从执行。微软这是否改善的执行性能(在装载时的惩罚成本)。

您二进制文件将永远从那里要执行,DLL的但可能会变得如果他们的preferrered地址媒体链接使用一些其他的代码重新定位。

搬迁是透明的你,会发生什么是Windows二进制文件加载修改你的代码和修复所有的地址,使他们在新的地方工作。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top