C/C++ 您当前所在位置:首页 > C/C++ > C语言中的裸函数
C语言中的裸函数
简介 C语言裸函数记住一点,编译器不会为它生成任何代码。我们在平常调用函数时哪怕是调用一个没有任何代码的空函数,编译器最少都会生成一个基本的框架。但调用裸函数的话不会,在反汇编中除了看到正常的call后面跟一个地址外,进入函数里面如果我们本身也没对裸函数做任何操作,那程序就会出错。
C语言裸函数记住一点,编译器不会为它生成任何代码。我们在平常调用函数时哪怕是调用一个没有任何代码的空函数,编译器最少都会生成一个基本的框架。但调用裸函数的话不会,在反汇编中除了看到正常的call xxxx外,进入里面后如果我们本身也没对裸函数做任何操作,那程序就会出错。
语法
返回类型 __declspec(naked) 函数名() { }
例
//下面__declspec(naked)是固定的 void __declspec(naked) test() { }
我们看调用一个正常的空函数的汇编
再看看调用一个空裸函数
直接就变成了这样,程序已经出错了。编译器没有为裸函数生成任何代码,连ret都没有,没有返回地址,程序当然会出错,不让程序出错最少最少都要在裸函数里面加上一个ret。
我们可以在裸函数里面写__asm{},大括号中间写汇编。
void __declspec(naked) test() { __asm { ret } }
上一篇: 关闭网站响应头中PHP版本信息
下一篇: 调用约定是怎么回事
猜你喜欢
点击排行
热门推荐
随机展示
站点信息
- 上线时间:2020年05月30日
- 网站程序:自建框架
- 博客模板:今夕何夕
- 文章统计:43篇文章
- 评论统计:0条评论
- 留言统计:0条留言
- 统计数据:百度统计