2011-01-26 77 views
4

我正在四處尋找,並發現了一個可執行文件,用於我在8年前在Visual C++ 6.0中編寫的內容。我從不備份源代碼,但我認爲我總是以調試模式編譯所有內容。我還隱約記得在某處聽到「除非你有你的編譯器的調試符號或其他東西,否則你不能將可執行文件反編譯成源代碼。」該代碼會有感傷的價值,但它不是關鍵任務,我檢索它。您可以從調試編譯的二進制文件中檢索源代碼嗎?

這就是背景;下面是問題:

  1. 如何檢查可執行文件是否在調試模式下編譯?
  2. 如果是,調試模式可執行文件帶有哪些信息?
  3. 我可以檢索完整的源代碼嗎?否則,與發佈版本相比,反編譯時可以得到實質性改進嗎?如果是這樣,怎麼樣?

感謝,

邁克爾 - 比爾格

+0

退房http://stackoverflow.com/questions/947401/anything-wrong-with-releasing-software-in-debug-mode – 2011-01-26 15:14:54

回答

2
  1. 我不相信有一個標誌,儘管你可能會發現,通過使用PEDUMP將轉儲COFF格式的文件(EXE的Windows和DLL)的東西。通過運行Dependecy Walker並查看您的EXE是否鏈接到任何調試DLL(後綴爲D,例如MSVCRT5D.DLL),您可以推斷是否編譯了可執行文件以進行調試。

    在VC6中的FYI調試和發佈是簡單的命名構建,而不是每種方式的模式,每個構建一個編譯器和鏈接器設置的集合。 EXE只是代碼,調試通常不會被優化,這使得使用調試器很容易(與調試優化代碼相比)。因此,您可以使用調試符號編譯Release二進制文件,這有時可用於跟蹤優化的代碼錯誤。

  2. 調試EXE和DLL不包含任何調試信息,而是有一個邊車PDB文件駐留在同一個文件夾中,幷包含編譯期間生成的所有調試符號信息。

  3. 不,源是源代碼,沒有編譯到符號文件或可執行文件中。有一些令人驚歎的反編譯器可以重新生成你的代碼的體面的C版本,但它們只有在C有多好時,纔會令人驚歎,而不是它們能夠如何重新創建源代碼。

-2

我認爲,許多反彙編可以顯示來源,如果一個二進制文件在調試模式下編譯。例如,我使用OllyDBG,它有一個選項來顯示源代碼,儘管我從來沒有嘗試過。

+1

當模塊被編譯源文件的位置嵌入。如果源文件不存在於該位置,則不能查看源代碼... – 2011-01-26 15:15:27

0

使用Visual Studio,恐怕你不能,因爲調試可執行文件不包含源代碼。 Visual Studio生成的pdb文件只包含二​​進制文件和源文件名和行號之間的映射,但您仍然需要源代碼。這可能與gcc不同,我認爲gcc將源碼本身集成到二進制文件中。

+0

gcc不會將源代碼集成到二進制文件中,它會使用file:line註釋代碼,儘管 – Hasturkun 2011-01-26 15:23:00

+0

@Hasturkun好。因此,與Visual Studio構建唯一的區別是,文件:行信息直接在二進制文件中,而VS使用單獨的pdb文件? – tibur 2011-01-26 15:26:12

相關問題