2010-03-24 58 views
20

是否有對二進制源文件的引用?我試圖在二進制文件上運行字符串,並找不到任何對所列源文件的引用...objdump如何使用-S選項管理顯示源代碼?

+0

好問題,可憐的答案(至今)。另請參閱[如何使用GCC獲取與彙編輸出內聯的源代碼行](https://stackoverflow.com/q/2412816/608639) – jww 2017-09-01 21:09:21

回答

23

objdump使用DWARF調試信息編譯到引用源文件名的二進制文件中。如果二進制文件不是用調試信息編譯的,或者objdump找不到源文件,那麼您的輸出組件中沒有源代碼。

當您在二進制文件上使用strings時,您看不到源文件名,因爲DWARF使用壓縮。

+0

您是說我們必須在啓用了矮化調試的情況下進行編譯,然後使用' objdump'(帶有一些未知選項)顯示與反彙編交錯的源代碼?你能提供實際的步驟與實際的命令? – jww 2017-09-01 21:08:58

+1

@jww:gcc的'-g'選項可以啓用調試信息,'-S'選項可以讓objdump與源文件交錯。但問題不在於如何做到這一點;提問者已經知道,他們正在問這是如何實現的('objdump'如何找到交錯的源)。 – caf 2017-09-02 02:39:13

8

二進制文件中的矮小信息存儲指令(指令指針或IP實際)與源文件和行號之間的映射關係。源文件是使用完整路徑指定的,因此即使二進制文件被移動,也可以找到它。要查看此信息,您可以使用objdump --dwarf=decodedline <binary>(課程的二進制文件必須編譯爲-g)。

一旦你說objdump -S <binary>它使用這個矮人信息給你的源代碼以及反彙編。

+0

也許你應該提供一個生動的例子。我無法'objdump'提供交錯的源代碼行號的反彙編。 – jww 2017-09-01 21:08:41

3

我的理解是,要從objdump顯示二進制代碼的源代碼,有一個前提條件:DWARF調試信息必須編譯到二進制文件中。 (由gcc -g sourcefilegcc -gdwarf-2 sourcefile) 而通過處理此DWARF信息objdump能夠獲得源代碼@ vlcekmi3和@vkrnt回答

+0

你是說我們必須在啓用矮小調試的情況下進行編譯,然後使用'objdump'(有一些未知選項)來顯示與反彙編交錯的源代碼?你能提供實際的步驟與實際的命令? – jww 2017-09-01 21:05:39