我是計算機科學專業的學生。作爲我的主項目的一部分,我試圖攔截Android平臺上本地庫中函數的調用。目標是決定是否允許該呼叫或拒絕該呼叫以提高安全性。Android:我如何攔截本地函數調用?
繼研究論文1的方法之後,我想修改ELF文件的Procedure Procedure Linkage Table(PLT)和Global Offset Table(GOT)。我的想法是,我想讓所有的函數調用指向我自己的攔截函數,它決定是阻止調用還是傳遞給原始目標函數。 (在第三章,第2章程序加載和動態鏈接,第2-13頁,「全局偏移表」和「程序鏈接表」一節)中指出,PLT的實際內容和形式與GOT取決於處理器。但是,在文檔「ARM體系結構的ELF」3中,我無法看到這兩個表中的任何一個的確切規格。我現在專注於ARM,目前還沒有考慮其他架構。
我有3個問題:
- 我該如何映射一個符號,一個GOT或PLT入口?
- 在哪裏可以找到GOT的ARM處理器的確切規格和PLT?
- 作爲PLT包含機器代碼;我將不得不解析該代碼以修改目標地址,還是所有PLT條目看起來都是相同的,這樣我纔可以爲每個PLT條目以不變的偏移量修改內存?
感謝, 曼努埃爾
感謝什麼,那第二個鏈接似乎真的很有趣。而且我不知道符號的_index_與GOT條目的_index_匹配。這是一個非常有價值的信息。 我會嘗試你的建議,如果我成功了,我會接受你的答案。 – fritteli
我已經將ELF文件的內存轉儲與其表示形式作爲文件在磁盤上進行了比較。從我看到的.rel.plt部分是相同的(對於我測試的文件沒有.rela.plt)。不同之處在於.got,它顯然是GOT。 – fritteli