2016-11-09 50 views
-1

我正在使用-finstrument-functions來剖析函數的入口和出口。在函數進入和退出時,我打印輸入或退出函數的地址(參數func),然後使用nm將地址解析爲符號名稱轉換。升級到Ubuntu 16.10後,我意識到func參數的地址總是很高,所有函數都用於接近過程地址空間的開始,正如文本部分的預期一樣。我查看了/ proc/PID/maps,文本部分現在實際上是從更高的地址開始的,這很奇怪,因爲它們與nm顯示的範圍完全不同,所以直接翻譯不再有效。地址不僅更高,而且也是隨機的。而這一點,我很難理解:出於安全原因,我理解隨機化可寫部分的地址,但文本部分不可寫。無論如何,我的問題是關於文本部分的地址空間:任何想法在Ubuntu 16.10上發生了什麼,以及如何禁用此行爲?Ubuntu 16.10在運行時隨機化函數地址

編輯:原來Canonical添加到默認位置獨立可執行文件支持GCC。我仍在搜索如何禁用此功能。

謝謝。

+0

我也遇到了這個問題:http://stackoverflow.com/questions/41890103/addr2line-not-woking-on-ubuntu-16-10。 Canonical沒有修改它,但Debian。我曾嘗試Debian sid並發現這一點。 – noinput

回答

0

在更新日誌的GCC部分(這裏找到:https://wiki.ubuntu.com/YakketyYak/ReleaseNotes

「我們已經修改GCC由默認的編譯程序與位置無關可執行文件支持,AMD64和ppc64el架構,以提高保障待遇由地址空間佈局隨機化提供「。

我閱讀GCC的手冊頁,並禁用此選項,只需添加-no-pie。