2013-05-03 38 views
12

我目前使用LLVM'sObjectFile(記錄的here)來表示可執行文件。我已成功讀取了一個可執行文件到ObjectFile,並且想要確定我的可執行文件中的哪些呼叫目標地址對應於通過調用begin_dynamic_symbols()函數獲得的symbol_iterator中包含的符號名稱。遍歷symbol_iterator中的每個符號給出了每個符號的名稱及其地址,但由於符號是動態的,因此每個符號的地址爲-1;這表示ObjectFile不直接將符號名稱與其相應的呼叫目標地址相關聯。使用LLVM的可執行文件的動態符號分辨率

有什麼方法可以確定哪個呼叫目標地址映射到ObjectFile中的哪些動態符號?如果我可以避免這樣做,我寧願不手動計算通過PLTGOT的所有跳轉。

+0

我想你應該在cfe-dev郵件列表上提問:http://lists.cs.uiuc.edu/pipermail/cfe-dev/ – 2013-05-12 18:51:16

回答

1

動態符號的地址僅在目標文件被加載到內存中並鏈接到程序的符號表中時才被計算。一般來說,在鏈接之前不可能確定他們的最終地址。

您可以使用LLVM的鏈接時間優化模塊而不是ObjectFile獲取所需數據,因爲如果我正確記得,它在加載模塊時確實會執行地址鏈接。

祝你好運!

相關問題