2008-09-04 215 views

回答

9

一般來說,像Java,C#和VB.NET這樣的語言相對易於反編譯,因爲它們被編譯爲中間語言,而不是純粹的機器語言。在他們的IL形式中,它們保留比編譯爲機器語言時的C代碼更多的元數據。

從技術上講,你並沒有得到原始的源代碼,而是一個源代碼的變體,當編譯時,它會給你編譯的代碼。它與源代碼不一樣,因爲註釋,註釋和編譯器指令等內容通常不會被轉入編譯後的代碼中。

0

大多數語言都可以反編譯,但有些反編譯比其他語言更容易。 .Net和Java在可執行文件中提供了關於原始程序的更多信息(方法名稱,變量名稱等),以便您獲得更多原始信息。 (例如,我知道這是一個粗略的簡化),所以反編譯器不會知道什麼東西被調用。但是,儘管如此,你仍然可以獲得程序的一些結構。

0

VB6如果編譯爲P碼也可以使用P32Dasm進行反編譯,以幾乎完整的源代碼,閃存(或動作),也可以使用的東西進行反編譯,以完整的源像Flare

4

託管語言可以很容易反編譯,因爲可執行必須包含大量元數據才能支持reflection
像C++這樣的語言可以編譯爲本地代碼。在編譯\翻譯過程中,程序結構可以完全改變。
編譯器可以輕鬆替換\ merge \刪除部分代碼。原始和編譯(本地)代碼之間沒有1對1的關係。

相關問題