教程 逆向反彙編第十課

2021-05-23 17:07:45 字數 2459 閱讀 8969

迴圈是高階語言中可以進行反向引用的一種語言形式,其他型別的分支語句(比如if-then-else等)都是由低向高位址區域走的.因此,通過這點可以較方便的將迴圈語句識別出來.如果確定某段**是迴圈,就可以分析其計數器,一般是用ecx暫存器做計數器,也有用其他方法來控制迴圈的,如/"test eax,eax/"等.

看乙個簡單的迴圈**:

view plain

copy to clipboard

print

?

xoreax,eax;eax清零    

@@:    

incecx;計數    

....    

cmpecx,0a;迴圈10次    

;重複   

如果上面的**用c來表示的話:

view plain

copy to clipboard

print

?

while(i<10)    

或者:view plain

copy to clipboard

print

?

for(i=0;i<10;i++)    

用c寫一段比較複雜的迴圈:

view plain

copy to clipboard

print

?

#include /"stdio.h/" 

#include /"windows.h/" 

intmain(void)    

反彙編的結果如下

view plain

copy to clipboard

print

?

00401028|.c745 f8 00000>mov dword ptr ss:[ebp-8],0 ;變數清零    

0040102f|.c745 fc 00000>mov dword ptr ss:[ebp-4],0 ;變數清零    

00401036|.eb 09 jmp short 迴圈.00401041;先跳到比較處    

00401038|>8b45 fc /mov eax,dword ptr ss:[ebp-4];i賦值給eax    

0040103b|.83c0 01 |add eax,1 ;eax+1->i+1    

0040103e|.8945 fc |mov dword ptr ss:[ebp-4],eax;eax+1後的值再送還給i    

00401041|>837d fc 64|cmp dword ptr ss:[ebp-4],64 ;i+1後的值和64h(100)比較    

00401045|.7f 0b |jg short 迴圈.00401052;大於就往下跳    

00401047|.8b4d f8 |mov ecx,dword ptr ss:[ebp-8]    

0040104a|.034d fc |add ecx,dword ptr ss:[ebp-4];[ebp-4]是變數i    

0040104d|.894d f8 |mov dword ptr ss:[ebp-8],ecx;變數sum    

00401050|.^ eb e6 short 迴圈.00401038    

00401052|>8b55 f8 mov edx,dword ptr ss:[ebp-8]    

00401055|.52push edx ; /arg2    

00401056|.68 1c004200 push 迴圈.0042001c ; |arg1 = 0042001c ascii /"%d/"

0040105b|.e8 50000000 call 迴圈.004010b0 ; //迴圈.004010b0    

00401060|.83c4 08 add esp,8    

00401063|.8bf4mov esi,esp    

00401065|.68 a0860100 push 186a0 ; /timeout = 100000. ms    

0040106a|.ff15 3c514200 call dword ptr ds:[<&kernel32.sleep>];   

另一種反彙編出來的情況是

view plain

copy to clipboard

print

?

xorecx,ecx;變數初始化,即sum=0    

xoreax,eax;變數初始化,即i=0    

@@:    

addecx,eax;相當於sum=sum+i    

inceax;eax+1,即i++    

cmpeax,64h;將變數i與100比較    

;如果eax<100就往上跳    

xoreax,eax    

第十課學習

按鍵在未按下時,處於一種高電平狀態,一般這種情況下,其對io口的電平一致,則不會產生任何效果,只有在按下狀態時,由於與接地的迴路貫通,故相當於微控制器的io口直接接地。從原理圖上看,之所以要接keyin1 keyin4外接至按鍵中,主要原因是為了獲取按鍵的狀態,因為我們只能獲取微控制器的io口狀態,...

第十課 邊框

無邊框 border style none 虛線邊框 border style dotted 虛線邊框 border style dashed 實線邊框 border style solid 雙邊框 border style double 凹槽邊框 border style groove 壟狀邊框 ...

第十課 函式

第十課 函式 一.定義函式 def 函式名 引數1,引數2,文件描述 函式體return 值 def 定義函式的關鍵字 函式名 函式名指向函式記憶體位址,是對函式體 的引用。函式的命名應該反映出函式的功能 括號 括號內定義引數,引數是可有可無的,且無需指定引數的型別 冒號 括號後要加冒號,然後在下一...