c语言裸函数对应Delphi,C语言中的裸函数

C语言裸函数记住一点,编译器不会为它生成任何代码。我们在平常调用函数时哪怕是调用一个没有任何代码的空函数,编译器最少都会生成一个基本的框架。但调用裸函数的话不会,在反汇编中除了看到正常的call xxxx外,进入里面后如果我们本身也没对裸函数做任何操作,那程序就会出错。

语法返回类型 __declspec(naked) 函数名()

{

}

例//下面__declspec(naked)是固定的

void __declspec(naked) test()

{

}

我们看调用一个正常的空函数的汇编

1594303539285276.png

再看看调用一个空裸函数

1594303628134487.png

直接就变成了这样,程序已经出错了。编译器没有为裸函数生成任何代码,连ret都没有,没有返回地址,程序当然会出错,不让程序出错最少最少都要在裸函数里面加上一个ret。

我们可以在裸函数里面写__asm{},大括号中间写汇编。void __declspec(naked) test()

{

__asm

{

ret

}

}

qun.png

由于表达能力有限或其他一些原因,本站可能有少量错误,欢迎指正!

扫描关注个人博客QQ交流群共同探讨

此文为本站原创,由 陈成 发表,转载需要以链接形式注明出处

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值