簡單反彙編之if判斷

2021-06-16 03:45:17 字數 737 閱讀 3829

什麼都是從簡單開始發展的,反彙編也不例外,最近學習了如何在vc中檢視及反彙編**,反彙編在新手看來都是很神秘的東西(也包括我),感覺很牛,不過也倒是,反彙編猶如武俠中的"吸星**",這個比喻一點都不過分,會了"吸星**"的人想要誰的功夫只要一伸手就可以得來,不過能練成"吸星**"的牛人也不多,因為在練習的時候要堅受苦練......

那麼在軟體也不例外,什麼九陰白骨爪,吸星**,葵花寶典,等等,其中"吸星**"最為**。為了"吸星**"還是一步乙個招式,慢慢往下練。

先來看看最簡單的if語句debug反彙編,

**如下:

f10啟動單步除錯,然後右鍵 go to disassembly轉到彙編檢視,如下:

test反彙編函式如下:

當然我們在實際反彙編的過程中是反彙編release也沒有源**可對比的,上面是源嗎加debug反彙編,看起來跟我們寫的程式結構式很相符的。但是到了release版本,編譯器對**做了很多的優化以及處理,**的結構跟原來作者所表達的思想是截然不同的,但是結果都是一樣的。下面我們來看看最簡單的if語句release反彙編,用od載入release版本的程式,然後走入程式入口,反彙編**如下:  

通過以上分析可以看出release版本和debug版本**完全不一樣,release是通過編譯器優化處理,也是發行版,比debug難讀懂。而我們在實際過成中反彙編都是針對release,所以還是得需要多多練習,從簡單開始,多對比debug和release版生成的彙編**的不同,循循漸進,慢慢練成屬於自己的"吸星**"!

反彙編之簡單函式呼叫

簡單的函式呼叫,通過反彙編可以清楚了解 舉例 include int add int a,int b int main void 這是乙個簡單的通過呼叫函式計算兩數之和的程式 vc6.0生成的彙編 如下 ebp 棧低 高位址 esp 棧頂 低位址 add函式 push ebp ebp 1000 es...

彙編與反彙編之小技巧

大家都知道,對於位於當前除錯目標中的指令,可以使用windbg的u命令進行反彙編。u命令的引數是要反彙編 的位址值或者符號,如果不指定,那麼windbg會使用當前程式指標暫存器所指向的 例如 0 001 u ntdll dbgbreakpoint 7c901230 cc int 3 7c901231...

反彙編學習之整數型別

c 提供的整數型別包括short int和long,每種型別都分為有符號和無符號兩種型別,在筆者另一篇文章中敘述過,在不同的編譯器下實現不同,三種型別在記憶體中所佔的大小也不統一。在vc和gcc下,short佔2位元組,int佔4位元組,long佔4位元組,long long佔8位元組。下面的講解中...