__declspec(naked)是用来告诉编译器函数代码的汇编语言为自己的所写,不需要编译器添加任何汇编代码,通俗说可生成纯汇编。
使用方法:
1,使用 naked 关键字必须自己构建 EBP 指针 (如果用到了的话);
2,必须自己使用 RET 或 RET n 指令返回 (除非你不返回);
这是编译器直接拿来用的汇编函数代码,所以一定要记得在开始的时候保存上下文标志位(压栈),在结束的时候要记得恢复上下文(出栈)。并且在结尾要加上ret命令。对于一般的汇编内嵌代码,不必保存上下文了,保存也不会有事,但是不能再加ret命令,因为编译器也会为其加一个,ret命令不能同时执行两次。会导致越界错误。
__declspec(naked) int add(int a,int b) { __asm mov eax,a __asm add eax,b __asm ret }__declspec(naked) int __stdcall function(int a,int b) { __asm mov eax,a __asm add eax,b __asm ret 8 //注意后面的8 }
本文详细介绍了__declspec(naked)在C++中的使用方法及其注意事项,包括如何构建EBP指针、使用RET指令返回以及保存与恢复上下文标志位的重要性。通过示例代码展示了其在生成纯汇编函数时的应用。
1057

被折叠的 条评论
为什么被折叠?



