我試圖找到我的原生Android庫的代碼在進程的地址空間中佔用的地址範圍。我正在閱讀和解析/proc/self/maps
。圖書館有兩部分。一個是代碼,另一個是數據,我猜。我需要將他們分開。然而,它們之間的區別是,有點環境。在Android 2.3.3上測試。好的方法來識別/ proc/*/maps中的代碼段
代碼段的權限是r-xp,數據是rwxp - 兩者都是可執行的。基於可寫性的決定,我感到不自在 - 如果在同樣的Android版本中,只讀數據部分會怎麼樣?
另一個區別是映射部分相對於文件的偏移量 - 代碼段的偏移量爲0.再次,如果鏈接器的某些迭代將數據放在代碼之前會怎麼樣?
與GDB和Android的stack walker一樣,這些工具告訴我代碼地址屬於哪個模塊,它在庫中的偏移量沒有問題。只是在說'。
編輯:在Android 4.0上,部分是不同的:有r-xp,r-p,rw-p。因此,我可以輕鬆識別可執行部分的故障診斷 - 但早期的Android會怎麼樣?
我的代碼和數據都沒有可執行標誌。 – auselen 2013-02-28 14:45:43
可能不同的Android版本... – 2013-02-28 16:07:07
我認爲檢查'x'標誌是公平的。 – auselen 2013-03-01 12:03:37