首页 > 代码库 > 第一次接触C语言裸函数
第一次接触C语言裸函数
先上代码:
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语言裸函数