一种在mips版本的linux操作系统上运行windows应用软件的方法

文档序号:6438567阅读:1152来源:国知局
专利名称:一种在mips版本的linux操作系统上运行windows应用软件的方法
技术领域
本发明涉及操作系统技术和X86/MIPS指令集技术,具体地说涉及一种将X86程序转换成MIPS程序并在MIPS版本的LINUX操作系统上运行的方法。
背景技术
随着国家对自主可控的不断重视,国产MIPS构架的龙芯处理器得到越来越深入的推广。解决其软件支持能力的问题显得越来越重要,特别是支持WINDOWS平台上的成熟软件尤为关键。然而,WINDOWS平台上的应用软件一般都是X86指令集,使用的是WINDOWS 提供的接口、机制和资源,而MIPS构架的龙芯处理器一般使用LINUX操作系统,操作系统的区别和硬件上的差异使得WINDOWS上的应用软件无法直接在LINUX平台上运行。虽然业内有很多虚拟机软件可以在LINUX操作系统上模拟一套硬件设备来运行 WINDOWS操作系统,进而运行WINDOWS软件。但是这种通过虚拟机的方式内存开销大、CPU 占用率高、过于庞大、效率损耗严重,并且使用不够灵活,最关键的是还是需要一套WINDOWS 操作系统在虚拟机中运行。

发明内容
本发明克服了上述现有技术的缺陷,在MIPS版本的LINUX操作系统上实现了一个 WINDOWS应用程序运行环境,而无需WINDOWS操作系统和硬件虚拟。本发明的技术方案是一种在MIPS版本的LINUX操作系统上运行WINDOWS应用软件的方法,其特征在于,该方法包含以下准备步骤
在一个MIPS版本的LINUX操作系统上安装WINAPI环境模块,该WINAPI环境模块用于在该LINUX操作系统上提供WINDOWS应用软件运行时所需的与WINDOWS操作系统功能上等价的接口、机制和资源;
在该LINUX操作系统上安装X86 CPU执行环境模块,该X86 CPU执行环境模块用于在该LINUX操作系统上模拟一个真实的X86 CPU,以使得WINDOWS应用软件能够识别;
在该LINUX操作系统上安装动态指令翻译模块,该动态指令翻译模块用于在WINDOWS 应用软件的源X86指令执行时,根据源X86指令具体执行的位置把源X86指令实时地翻译成功能等价的目标MIPS指令; 该方法还包含以下运行步骤
步骤Si,启动该WINAPI环境模块,该WINAPI环境模块装载任意给定一个WINDOWS应用软件的可执行程序,搜索和装载该可执行程序所依赖的动态库,分析该可执行程序以找到该可执行程序的入口地址;
步骤S2,启动该动态指令翻译模块,该动态指令翻译模块从该可执行程序的入口地址开始将该可执行程序的源X86指令转换成MIPS指令;
步骤S3,启动该X86 CPU执行环境模块,在该X86 CPU执行环境模块所构造的虚拟的X86 CPU执行环境中执行转换后的MIPS指令,从而实现WINDOWS应用软件在MIPS版本的 LINUX操作系统上的运行。优选的,所述WINAPI环境模块提供的接口包括文件接口,其以LINUX的文件接口为基础实现WINDOWS的文件功能;进程接口,其以LINUX的进程操作接口为基础实现WINDOWS的进程操作功能;结构化异常处理接口,其以LINUX的信号量机制为基础实现 WINDOWS的SEH ;安全接口,其依据现有的WINDOWS接口标准实现保护环境中的文件、内存、 进程和系统对象资源,使其免受有意或无意的代码攻击;图形组件接口,其以LINUX的Xll 图形系统为基础实现WINDOWS的图形化操作界面。优选的,所述X86 CPU执行环境模块包括通用寄存器,其是通过在代码中定义变量来实现的;程序运行堆栈,其通过开辟内存空间来实现的;CPU机制,包括异常、中断和系统调用。优选的,所述步骤Sl中启动该WINAPI环境模块后还包括以下步骤该LINUX操作系统装载WINAPI环境模块底层组件KERNEL32. DLL和NTDLL,为构造WINAPI环境提供底层接口支持;构造进程环境控制块和线程环境控制块,以便记录和跟踪进程和线程的当前状态;用WINAPI环境中的装载器加载WINDOWS的应用软件。优选的,所述步骤S2中将源X86指令转换成MIPS指令的具体步骤是预先将源 X86指令做成一个语义解释列表,获取至少一条的源X86指令,对每一条源X86指令,从该列表中获取该条源X86指令的语义解释,再根据该条源X86指令的目的合成对应的一条或多条MIPS指令。优选的,所述获取至少一条的源X86指令是在给定的一条源X86指令的具体执行位置前后偏移2KB字节的多条源X86指令。本发明的有益效果是本发明方法能使WINDOWS上的应用软件在MIPS版本的 LINUX平台上直接运行而无需WINDOWS操作系统和硬件虚拟,从而节省了成本,提高了效率和实用性。


