C語言反彙編入門實例

看《天書夜讀》第一章,感覺很親切,於是自己動手操起VS,建立一個默認的Win32 Console Application,在一個空空的main函數裏面F9下一個斷點之後,按下F5進入調試,然後Alt+8進入反彙編查看窗口,代碼如下,自己給他加了點註釋,還是很淺顯的東西。這裏的是Debug模式的反彙編代碼:(博客對ASM代碼註釋的顯示顏色不好看,大家將就一下)陌生的指令可能是stos,大家可以自己去Google查一下加深瞭解;通過仔細閱讀這個例子,相信讀者們當初學習彙編的場景已經躍然眼前了。

--- d:\my documents\visual studio 2008\projects\first\first\first.cpp ----------
// First.cpp : 定義控制檯應用程序的入口點。
//
 
#include "stdafx.h"
 
 
int _tmain(int argc, _TCHAR* argv[])
{
;將ebp入棧,保存ebp
00411370  push        ebp  
;將esp傳送給ebp
00411371  mov         ebp,esp 
;esp減去0C0h,開闢棧空間存放局部變量
;注意彙編語言中數字常量如果是字母開頭必須加上0
00411373  sub         esp,0C0h 
;保存常用的寄存器ebx,esi,edi
00411379  push        ebx  
0041137A  push        esi  
0041137B  push        edi  
;將edi賦值爲ebp-0C0h(lea取得偏移地址)
0041137C  lea         edi,[ebp-0C0h] 
;30h放入ecx,爲rep執行次數
;注意到30h * 4 = 0C0h
00411382  mov         ecx,30h
;0CCCCCCCCh爲系統中斷int 3h
00411387  mov         eax,0CCCCCCCCh 
;用int 3h填充開闢的棧空間
0041138C  rep stos    dword ptr es:[edi] 
 
	return 1;
;返回1,是通過eax寄存器返回的
0041138E  mov         eax,1 
}
;恢復寄存器ebx,esi,edi
00411393  pop         edi  
00411394  pop         esi  
00411395  pop         ebx 
;用ebp恢複函數調用前的棧指針esp 
00411396  mov         esp,ebp 
;恢復ebp
00411398  pop         ebp 
;返回 
00411399  ret


原創文章,轉載請註明:
本文出自程序人生 >> C語言反彙編入門實例
作者:代碼瘋子您可能對下面的文章也感興趣:

  1. [轉]彙編基礎知識 (10.9)
  2. strlen反彙編代碼 (5.8)
  3. 用OllyDbg對Win32彙編進行源碼級調試 (5.8)
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章