為什么有反匯編而沒有反C的說法?
反匯編是指將非匯編目標代碼轉變成匯編的過程.
你所看到的反匯編代碼,其實是由C編譯器將C語言代碼直接編譯成匯編代碼的,并非由機器碼反匯編成匯編.
這樣做在調試階段有非常大的意義,比如你寫的代碼,語法上一點錯誤都沒有,但是邏輯上有了錯誤,往往你要找到這個邏輯錯誤是很難的,這時候在調試的時候單步執行反匯編代碼就變的很有意義了,給你舉個例子:將變量十進制碼轉成16進制,十進制碼放在變量tmp中,如果代碼這樣寫:
d=(tmp>>4)*10+tmp&0x0F;
假如你輸入tmp變量存儲的是十進制的23(存儲為0x23),然后使用上句準換為16進制,那么d應該等于0x17,但實際上代碼的結果卻是0x07,原因就是雖然上句代碼語法上沒有錯誤,但是邏輯上有錯,運算符'+'的優先級是大于運算符'&'的,這就造成了運算結果出錯,結合反匯編代碼可以很容易查出這類錯誤.
反匯編和C代碼中都可以設置斷點,但調試反匯編可以獲得更高的精度,因為一句C代碼可能有數十條匯編代碼組成,在C代碼單步執行一次,可能執行了十幾條匯編代碼,而在反匯編界面單步調試,每次只執行一句匯編代碼(濫竽充數一下???)