1. 程式人生 > >第一次接觸C語言裸函數

第一次接觸C語言裸函數

ase %d 環境 urn col argc 理解 初始化 運行機制

先上代碼:

naked.cpp:

#include "stdafx.h"

extern "C" int __declspec(naked) add2(int x,int y) //引用說明支持跨文件的調用
{
__asm{ //函數的環境初始化(升棧、保護現場、填充緩存區)
PUSH EBP
MOV EBP,ESP
SUB ESP,0X40
PUSH EBX
PUSH ESI
PUSH EDI
LEA EDI,DWORD PTR SS:[EBP-0X40]
MOV EAX,0XCCCCCCCC
MOV ECX,0X10
REP STOSD
}
__asm{ //函數功能
MOV EAX,DWORD PTR SS:[EBP+0X8]
ADD EAX,DWORD PTR SS:[EBP+0XC]
}
__asm{ //恢復現存降棧返回
POP EDI
POP ESI
POP EBX
MOV ESP,EBP
POP EBP
RET
}
}

====================================================

base.cpp

#include "stdafx.h"

extern "C" int add2(int,int); //聲明外部函數

int _tmain(int argc, _TCHAR* argv[])
{


//test
int sum=0;

printf ("add2(50,76):%d\n",add2(50,76));

return 0;



今天加深理解的一個C語言函數的運行機制。

第一次接觸C語言裸函數