我正在使用-finstrument-functions來剖析函數的入口和出口。在函數進入和退出時,我打印輸入或退出函數的地址(參數func),然後使用nm將地址解析爲符號名稱轉換。升級到Ubuntu 16.10後,我意識到func參數的地址總是很高,所有函數都用於接近過程地址空間的開始,正如文本部分的預期一樣。我查看了/ proc/PID/maps,文本部分現在實際上是從更高的地址開始的,這很奇怪,因爲它們與nm顯示的範圍完全不同,所以直接翻譯不再有效。地址不僅更高,而且也是隨機的。而這一點,我很難理解:出於安全原因,我理解隨機化可寫部分的地址,但文本部分不可寫。無論如何,我的問題是關於文本部分的地址空間:任何想法在Ubuntu 16.10上發生了什麼,以及如何禁用此行爲?Ubuntu 16.10在運行時隨機化函數地址
編輯:原來Canonical添加到默認位置獨立可執行文件支持GCC。我仍在搜索如何禁用此功能。
謝謝。
我也遇到了這個問題:http://stackoverflow.com/questions/41890103/addr2line-not-woking-on-ubuntu-16-10。 Canonical沒有修改它,但Debian。我曾嘗試Debian sid並發現這一點。 – noinput