反匯編和逆向工程 為什么有反匯編而沒有反C的說法?
為什么有反匯編而沒有反C的說法?反匯編是指將非匯編目標代碼轉(zhuǎn)換成匯編代碼的過程。您看到的反匯編代碼實際上是由C編譯器直接從C語言代碼編譯成匯編代碼,而不是從機器代碼中編譯出來的。這在調(diào)試階段具有重要意
為什么有反匯編而沒有反C的說法?
反匯編是指將非匯編目標代碼轉(zhuǎn)換成匯編代碼的過程。
您看到的反匯編代碼實際上是由C編譯器直接從C語言代碼編譯成匯編代碼,而不是從機器代碼中編譯出來的。
這在調(diào)試階段具有重要意義。例如,你寫的代碼沒有語法錯誤,但是有一個邏輯錯誤,你很難找到這個邏輯錯誤。此時,在調(diào)試過程中逐步執(zhí)行反匯編代碼是非常有意義的。讓我給你一個例子:把變量十進制代碼轉(zhuǎn)換成十六進制,把十進制代碼放在變量TMP中。如果代碼如下所示:
D=(TMP>>4)*10 TMP&0x0f
如果您輸入TMP變量來存儲十進制23(存儲為0x23),然后使用前面的語句更改為十六進制,那么D應該等于0x17,但實際上代碼的結(jié)果是0x07,因為前面的語句代碼雖然沒有語法錯誤,但存在邏輯錯誤,運算符error “的優(yōu)先級”高于運算符“&;”,導致運算結(jié)果錯誤。結(jié)合反匯編代碼很容易發(fā)現(xiàn)這種錯誤
反匯編和C代碼都可以設置斷點,但調(diào)試反匯編可以獲得更高的精度,因為一個C代碼可能由幾十個匯編代碼組成,而C代碼中的一個單步可以執(zhí)行十多個匯編代碼,最基本的計算機編程語言是匯編語言。當它用作動詞時,意味著用匯編語言編寫的程序代碼被編譯并連接起來生成可執(zhí)行程序。反匯編是這個過程的逆過程,一般用于商業(yè)軟件或病毒以及其他不知道如何編寫源程序的程序。拆卸后,機器代碼(即由01組成的指令)被翻譯成裝配指令。在一定程度上,人們可以了解程序的編寫方法和所用算法的特點,增加反匯編難度的方法有很多,如在程序中添加shell、使用大量的跳轉(zhuǎn)等