看《天書夜讀》第一章,感覺很親切,於是自己動手操起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語言反彙編入門實例
作者:代碼瘋子您可能對下面的文章也感興趣: