鸿 网 互 联 www.68idc.cn

_declspec(naked)这个声明有什么作用?该如何处理

来源:互联网 作者:佚名 时间:2015-09-03 08:29
__declspec(naked) 这个 声明 有 什么 作用 ? 如题 ------解决方案-------------------------------------------------------- __declspec(naked)是用来告诉编译器函数代码的汇编语言为自己的所写,不需要编译器添加任何汇编代码,通俗说可生成纯汇编。 使用
__declspec(naked)这个声明什么作用?
如题

------解决方案--------------------------------------------------------
__declspec(naked)是用来告诉编译器函数代码的汇编语言为自己的所写,不需要编译器添加任何汇编代码,通俗说可生成纯汇编。
 
使用方法:
 
 
 
#define NAKED __declspec(naked) 
 
VOID NAKED MyFunc() 
 

 
__asm 
 

 
ret 
 

 

 
 
 
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 
 

网友评论
<