_declspec(naked) 使用
来源:互联网 发布:马太效应读后感知乎 编辑:程序博客网 时间:2024/06/06 00:03
2010年11月30日 星期二 11:49
最近学习驱动开发,在写绕过inline hook的代码时,有个问题困扰了我一天,最后发现原来是在内嵌汇编时,没有使用_declspec(naked)导致的,看来是偶的基础知识掌握的不牢固啊(得补一下了,磨刀不误砍柴功),在此给记录一下,给自己一个警示。
对于jmp类型的hook, 如果自己的过程没有使用_declspec(naked),那么系统会自动给添加一些额外的代码,控制堆栈平衡,但是这些额外的代码会破坏被hook函数的堆栈。
对于call类型的hook,如果使用_declspec(naked)修饰的话,要注意自己恢复堆栈平衡。
下面是网上对_declspec(naked) 的介绍:
_declspec(naked)
就是告诉编译器,在编译的时候,不要优化代码,通俗的说就是
没代码,完全要自己写
比如
#define NAKED __declspec(naked)
void NAKED code(void)
{
__asm
{
ret
}
}
使用__declspec(naked)关键字定义函数:
1,使用 naked 关键字必须自己构建 EBP 指针 (如果用到了的话);
2,必须自己使用 RET 或 RET n 指令返回 (除非你不返回);
_delcspec(naked)用在驱动编写,C语言内嵌汇编完成一些特定功能。
三种方法:
1、hook ssdt
2、inline hook
3、hook export port
1、hook ssdt
2、inline hook
3、hook export port
- _declspec(naked) 使用
- _declspec(naked) 使用
- _declspec(naked) 使用
- _declspec(naked) 使用
- _declspec(naked) 使用(裸函数)
- _declspec(dllexport)的使用
- 在代码中使用 _declspec(dllimport) 和 _declspec(dllexport)
- 在代码中使用 _declspec(dllimport) 和 _declspec(dllexport)
- dll项目中_declspec(dllimport)和_declspec(export)使用
- naked 使用时的注意事项。
- C/C++拾遗录--查看关于_declspec(naked)与普通的函数在寄存器变化方面的不同点
- class _declspec(dllexport) class_name与class _declspec(dllimport) class_name的配套使用
- class _declspec(dllexport) class_name与class _declspec(dllimport) class_name的配套使用
- _declspec(dllexport)
- _declspec(dllexport)
- _declspec(dllexport)
- _declspec(dllexport)与_declspec(dllimport)
- _declspec(dllexport)与_declspec(dllimport)
- web.xml中配置<error-page>标签不起作用的问题
- 解决在无线网络下本机无法连接linux(红帽)虚拟机问题
- Struts2.1.6+Spring2.5.6+Hibernate3.3.1全注解实例详解(二)
- 陈皓 编程修养
- 随笔
- _declspec(naked) 使用
- Oracle用户、权限、角色管理
- 数据库名、实例名、ORACLE_SID、数据库域名、全局数据库名、服务名及手工脚本创建oracle数据库
- Struts2.1.6+Spring2.5.6+Hibernate3.3.1全注解实例详解(三)
- 背包问题
- Struts2.1.6+Spring2.5.6+Hibernate3.3.1全注解实例详解(四)
- struts2 json 与jquery整合实现ajax,用户注册校验
- LINQ语句中的.AsEnumerable() 和 .AsQueryable()的区别
- Struts2.1.6+Spring2.5.6+Hibernate3.3.1全注解实例详解(五)