2016-10-01 206 views
0

我正在研究在我的Linux Mint 17.3 OS上安裝反彙編程序(或反編譯程序),我想知道反彙編程序和反編譯程序之間的區別。我粗略地瞭解它們是什麼(名稱相當明瞭),但它們仍然有點混亂。反彙編程序如何工作,它與反編譯器有什麼不同?

我讀過反彙編器將程序轉換成彙編語言,我不知道,所以它似乎對我來說毫無用處。我還讀過反編譯器將一個'二進制文件'轉換爲其源代碼。什麼是二進制文件?

顯然,反編譯器不能反編譯爲C,只能Python和其他類似的語言。那麼我怎樣才能將程序轉換成其原始的C源代碼呢?

回答

4

反彙編是一個非常簡單的應用程序,傳送機器碼彙編語言語句 - 該活動是指彙編程序執行,是簡單的,因爲有嚴格的一對一的反向操作機器代碼和程序集之間的關係。反彙編器針對特定的CPU。用於創建可執行文件的原始彙編程序僅具有較小的相關性。

反編譯器旨在將編譯後的高級語言程序從機器代碼重新創建爲其原始格式 - 從而嘗試C或Forth(反編譯器存在的流行語言)編譯器的反向操作。因爲有那麼多的高級語言,所以有很多方法可以在機器代碼中表達原始的高級語言結構(即使是在同一個編譯器中,甚至對於同一種語言和結構甚至是很多不同的策略),甚至不同的策略取決於編譯器的模式和情況),這個操作要複雜得多,並且非常依賴於原始編譯器(甚至可能使用命令行,選擇優化級別和使用版本)。

即使所有這些都適合,反編譯器的大部分工作都是有教育意義的猜測,並且很可能永遠不會達到它能夠以其源代碼形式重建原始程序的程度100% - 它最終會以版本的源代碼可能是原始程序

+0

哦,那現在好多了。那麼這是否意味着應該在編寫程序時獲得一個特定於原始編譯器和命令行的反編譯器(只要它們是已知的)?例如,假設他們使用GCC和Linux終端的反編譯程序轉換程序。 – kashveyron

+1

也許值得一提的是編譯器的*版本*。 – jpmc26

+1

@ jpmc26仔細閱讀;)第二段,括號內最後一句 – tofro