[英]Given a fully linked a.out, which defines symbol foo, how can I tell which object file that definition came from, without relinking the a.out?
我正在嘗試解析ELF文件並創建在每個目標文件中定義的符號列表。 除了符號和目標文件之間的鏈接,我能夠找到我需要的所有內容。
我在ELF規范中找不到類似的內容。 在這個特定的文件中,我正在解析我可以使用的一些嵌入式DWARF調試信息,但理想情況下,我想在符號和對象之間找到一個標准的鏈接,因為我想將此鏈接應用於許多非GCC編譯器。
我正在嘗試解析ELF文件並創建在每個目標文件中定義的符號列表。
您正在處理單個 ELF對象文件,還是完全鏈接的可執行文件或共享庫? 因為讓您的問題有意義的唯一方法是后者,所以我們假設您的實際問題是:
給定一個完全鏈接的定義符號foo
a.out
,如何在不重新鏈接a.out
情況下知道該定義來自哪個目標文件? 。
一般來說,您不能。
首先,在不限定每一個符號a.out
甚至可能來自一個對象文件:一些可通過接頭腳本或定義--defsym
命令行參數。
其次, 弱符號可以在多個目標文件中定義,鏈接器可以自由選擇它們中的任何一個。
最后,在a.out
絕對沒有目標文件->符號關聯的記錄。 實際上,您甚至無法提取鏈接到的.o
文件列表(無需重做鏈接並要求鏈接器將其打印)。
您可以通過查看調試信息來重新建立此關聯,該調試信息將告訴您該符號來自哪個翻譯單元,然后猜測foo.c
可能已編譯為foo.o
,但這又可能會失敗為foo.c
可能已被編譯成bar.o
和baz.o
(具有不同-DFOO
定義)。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.