64位程序调用32位程序模块的方法、装置、介质及设备制造方法及图纸

技术编号:24120339 阅读:20 留言:0更新日期:2020-05-13 02:53
本文关于一种64位程序调用32位程序模块的方法、装置、介质及设备,64位程序调用32位程序模块的方法包括:调用LoadLibrary32函数和GetPorcAddress32函数;通过所述LoadLibrary32函数调用LoadLibrary函数加载32位目标程序模块,通过所述GetPorcAddress32函数调用GetPorcAddress函数获取所述目标程序模块中的目标函数;将寄存器中的参数保存到栈中,并调整指针访问范围;调用所述目标程序模块中的目标函数。可以实现64位程序调用32位程序模块,64位程序与32位程序模块在同一进程下运行,不需要单独对每一个需要调用的函数进行封装,没有进程同步,也不需要额外注册组件。

Methods, devices, media and devices for 64 bit programs to call 32-bit program modules

【技术实现步骤摘要】
64位程序调用32位程序模块的方法、装置、介质及设备
本文涉及计算机应用领域,尤其涉及64位程序调用32位程序模块的方法、装置、介质及设备。
技术介绍
以前的电脑系统,如WindowsXp是32位的系统,所以人们编写的都是32位的程序,后来有了64位的系统,在64位的系统下即可以运行64位程序,也可以运行32位的程序,但是64位的程序却不可以直接调用32位程序模块如程序的DLL、插件、游戏的MOD等,大部分情况下,需要重新编译32位程序模块的源代码为64位程序,但很多情况下,如果没有这些模块的源代码,就要放弃对这些模块的支持,或者自己仿照这些模块重新编写,但如此会大大增加开发周期。相关技术中,用32位程序对程序模块进行封装,封装成COM服务,然后再在64位程序下调用。或者使用共享内存,在64位程序下将参数写入共享内存,在32位从共享下取出参数调用程序模块,将结果写入共享内存,再在64位程序下从共享内存中取出结果。但封装成COM服务的方法,需要注册COM服务,部署维护比较麻烦;共享内存的方法,需要解决进程进同步的问题,64位程序与32位程序模块不在同一个进程空间中,64位程序和32位程序模块都需要做单独处理,增加开发维护成本。
技术实现思路
为克服相关技术中存在的问题,本文提供一种64位程序调用32位程序模块的方法、装置、介质及设备。根据本文的第一方面,提供一种64位程序调用32位程序模块的方法,包括:调用LoadLibrary32函数和GetPorcAddress32函数;通过所述LoadLibrary32函数调用LoadLibrary函数加载32位目标程序模块,通过所述GetPorcAddress32函数调用GetPorcAddress函数获取所述目标程序模块中的目标函数;将寄存器中的参数保存到栈中,并调整指针访问范围;调用所述目标程序模块中的目标函数。所述调用LoadLibrary32函数和GetPorcAddress32函数之前包括:在64位程序下加载32位的Kernel32.dll到内存;修复Kernel32.dll的重定向,修复导入表和导出表;获取所述Kernel32.dll内的LoadLibrary函数和GetPorcAddress函数;将调用所述LoadLibrary函数的代码封装为LoadLibrary32函数,将调用所述GetPorcAddress函数的代码封装为GetPorcAddress32函数。64位程序调用32位程序模块的方法,还包括:修改寄存器的值为0x23。所述调整指针访问范围包括:将所述64位程序的PE文件的基址修改为0xffffffff内的地址。根据本文的另一方面,提供一种64位程序调用32位程序模块的装置,包括:第一调用模块,用于调用LoadLibrary32函数和GetPorcAddress32函数;加载模块,用于通过所述LoadLibrary32函数调用LoadLibrary函数加载32位目标程序模块,通过所述GetPorcAddress32函数调用GetPorcAddress函数获取所述目标程序模块中的目标函数;指针模块,用于将寄存器中的参数保存到栈中,并调整指针访问范围;第二调用模块,用于调用所述目标程序模块中的目标函数。64位程序调用32位程序模块的装置,还包括封装模块,用于:在64位程序下加载32位的Kernel32.dll到内存;修复Kernel32.dll的重定向,修复导入表和导出表;获取所述Kernel32.dll内的LoadLibrary函数和GetPorcAddress函数;将调用所述LoadLibrary函数的代码封装为LoadLibrary32函数,将调用所述GetPorcAddress函数的代码封装为GetPorcAddress32函数。64位程序调用32位程序模块的装置,还包括,寄存器转换模块,用于修改寄存器的值为0x23。所述调整指针访问范围包括:将所述64位程序的PE文件的基址修改为0xffffffff内的地址。根据本文的另一方面,提供一种计算机可读存储介质,其上存储有计算机程序,所述计算机程序被执行时实现64位程序调用32位程序模块的方法的步骤。根据本文的另一方面,提供一种计算机设备,包括处理器、存储器和存储于所述存储器上的计算机程序,所述处理器执行所述计算机程序时实现64位程序调用32位程序模块的方法的步骤。本文通过提供64位程序调用32位程序模块的方法,可以实现64位程序调用32位程序模块,64位程序与32位程序模块在同一进程下运行,不需要单独对每一个需要调用的函数进行封装,没有进程同步,也不需要额外注册组件。应当理解的是,以上的一般描述和后文的细节描述仅是示例性和解释性的,并不能限制本文。附图说明构成本文的一部分的附图用来提供对本文的进一步理解,本文的示意性实施例及其说明用于解释本文,并不构成对本文的不当限定。在附图中:图1是根据一示例性实施例示出的一种64位程序调用32位程序模块的方法的流程图。图2是根据一示例性实施例示出的一种64位程序调用32位程序模块的装置的框图。图3是根据一示例性实施例示出的一种64位程序调用32位程序模块的装置的框图。图4是根据一示例性实施例示出的一种64位程序调用32位程序模块的装置的框图。图5是根据一示例性实施例示出的一种计算机设备的框图。具体实施方式为使本文实施例的目的、技术方案和优点更加清楚,下面将结合本文实施例中的附图,对本文实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例是本文一部分实施例,而不是全部的实施例。基于本文中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本文保护的范围。需要说明的是,在不冲突的情况下,本文中的实施例及实施例中的特征可以相互任意组合。图1是根据一示例性实施例示出的一种64位程序调用32位程序模块的方法的流程图。参考图1,64位程序调用32位程序模块的方法包括:步骤S11,调用LoadLibrary32函数和GetPorcAddress32函数;步骤S12,通过LoadLibrary32函数调用LoadLibrary函数加载32位目标程序模块,通过GetPorcAddress32函数调用GetPorcAddress函数获取目标程序模块中的目标函数;步骤S13,将寄存器中的参数保存到栈中,并调整指针访问范围;步骤S14,调用目标程序模块中的目标函数。在64位的系统下即可以运行64位程序,也可以运行32位的程序,但是64位的程序却不可以直接调用32位程序模块,如程序的DLL、插件、游戏的MOD等。为了实现在64位程序下,调用32位程序模块,需要先获取3本文档来自技高网...

