欢迎来到 嗅灵易学

零基础也能上手的脚本技术课,一对一答疑带你入门

利用Thunk技术改写窗口类回调函数例子

利用Thunk技术改写窗口类回调函数例子

什么是 Thunk 
Thunk 技术就是将一段机器码对应的字节保存在一个连续内存结构里,然后把其指针强制转换成函数, 即用作函数来执行。 
什么是 DEP 
说道Thunk,顺便介绍下DEP。数据执行保护 (DEP) 是一套软硬件技术,能够在内存上执行额外检查以帮助防止在系统上运行恶意代码。在 Microsoft Windows XP Service Pack 2 、 Microsoft Windows Server 2003 Service Pack 1 、Microsoft Windows XP Tablet PC Edition 2005 和 Microsoft Windows Vista 中,由硬件和软件一起强制实施 DEP 。 DEP 的主要优点是可以帮助防止数据页执行代码。通常情况下,不从默认堆和堆栈执行代码。硬件实施 DEP 检测从这些位置运行的代码,并在发现执行情况时引发异常。软件实施 DEP 可帮助阻止恶意代码利用 Windows 中的异常处理机制进行破坏。 硬件实施 DEP 是某些 DEP 兼容处理器的功能,可以防止在已标记为数据存储区的内存区域中执行代码。此功能也称为非执行和执行保护。 Windows XP SP2 还包括软件实施 DEP ,其目的在于减少利用 Windows 中的例外处理机制的情况。 
在哪里查看DEP 设置呢? 
我的电脑-> 属性-> 高级-> 性能-> 设置-> 数据执行保护。 
在windows xp sp2 上默认是” 仅为基本 Windows 程序和服务启用 DEP “ 在Microsoft Windows Server 2003 Service Pack2 上默认是”为除下列选定程序之外的所有程序和服务启用 DEP “ 
 WTL是怎样解决DEP问题:   
WTL 也用了Thunk 技术, 如果在Microsoft Windows Server 2003 Service Pack2 上把DEP 设置成回默认的,然后运行一下WTL的 Dialog, 可以跑起来, 同样是用Thunk, 这是什么原因呢, 看ATL 代码, 可以发现如下代码: 
 thunkPage = (PATL_THUNK_ENTRY)VirtualAlloc(NULL, 
            PAGE_SIZE, 
             MEM_COMMIT, 
             PAGE_EXECUTE_READWRITE); 
 原来WTL是用VirtualAlloc[PAGE_EXECUTE_READWRITE] 来分配Thunk 代码的内存。所以要是你的代码中使用的Thunk技术,请使用VirtualAlloc为Thunk分配内存。
下面给出一个使用Thunk改写窗口类回调函数为类成员函数的例子:
注意:
1.  这个例子从网上利用thunk技术封装窗口类改写过来,但是他的程序有些bug,下载下来直接编译会出错。
2.  利用thunk技术封装窗口类中使用的是静态变量传递窗口对象和窗口句柄,需要定义额外的变量,代码中使用RingSDK中的技术,在CreateWindow中将对象指针作为参数传递。

注意:上传附件及图片大小不得大于30M。

⚠️ 版权声明:
本博客所有内容(含教程、源码、工具)仅供个人技术学习与研究交流使用,严禁商用、倒卖、二次分发及非法用途。
未经作者书面授权,任何组织或个人不得转载、复制或用于其他平台,违者将追究相关责任。

0 0 0 举报
复制成功