反組譯碼之c語言for迴圈

來源:互聯網
上載者:User

一個簡單的學習程式,代碼如下:

int fun()<br />{<br />int i,a = 0;<br />for(i = 0; i < 50; i ++)<br />{<br />a += i;<br />}<br />return i;<br />}

調試查看反組譯碼代碼如下:

int fun()
{
009C1A10  push        ebp 
009C1A11  mov         ebp,esp 
009C1A13  sub         esp,0D8h 
009C1A19  push        ebx 
009C1A1A  push        esi 
009C1A1B  push        edi 
009C1A1C  lea         edi,[ebp-0D8h] 
009C1A22  mov         ecx,36h 
009C1A27  mov         eax,0CCCCCCCCh 
009C1A2C  rep stos    dword ptr es:[edi] 
 int i,a = 0;
009C1A2E  mov         dword ptr [a],0 
 for(i = 0; i < 50; i ++)
009C1A35  mov         dword ptr [i],0 
009C1A3C  jmp         fun+37h (9C1A47h) 
009C1A3E  mov         eax,dword ptr [i] 
009C1A41  add         eax,1 
009C1A44  mov         dword ptr [i],eax 
009C1A47  cmp         dword ptr [i],32h 
009C1A4B  jge         fun+48h (9C1A58h) 
 {
  a += i;
009C1A4D  mov         eax,dword ptr [a] 
009C1A50  add         eax,dword ptr [i] 
009C1A53  mov         dword ptr [a],eax 
 }
009C1A56  jmp         fun+2Eh (9C1A3Eh) 
 return i;
009C1A58  mov         eax,dword ptr [i] 
}
009C1A5B  pop         edi 
009C1A5C  pop         esi 
009C1A5D  pop         ebx 
009C1A5E  mov         esp,ebp 
009C1A60  pop         ebp 
009C1A61  ret 

 

簡單分析for反組譯碼代碼

 

for迴圈的執行流程是:

mov    <迴圈變數>,<初始值>

jmp     B

A:   (改變迴圈變數)

.................

B:  cmp   <迴圈變數>,< 限制的變數>

       jge   跳出for

       (迴圈體)

       .................

       jmp A

 

 

 

 

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.