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