C語言的彙編表示

C/C++/VC6/VS之間的關係

  • C\C++是編程語言,C++是由C而來的,是上下兼容的。
  • VC/VS是Windows下的集成開發環境。
  • VC6有利於我們去了解程序代碼背後的東西,看它的彙編代碼、堆棧執行等。

第一個C程序

  • 創建項目
    在這裏插入圖片描述
  • 創建文件
    在這裏插入圖片描述
  • 入口程序
    在這裏插入圖片描述
  • 構建(F7)
    在這裏插入圖片描述
  • 向程序中寫彙編指令,使用__asm{} 開頭來寫

在這裏插入圖片描述

重新構建,F5運行就保存了

  • 在VC6裏按F9下斷點,運行後可以對程序進行反彙編
    在這裏插入圖片描述右鍵Go to …就成功來到反彙編窗口了
    在這裏插入圖片描述

什麼是函數

函數就是一系列指令的集合,爲了完成某個重複使用的特定功能

C語言中的函數格式如下:
返回類型 函數名(參數列表)
{

}

這裏有一下幾點主要注意:

  • 返回類型、函數名不可省略。
  • 參數列表可以省略。

函數名、參數名的命名規則:

  • 只能以字母、數字、下劃線組成,並且第一個字母必須是字母或下劃線。
  • 區分大小寫
  • 不能使用C語言的關鍵字

例如:

int plus(int x,int y)
{
	return 0;
}

調用函數

彙編中的函數調用

push 1
push 2
call 內存地址

......

ret

或者

mov eax,參數1
mov ebx,參數2
call 內存地址

.....

ret

在C語音裏,我們直接調用定義的函數名就可以了,例如:

int function(int x,int y)		//定義函數
{
	return 0;
}
void main()
{
function(1,2);		//調用函數
}

我們還可以看一看調用這個函數他在彙編中都幹了什麼
在這裏插入圖片描述

這個調用在彙編裏我們能夠看的一清二楚,無非就是兩次壓棧,調用了一個CALL,因爲傳了兩個參數所以棧頂指針ESP的值+8。

要想了解函數,一定要背過下面這串彙編:

5:    //定義函數
6:    int function(int x,int y)
7:    {
00401020   push        ebp
00401021   mov         ebp,esp
00401023   sub         esp,40h
00401026   push        ebx
00401027   push        esi
00401028   push        edi
00401029   lea         edi,[ebp-40h]
0040102C   mov         ecx,10h
00401031   mov         eax,0CCCCCCCCh
00401036   rep stos    dword ptr [edi]
8:
9:        return 0;
00401038   xor         eax,eax
10:
11:   }
0040103A   pop         edi
0040103B   pop         esi
0040103C   pop         ebx
0040103D   mov         esp,ebp
0040103F   pop         ebp
00401040   ret

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章