Ubuntu 16.10在运行时随机化函数地址

时间:2016-11-09 16:25:02

标签: linux ubuntu gcc

我使用-finstrument-functions来分析函数的入口和出口。在函数进入和退出时,我打印输入或退出的函数的地址(参数func),然后使用nm来解析地址到符号名称的转换。升级到Ubuntu 16.10之后,我意识到func参数的地址总是非常高;所有函数都接近于进程地址空间的开头,正如文本部分所期望的那样。我看了/ proc / PID / maps,文本部分现在实际上是从更高的地址开始,这很奇怪,因为它们与nm显示的范围完全不同,因此直接翻译不再起作用。地址不仅要高得多,而且还要随机化。而且,我很难理解:出于安全原因,我理解随机化可写部分的地址,但文本部分是不可写的。在任何情况下,我的问题是关于文本部分的地址空间:任何想法在Ubuntu 16.10上发生了什么,以及如何禁用此行为?

编辑:原来Canonical添加到GCC默认位置无关的可执行支持。我还在寻找如何禁用它。

感谢。

1 个答案:

答案 0 :(得分:0)

在ChangeLog的GCC部分(见https://wiki.ubuntu.com/YakketyYak/ReleaseNotes

“我们已经在amd64和ppc64el架构上将GCC修改为具有位置无关可执行支持的默认编译程序,以提高地址空间布局随机化提供的安全性优势。”

我阅读了GCC的手册页,要禁用此选项,只需添加-no-pie。