【技术保护点】
1.一种64位程序调用32位程序模块的方法,其特征在于,包括:/n调用LoadLibrary32函数和GetPorcAddress32函数;/n通过所述LoadLibrary32函数调用LoadLibrary函数加载32位目标程序模块,通过所述GetPorcAddress32函数调用GetPorcAddress函数获取所述目标程序模块中的目标函数;/n将寄存器中的参数保存到栈中,并调整指针访问范围;/n调用所述目标程序模块中的目标函数。/n

【技术特征摘要】
1.一种64位程序调用32位程序模块的方法,其特征在于,包括:
调用LoadLibrary32函数和GetPorcAddress32函数;
通过所述LoadLibrary32函数调用LoadLibrary函数加载32位目标程序模块,通过所述GetPorcAddress32函数调用GetPorcAddress函数获取所述目标程序模块中的目标函数;
将寄存器中的参数保存到栈中,并调整指针访问范围;
调用所述目标程序模块中的目标函数。


2.如权利要求1所述的64位程序调用32位程序模块的方法,其特征在于,所述调用LoadLibrary32函数和GetPorcAddress32函数之前包括:
在64位程序下加载32位的Kernel32.dll到内存;
修复Kernel32.dll的重定向,修复导入表和导出表;
获取所述Kernel32.dll内的LoadLibrary函数和GetPorcAddress函数;
将调用所述LoadLibrary函数的代码封装为LoadLibrary32函数,将调用所述GetPorcAddress函数的代码封装为GetPorcAddress32函数。


3.如权利要求1所述的64位程序调用32位程序模块的方法,其特征在于,还包括:
修改寄存器的值为0x23。


4.如权利要求2所述的64位程序调用32位程序模块的方法,其特征在于,所述调整指针访问范围包括:
将所述64位程序的PE文件的基址修改为0xffffffff内的地址。


5.一种64位程序调用32位程序模块的装置,其特征在于,包括:
第一调用模块,用于调用LoadLibrary32函数和GetPorcAddress32函数;<...

【专利技术属性】
技术研发人员:高古尊何晓文李启光
申请(专利权)人:贵阳动视云科技有限公司
类型:发明
国别省市:贵州;52

网友询问留言 已有0条评论
  • 还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。

1