2017-09-24 201 views
0

当我运行程序'A'时,堆栈和虚拟地址被改变,虽然 我运行相同的程序'A'。为什么栈,堆的虚拟地址每次都改变?

我知道堆栈的虚拟地址没有在 可执行文件(elf格式)中定义。他们是可变的东西。我可以通过'readelf -l'命令检查出来。

但是, 为什么kernal每次都必须更改堆栈的地址,尽管运行相同的程序? 这是我为什么这样问的原因。

我正在制作一个简单的进程模拟器。 我试图效仿在intel cpu环境(64位)raspbian(32位)编程。因此,我不得不设计32位堆栈。但我不知道我是如何模拟堆栈系统的。

我mmaped匿名页,然后我必须使用它作为一个堆栈来模拟程序。 我必须模仿程序(32位)使用堆栈的方式。但是程序的堆栈虚拟地址在每个运行时间都会改变。我需要帮助。

回答

0

它可以是操作系统使地址空间随机化在堆栈中,堆以避免安全漏洞。 如果攻击者知道总是为进程找到这些信息,那么对系统造成伤害会更容易。

+0

你能推荐我怎样才能在模拟arm-cpu 32位程序的模拟器中决定堆栈基址? –

+0

哪个模拟器是这个?一些公众可用或自己开发? – dpetrini

+0

嗨!我自己就是一个简单的模拟器。这个程序是单进程模拟器。 –

相关问题