VC/C++裸属性有什么作用?

2 c c++ visual-c++

来自msdn

对于使用naked属性声明的函数,编译器生成没有prolog和epilog代码的代码.您可以使用此功能使用内联汇编程序代码编写自己的prolog/epilog代码序列.裸函数在编写虚拟设备驱动程序时特别有用.

 __declspec(naked) declarator
Run Code Online (Sandbox Code Playgroud)

什么是"prolog和epilog代码".我看到用C语言编写的库只在libc上运行在设备或固件上.它调用函数没有问题,naked关键字做了什么以及为什么需要它?

注意:我不确定函数在这些库中使用的调用约定.

Joh*_*ski 7

Prolog:在函数体之前运行的代码,通常是处理函数入口和参数处理的代码.Epilog:在函数体之后运行的代码,通常是处理函数返回和返回值的代码.

有了"裸体",你必须/有机会自己写这些东西.


Ana*_*tts 5

Prolog 和 Epilog 代码是它设置调用堆栈的第一个/最后几个指令。当您实现诸如中断例程之类的东西时,您可以使用裸体,您需要严格控制该函数中出现的指令。