-
1 # 劉慧穎A
-
2 # 雲飛龍965
反彙編是指將非彙編目的碼轉變成彙編的過程.
你所看到的反彙編程式碼,其實是由C編譯器將C語言程式碼直接編譯成彙編程式碼的,並非由機器碼反彙編成彙編.
這樣做在除錯階段有非常大的意義,比如你寫的程式碼,語法上一點錯誤都沒有,但是邏輯上有了錯誤,往往你要找到這個邏輯錯誤是很難的,這時候在除錯的時候單步執行反彙編程式碼就變的很有意義了,給你舉個例子:將變數十進位制碼轉成16進位制,十進位制碼放在變數tmp中,如果程式碼這樣寫:
d=(tmp>>4)*10+tmp&0x0F;
假如你輸入tmp變數儲存的是十進位制的23(儲存為0x23),然後使用上句準換為16進位制,那麼d應該等於0x17,但實際上程式碼的結果卻是0x07,原因就是雖然上句程式碼語法上沒有錯誤,但是邏輯上有錯,運算子"+"的優先順序是大於運算子"&"的,這就造成了運算結果出錯,結合反彙編程式碼可以很容易查出這類錯誤.
反彙編和C程式碼中都可以設定斷點,但除錯反彙編可以獲得更高的精度,因為一句C程式碼可能有數十條彙編程式碼組成,在C程式碼單步執行一次,可能執行了十幾條彙編程式碼,而在反彙編介面單步除錯,每次只執行一句彙編程式碼(濫竽充數一下)
-
3 # bigbigeasy
機器碼和彙編是一一對應的,所以可以反彙編。
c的話實際編譯中是先變編譯成彙編,然後才是機器碼。反向編譯基本不可能了。
-
4 # 閒人老盧
我1993年畢業時的畢業設計就是基於SCO Unix作業系統的C語言反編譯器,因此而獲得上海交大計算機系優秀畢業設計獎。我們一共三個同學,我負責編碼,另一個負責c語言庫函式識別模組,還有一個負責測試。這兩位同學都在美國。在那之前,我和另一個同學也設計了一個自定義高階語言的編譯器。反編譯系統設計的難點在於反最佳化和庫函式識別。由於編譯器在編譯時進行了大量的最佳化,因此會導致反編譯出來的結果難以看懂。當然,反彙編是反編譯的預處理過程,這個沒有什麼技術含量。
-
5 # JarmingFly
此彙編非彼彙編啊兄弟
組合語言是一門語言
反彙編這個詞裡面的彙編 只是一個動作 並不是代表組合語言。
C需要預編譯 編譯 彙編 連結4個步驟,這裡的彙編表示的是一個過程,就是把組合語言轉換為機器語言的過程,不是組合語言。
反彙編就是將這個過程逆向而已!
反C是什麼操作,C語言是個名詞,咋還能反。題主多學習學習。
回覆列表
C語言直接執行,組合語言需要對原始碼進行彙編成機器認識後才能執行,而需要程序升級修改的時候,就需要反彙編才能修改原始碼,,