2008-10-15 199 views

回答

65

您可以通過Hex-Rays使用IDA Pro。除非編譯調試信息,否則通常不會從二進制文件中獲得良好的C++。準備花費批號手動反轉代碼。

如果你沒有去掉二進制文件,那麼IDA Pro可以生成類似C代碼的代碼供你使用。通常情況下,這是非常粗糙的,至少在幾年前我使用過它。

+17

爲了澄清,IDA只會給予反彙編。還有一個名爲Hex-Rays的附加組件,它將盡可能反編譯爲C/C++源代碼。 – davenpcj 2012-05-05 12:55:10

+1

對於我閱讀的文檔,十六進制光線只輸出C像僞代碼。這並不是說它對反編譯C++毫無用處,你只需要瞭解一些編譯器如何轉換C++結構。 – 2013-04-11 05:32:02

+0

要澄清更多,反彙編是可以用Hex-Rays反編譯的最多將ASM轉換爲C++ ASM可以轉換爲任何編程語言,因爲所有程序都可以作爲ASM運行 – 2014-04-12 12:08:30

17

是的,但他們都不會設法產生足夠可讀的代碼,以付出努力。您將花更多時間嘗試使用內部的彙編程序塊來讀取已反編譯的源代碼,而不是從頭開始重寫舊的應用程序。

18

信息在編譯過程中被丟棄。即使反編譯器可以用類和所有東西(它可能不能)產生邏輯等價的代碼,但自編文件的部分在優化的發佈代碼中不見了。沒有變量名稱,沒有例程名稱,沒有類名 - 只是地址。

3

根據原始代碼的大小和編寫得怎麼樣,使用您最喜歡的語言(可能仍然是C++)重新開始,並從最後一個版本中的錯誤中學習。有沒有人曾經說過寫一個扔掉?

n.b.顯然,如果這是一個巨大的產品,那麼它可能不值得花時間。

5

我還沒有看到任何生成C++代碼的反編譯器。我已經看到了一些能夠合理地嘗試生成C代碼的實驗,但它們傾向於依賴於匹配特定編譯器的代碼生成模式(這可能已經改變了,自從我上次研究這個以來已經有一段時間了) )。當然,任何符號信息都將消失。谷歌的「反編譯」。