C语言内自定义汇编函数&调用约定

探究如何在C语言里直接自写汇编函数

裸函数

裸函数与普通函数的区别

普通函数在经过编译器编译时,编译器自动生成保护现场,恢复现场等反汇编代码

当我们想要自己实现函数内部的汇编代码时,就可以告诉汇编器不需要去生成额外的汇编代码,这就是裸函数的目的

裸函数声明

就是在函数前加一个__declspec(naked)前缀,就OK了

include "xxx" | include

是一种规范而已,前者包含用户自定义,后者包含标准库文件

#include "stdafx.h"

void __declspec (naked) function(){
        __asm{
                ret
        }
}
int main(int argc, char* argv[])
{
        function();
        return 0;
}

普通函数再经汇编后

image

裸函数

image

调用协定

image

函数调用结束后手动恢复堆栈
image

函数返回前,会自动恢复堆栈

image-20210905110149443

posted @ 2021-09-05 11:14  Aur0ra*  阅读(319)  评论(0编辑  收藏  举报