2010-12-04 78 views
1

我有一些PPC代碼,我想轉換回它的原始C代碼,有沒有辦法做到這一點?可能是一個人(比如知道PPC重建C代碼的人)或程序?是否可以將PPC程序集轉換爲C?

+0

PPC和PowerPC一樣嗎? – ruslik 2010-12-04 01:11:48

+0

是的,PowerPC組件。 – user330416 2010-12-04 01:12:22

+5

由於編譯爲機器代碼是一個有損耗的過程,因此無法獲取*原始* C。沒有1對1的對應關係。然而,Power的反彙編/反編譯器不在我的專業範圍之內。 – SingleNegationElimination 2010-12-04 01:14:58

回答

1

是的,沒有。

原則上可以將任何語言的程序翻譯成任何其他語言。結果不會很漂亮。

如果現有的代碼真的是編譯的結果,沒有太多的巧妙的優化,那麼很可能是一個相當死板的過程可以把它轉回到C.這往往是直接手工處理少量的代碼,但對於大型代碼庫來說卻很乏味且容易出錯。

有一些逆向工程工具在野外有關反編譯的聲明。在一般情況下,這不是一個簡單的問題。

使問題自動化的一種方法是爲已經支持C語言後端的編譯器創建PPC彙編(甚至二進制)前端。其結果是一個交叉編譯器讀取PPC代碼併產生高度混淆的C代碼。例如,我知道GCC有一個C後端。

無論您採取什麼方法,對於現有二進制文件,您都有一個良好的測試套件(以及運行它的能力)可能很關鍵,這樣您就可以證明翻譯是等同的。

編輯:請注意,您將永遠不會收到原始評論,並且只能訪問使其成爲符號表或類似調試信息的原始變量和函數名稱。

0

不可以。反編譯與獲取c不同。你永遠無法得到c回來。您可以嘗試對其進行逆向工程,試圖瞭解它在做什麼,但是一些信息會永久丟失。

這是自食其果項目:

然而,一般的反編譯器不會試圖扭轉反編譯的每一個動作,而是反覆地將輸入程序,直到結果是高層次的源代碼。因此不會重新創建原始源文件; 可能沒什麼喜歡它。

所以產生了一些C代碼可能是(但永遠不會知道)C源代碼。

相關問題