反彙編 逆向初步 2

2021-06-28 09:21:05 字數 1707 閱讀 4403

逆向初步(1)介紹的是if……else語句在反彙編中的事例,現在我們來看看switch……case語句在反彙編長啥樣。我們先來看一段簡單的使用switch……case語句的程式,其**如下:

#include

main()

} 接下來我們來看它對應的反彙編**,如下所示:

4: int c = 5;

00401028 

mov 

dword ptr [ebp-4],5

5: switch(c)

6: 

我們可以看到,第一行**是將5存入堆疊中,然後再switch語句中,將堆疊中的5取出來,存入eax暫存器中,然後又把eax暫存器中的值存入堆疊中,接下來就是比較了。比較的過程有點類似於if語句,但是if語句去的是區間,而switch語句用的是值,所以比較時用的彙編指令為je。下面我們來具體分析下。

00401035 

cmp 

dword ptr [ebp-8],0

00401039 

je main 39h (00401049)

首先,上面這兩行**是判斷c的值是否為0,如果是0,則跳轉到case 

0:處,00401049這個正好是case 

0:的位址。接下來的幾個比較和跳轉指令的意思都類似,不過在最後乙個je指令的下面卻有乙個jmp指令,這是乙個無條件跳轉指令,它跳轉到的位置是00401074,由上面的反彙編**我們知道,這個位址在switch語句之外,也就是說,如果c的值不和比較的這三個數相等,則不進入case中。

而在case中,則是對printf函式的呼叫,然後就是乙個jmp指令直接跳出switch語句,這是因為我們在case語句中使用了break的情況。大家可以試想一下,如果我在case中不使用break,那麼反彙編**又會是咋樣呢?下面我們就來看看不使用break的case的反彙編長啥樣。先看c**:

#include

main()

} **和上面的類似,只是前3個case中少了break,從c的知識我們可以知道,只要進入乙個case,那麼它下面的case都會被執行,我們可以這樣試想,要實現這個功能,那麼可能是處理完case中的**後,沒有使用jmp指令,這樣程式就不會跳轉,就一直往下執行。我們來看看其反彙編**:

4: int c = 5;

00401028 

mov 

dword ptr [ebp-4],5

5: switch(c)

6: 

由上面的**可以看出,我們的猜想是正確的。少了break的case,其後面沒有跳轉指令,於是程式就繼續往下執行了。這也是使用switch語句是需要注意的地方,有的時候我們用到switch語句,可是卻發現得出的結果不是我們想要的,這個時候就要檢查下看case中有沒有漏掉break,如果漏掉了,程式就會繼續執行下乙個case,就可能得不出我們想要的結果。

switch語句的反彙編,就介紹這麼多了。switch語句很靈活,但是不小心也容易出錯,所以大家在使用的時候要小心,特別是新手,經常是漏掉break,然後程式執行不出想要的結果,所以在使用的時候一定要記得把break加上,當然,也不是所有的case都需要加break,要根據情況來定,有的時候幾個case要執行同一部分**,就可以將這部分**放到最後乙個case中,然後前面幾個case裡不做處理,也不要加break,這樣只要命中乙個case,最後的那個case都會被執行。

關於分支語句的反彙編就介紹這麼多,希望有興趣的同學可以看一下,正在學c的同學也可以看看,這樣對於理解c語句也有一定的幫助。

通過VC學習反彙編 彙編初步

因工作中經常用到反彙編解一些演算法,故對次有一定的接觸,為了更進一步理解c c vc等他們的特性,記下一些東西,就當自娛自樂了。1.1 暫存器 32位cpu所含有的暫存器分類簡介 1.1.1 資料暫存器 eax ebx ecx和edx 資料暫存器主要用來儲存運算元和運算結果等資訊。暫存器的低16位分...

教程 逆向反彙編第七課

在以c為代表的高階語言中用if then else,switch case等高階語句來構成程式的判斷流程,不僅條理清晰且維護性還是不錯的.而組合語言的 則複雜得多,會看到cmp等指令的後面跟著 各類的跳轉指令jz jnz等.識別關鍵跳轉是軟體破解的乙個重要技能,許多軟體用乙個或多個跳轉 來實現註冊或...

教程 逆向反彙編第三課

說完利用堆疊傳遞引數了,下面該說說使用暫存器傳遞引數的話題了.暫存器傳遞傳輸的方式並沒有乙個標準,所有與平台相關的方法都是由ide 也就是編譯器 開發人員制定的.儘管沒有統一的標準,但絕大多數編譯器提供商都在不對相容性宣告的情況下,遵循相應的規範,吉fastcall規範.fastcall顧名思義,特...