Linux中进程的代码段的位置在哪里?

Linux中进程的代码段的位置在哪里?

我想在进程关闭时恢复堆栈和堆。因此,如果二进制文件保持不变,我必须确保函数的地址每次启动时都保持不变。

有没有人可以帮忙?

答案1

如果启用了地址空间布局随机化(大多数当前 Linux 系统都是这种情况),那么每次加载二进制文件时函数地址都不会保持不变。应用了各种不同的布局随机化,如果二进制文件与位置无关,则可以应用所有这些布局随机化;特别是,库 ASLR 意味着库每次都加载到不同的位置,而执行 ASLR 意味着位置无关的二进制文件每次也加载到不同的位置。

Ubuntu 维基对不同的可能性有一个很好的总结;它们不是特定于 Ubuntu 的。

您可以通过更改设置来禁用所有这些(不推荐)/proc/sys/kernel/randomize_va_space:0 将禁用 ASLR。

相关内容