图1为本发明启动WINDOWS应用程序的流程图2为本发明X86程序在MIPS版本的LINUX操作上的运行流程图。
具体实施例方式为了使本发明的目的、技术方案及有益效果更加清楚明白,以下结合附图及实施例,对本发明进行进一步详细说明。应当理解,此处所描述的具体实施例仅用以解释本发明,并不用于限定本发明。本发明并不在LINUX操作系统上再运行一个完整的WINDOWS操作系统,而只是采用一系列与WINDOWS操作系统功能上等价的接口、机制和资源(可以简称为WINAPI)以及一套虚拟的X86 CPU执行环境。WINAPI在LINUX操作系统上实现了 WINDOWS的文件、进程、 图形、安全以及其他功能接口,并以共享库的方式在X86可执行文件装载时与其连接。X86 CPU执行环境则在MIPS版本的LINUX操作系统上模拟了一个真实的X86 CPU,可以称之为软CPU,X86 CPU执行环境是将硬件进行转换而形成的,比如将MIPS构架的龙芯处理器环境转换成WINDOWS软件能识别的X86 CPU执行环境。在装载了可执行文件后,本发明再将原来的X86指令一条条地转换成功能对等的MIPS指令,最终以达到让MIPS CPU直接运行X86 软件(以下简称MIPS run X86)。本发明提供一个工具软件模块和一系列的动态库模块来实现本方法所描述的功能。工具软件模块用于启动WINDOWS应用程序、转换指令。动态库用于实现挂接应用程序的WINDOWS系统调用接口。用户只需要在自己的MIPS版本的LINUX操作系统上安装本工具软件模块,并用工具软件模块启动他想运行的WINDOWS应用程序即可实现本方法所描述的功能,而无需关心操作系统和硬件的差异性。本发明方法具体需要生成以下关键模块
1、动态指令翻译模块动态指令翻译是指X86指令执行时能根据指令具体执行的位置把其前后偏移X (X可配置,一般是IB)字节的多条源X86指令实时地翻译(或转换)成功能等价的目标MIPS指令。一方面是为了保证做尽量少的翻译,以提高执行的效率;第二方面是因为有些软件在运行时要临时地生成指令(Self Modification Code or SMC),这些指令需要动态地读取并做翻译(所以“非静态”)。在指令翻译过程中,将X86指令做成一个列表,遇到一条X86指令时,从表中获取其语义解释,根据指令的目的合成对应的MIPS指令。 在有完全对应的情况下,合成的是一条MIPS指令与原始X86指令对应,如果在MIPS构架上并没有完全一一对应的指令,合成的可能是多条MIPS指令在功能上与原始X86指令对应。2、X86 CPU执行环境模块毕竟这些指令都是X86指令,许多指令执行后产生的结果是和CPU的构架和特点紧密相关的。X86 CPU执行环境模块包括如下内容
(1)通用寄存器,通过在C代码中定义变量来模拟寄存器,转换后的MIPS指令访问这些变量来操作X86的通用寄存器;
(2)程序运行堆栈,通过开辟内存空间,实现X86的堆栈;
(3)CPU机制异常、中断、系统调用,在转换指令时识别一些特别的指令来产生系统调用的代码。比如异常通常发生在转换后的MIPS指令访问某些限定的内存空间时,当异常发生时MIPS处理器向LINUX发出中断信号,在LINUX上的X86 CPU执行环境模块获取该信号后调用结构化异常处理(SEH)接口。3、WINAPI环境模块本方法中提到的WINAPI环境模块是在LINUX操作系统上构造的WINDOWS子系统,其中包括WINDOWS编程接口、机制和资源。要运行WINDOWS程序就需要提供这些编程接口和WINDOWS机制的模拟。本方法在LINUX操作系统结合一些开源的代码,构造了 WINDOWS子系统,其编程接口涉及WINDOWS操作系统的如下几个方面的功能接 Π
(1)文件接口,以LINUX的文件接口为基础实现WINDOWS的文件功能;
(2)进程接口,以LINUX的进程操作接口为基础实现WINDOWS的进程操作功能;
(3)结构化异常处理(SEH)接口,以LINUX的信号量(SIGNAL)机制为基础实现 WINDOWS的SEH,让在WINAPI环境中运行的WINDOWS软件能抓取到异常信号,这里的信号量 (SIGNAL)机制是指一种LINUX内核用以通知上层程序发生了某种事件的机制;
(4)安全接口,其依据现有的WINDOWS接口标准实现保护环境中的文件、内存、进程和系统对象资源,使其免受有意或无意的代码攻击;
(5)图形组件接口,以LINUX的图形系统(Xll)为基础实现WINDOWS的图形化操作界面。本方法通过上述3大模块,在LINUX操作系统上启动WINDOWS应用软件的方法流程如图1所示。图1描述了三个主要的模块在启动时要处理的任务和主要流程。WINAPI环境模块在启动完毕后装载PE可执行文件,在跳转到可执行文件之前启动动态指令翻译模块,在翻译完毕后开始跳转到X86虚拟CPU执行环境模块中开始执行转换好的MIPS指令。 和常规的X86平台相比,这里就多了一个动态指令翻译环境,并且模拟了一个X86环境,常规的情况则是装载好可执行文件后立即使用一句跳转指令即可开始执行应用程序。其中,启动该WINAPI环境模块后的具体步骤有=LINUX操作系统装载KERNEL32. DLL和NTDLL这两个关键的WINAPI环境模块底层组件,为构造WINAPI环境提供底层接口支持;构造进程环境控制块(PEB)和线程环境控制块(TEB),以便记录和跟踪进程和线程的当前状态,最后用WINAPI环境模块中的装载器加载WINDOWS的应用软件,至此,WINDOWS软件在WINAPI环境模块中的进程创立完成。启动完毕后,那么WINDOWS应用软件(即X86程序)在MIPS版本的LINUX操作上的运行流程如图2所示。根据启动流程中建立的环境,这里描述每个步骤
1、从WINAPI环境模块中读取原始X86指令据启动流程,原始的WINDOWS应用程序是由WINAPI装载、分析和映射到内存的,那么动态指令翻译模块根据分析的结果从WINAPI环境中取得入口处的指令,找到程序的应该被执行的第一条指令开始翻译。2、生成MIPS指令指令转换时通过原始指令的语义来生成MIPS指令,并按照页大小存放到数据结构中以便查询、访问、执行和管理。MIPS指令在执行时退出一般是获取 X86机制的支持,记录程序退出地址,然后判断是不是要请求WINAPI环境,是则访问操作系统功能,不是则是一段MIPS指令执行完成,需要继续翻译下一段指令。3、获取X86机制支持这些MIPS指令原本是X86指令,在翻译成MIPS指令后如果要产生和原来一样的运行效果则依然需要X86体系结构的支持。在翻译指令的时候,本方法是通过指令语义翻译的,那么翻译时将虚拟X86 CPU的寄存器和堆栈等写入到合成的目标MIPS指令。那么目标指令指直接在MIPS CPU上执行,也操作了虚拟的X86 CPU。4、访问WINAPI/访问操作系统功能根据启动流程中描述的装载时连接了依赖的 WINAPI接口,那么当MIPS指令流程在执行的过程中访问这些接口的时候,程序流程则进入 WINAPI模块获取LINUX操作系统上的WINDOWS子系统功能,从而实现应用程序的功能请求。 本环节相当于替换了原生的WINDOWS子系统接口,而挂接到了本方法在LINUX操作系统上的实现的WINDOWS子系统。以上所述仅为本发明的较佳实施例而已,并不用以限制本发明,凡在本发明的精神和原则之内所做的任何修改、等同替换和改进等,均应包含在本发明的保护范围之内。
权利要求
1.一种在MIPS版本的LINUX操作系统上运行WINDOWS应用软件的方法,其特征在于, 该方法包含以下准备步骤在一个MIPS版本的LINUX操作系统上安装WINAPI环境模块,该WINAPI环境模块用于在该LINUX操作系统上提供WINDOWS应用软件运行时所需的与WINDOWS操作系统功能上等价的接口、机制和资源;在该LINUX操作系统上安装X86 CPU执行环境模块,该X86 CPU执行环境模块用于在该LINUX操作系统上模拟一个真实的X86 CPU,以使得WINDOWS应用软件能够识别;在该LINUX操作系统上安装动态指令翻译模块,该动态指令翻译模块用于在WINDOWS 应用软件的源X86指令执行时,根据源X86指令具体执行的位置把源X86指令实时地翻译成功能等价的目标MIPS指令; 该方法还包含以下运行步骤步骤Si,启动该WINAPI环境模块,该WINAPI环境模块装载任意给定一个WINDOWS应用软件的可执行程序,搜索和装载该可执行程序所依赖的动态库,分析该可执行程序以找到该可执行程序的入口地址;步骤S2,启动该动态指令翻译模块,该动态指令翻译模块从该可执行程序的入口地址开始将该可执行程序的源X86指令转换成MIPS指令;步骤S3,启动该X86 CPU执行环境模块,在该X86 CPU执行环境模块所构造的虚拟的 X86 CPU执行环境中执行转换后的MIPS指令,从而实现WINDOWS应用软件在MIPS版本的 LINUX操作系统上的运行。
2.根据权利要求1中所述的一种在MIPS版本的LINUX操作系统上运行WINDOWS应用软件的方法,其特征在于,所述WINAPI环境模块提供的接口包括文件接口,其以LINUX的文件接口为基础实现WINDOWS的文件功能; 进程接口,其以LINUX的进程操作接口为基础实现WINDOWS的进程操作功能; 结构化异常处理接口,其以LINUX的信号量机制为基础实现WINDOWS的SEH ; 安全接口,其依据现有的WINDOWS接口标准实现保护环境中的文件、内存、进程和系统对象资源,使其免受有意或无意的代码攻击;图形组件接口,其以LINUX的Xll图形系统为基础实现WINDOWS的图形化操作界面。
3.根据权利要求1中所述的一种在MIPS版本的LINUX操作系统上运行WINDOWS应用软件的方法,其特征在于,所述X86 CPU执行环境模块包括通用寄存器,其是通过在代码中定义变量来实现的; 程序运行堆栈,其通过开辟内存空间来实现的; CPU机制,包括异常、中断和系统调用。
4.根据权利要求1中所述的一种在MIPS版本的LINUX操作系统上运行WINDOWS应用软件的方法,其特征在于,所述步骤Sl中启动该WINAPI环境模块后还包括以下步骤该LINUX操作系统装载WINAPI环境模块底层组件KERNEL32. DLL和NTDLL,为构造 WINAPI环境提供底层接口支持;构造进程环境控制块和线程环境控制块,以便记录和跟踪进程和线程的当前状态; 用WINAPI环境中的装载器加载WINDOWS的应用软件。
5.根据权利要求1中所述的一种在MIPS版本的LINUX操作系统上运行WINDOWS应用软件的方法,其特征在于,所述步骤S2中将源X86指令转换成MIPS指令的具体步骤是预先将源X86指令做成一个语义解释列表,获取至少一条的源X86指令,对每一条源X86指令,从该列表中获取该条源X86指令的语义解释,再根据该条源X86指令的目的合成对应的一条或多条MIPS指令。
6.根据权利要求1中所述的一种在MIPS版本的LINUX操作系统上运行WINDOWS应用软件的方法,其特征在于,所述获取至少一条的源X86指令是在给定的一条源X86指令的具体执行位置前后偏移2KB字节的多条源X86指令。
全文摘要
本发明公开了一种在MIPS版本的LINUX操作系统上运行WINDOWS应用软件的方法。它通过高速X86指令模拟、CPU环境管理和WINDOWSAPI环境管理等方法使得WINDOWS上的应用软件可以直接在MIPS版本的LINUX操作系统上运行,而无需WINDOWS操作系统,也无须修改WINDOWS软件的源代码。通过本发明方法编制的工具软件,使得用户在MIPS构架的计算机上可以像在X86计算机上随意使用原本只能在WINDOWS平台上运行的软件,而无需关心底层硬件平台和操作系统的差异性,从而扩大了MIPS构架的计算机对应用软件支持的范围,具有很大的实用价值。
文档编号G06F9/46GK102455938SQ20111036368
公开日2012年5月16日 申请日期2011年11月16日 优先权日2011年11月16日
发明者兰雨晴, 夏颖, 姚四海, 王磊 申请人:中标软件有限公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1