31、32位到16位调用的Thunk层及驱动DLL定时器使用
2026/6/25 20:35:39 网站建设 项目流程

32位到16位调用的Thunk层及驱动DLL定时器使用

32位到16位调用的Thunk层

在进行32位到16位的调用时,参数转换完成后,从32位到16位的切换通过如下代码实现:

call dword ptr [pfnQT_Thunk_X2to16]

这个通过函数指针表的调用最终会调用一个未公开的KERNEL32函数QT_ThunkQT_Thunk会接收真实16位DLL中DLL16Foo函数的16:16地址,它负责从32位栈切换到16位栈,然后跳转到真实16位DLL中DLL16Foo函数的16:16地址。

函数指针表的初始化过程较为复杂。简单来说,32位DLL必须在其DllMain中调用一个特殊的初始化函数ThunkConnect32。该函数由Thunk编译器生成,它通过用16位DLL每个导出函数的16:16地址初始化表,将32位DLL与16位DLL“连接”起来。这些地址直到运行时16位DLL加载后才可知,ThunkConnect32会使用另一个未公开的KERNEL32函数Connect32来获取这些16:16地址。

创建Thunk层的步骤

创建Thunk DLL需要遵循以下步骤:
1. 修改16位DLL的头文件,创建包含每个导出函数参数输入、输出和输入输

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询