【Win32汇编】__declspec(naked)裸函数

使用 __declspec(naked) 定义的函数,编译器只会负责参数压栈、执行CALL指令,和释放参数的内存(堆栈平衡),除此之外啥也没有,比如提升堆栈,寄存器的保存和恢复,或者是函数返回,这些都要自己添加。
在这里插入图片描述
上图是一个裸函数,因为连参数都没有,编译器做的事情就是一个CALL。由于没有RET,所以程序会出错。

调用处生成的CALL
在这里插入图片描述

跳转到函数体,全是INT3,没有RET,函数无法返回到调用处,程序出错。
【Win32汇编】__declspec(naked)裸函数_第1张图片


下面给出一个裸函数实现加法的例子。
【Win32汇编】__declspec(naked)裸函数_第2张图片
返回值通过 EAX 返回给主函数。

你可能感兴趣的:(汇编语言)