为什么每次都改变栈、堆的虚拟地址?
why stack, heap's virtual address are changed at each time?
当我运行程序'A'时,虽然堆和栈的虚拟地址被改变了
我 运行 相同的程序 'A'.
我知道栈,堆的虚拟地址没有定义在
可执行目标文件(elf 格式)。它们是可变的东西。我可以通过 'readelf -l' 命令查看。
但是,
为什么内核每次都必须更改堆栈的地址,尽管同一个程序是 运行ned?
这就是我这样问的原因。
我正在制作一个简单的流程模拟器。
我正在尝试在英特尔 cpu 环境(64 位)中模拟来自 raspbian(32 位)的程序。
所以,我必须设计32位堆栈。但我不知道如何模拟堆栈系统。
我映射了匿名页面,然后我必须将它用作堆栈来模拟程序。
我必须模仿程序(32 位)使用堆栈的方式。但是程序的堆栈虚拟地址在每个 运行ning 时间都会发生变化。我需要帮助。
可以是操作系统对栈、堆地址space随机化,避免安全漏洞。
如果攻击者知道总是要找到进程的此信息,则可能更容易损害系统。
当我运行程序'A'时,虽然堆和栈的虚拟地址被改变了 我 运行 相同的程序 'A'.
我知道栈,堆的虚拟地址没有定义在 可执行目标文件(elf 格式)。它们是可变的东西。我可以通过 'readelf -l' 命令查看。
但是, 为什么内核每次都必须更改堆栈的地址,尽管同一个程序是 运行ned? 这就是我这样问的原因。
我正在制作一个简单的流程模拟器。 我正在尝试在英特尔 cpu 环境(64 位)中模拟来自 raspbian(32 位)的程序。
所以,我必须设计32位堆栈。但我不知道如何模拟堆栈系统。
我映射了匿名页面,然后我必须将它用作堆栈来模拟程序。 我必须模仿程序(32 位)使用堆栈的方式。但是程序的堆栈虚拟地址在每个 运行ning 时间都会发生变化。我需要帮助。
可以是操作系统对栈、堆地址space随机化,避免安全漏洞。 如果攻击者知道总是要找到进程的此信息,则可能更容易损害系统。