CN117075960B - 程序重构方法、应用跨平台迁移方法、装置与计算设备 - Google Patents
程序重构方法、应用跨平台迁移方法、装置与计算设备 Download PDFInfo
- Publication number
- CN117075960B CN117075960B CN202311344740.2A CN202311344740A CN117075960B CN 117075960 B CN117075960 B CN 117075960B CN 202311344740 A CN202311344740 A CN 202311344740A CN 117075960 B CN117075960 B CN 117075960B
- Authority
- CN
- China
- Prior art keywords
- file
- relocation
- instruction
- program
- application
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Active
Links
- 238000000034 method Methods 0.000 title claims abstract description 144
- 238000013508 migration Methods 0.000 title claims abstract description 73
- 230000005012 migration Effects 0.000 title claims abstract description 73
- 230000006870 function Effects 0.000 claims description 46
- 238000006243 chemical reaction Methods 0.000 claims description 11
- 238000003860 storage Methods 0.000 claims description 10
- 230000008859 change Effects 0.000 claims description 4
- 230000001419 dependent effect Effects 0.000 claims description 4
- 238000005516 engineering process Methods 0.000 abstract description 11
- 230000008569 process Effects 0.000 description 50
- 238000013507 mapping Methods 0.000 description 14
- 238000010586 diagram Methods 0.000 description 11
- 230000008901 benefit Effects 0.000 description 8
- 238000011161 development Methods 0.000 description 7
- 238000007726 management method Methods 0.000 description 6
- 238000012423 maintenance Methods 0.000 description 5
- 238000004806 packaging method and process Methods 0.000 description 4
- 238000012545 processing Methods 0.000 description 3
- 238000012546 transfer Methods 0.000 description 3
- 238000004364 calculation method Methods 0.000 description 2
- 238000004891 communication Methods 0.000 description 2
- 230000007246 mechanism Effects 0.000 description 2
- 238000012986 modification Methods 0.000 description 2
- 230000004048 modification Effects 0.000 description 2
- 230000010076 replication Effects 0.000 description 2
- 230000007704 transition Effects 0.000 description 2
- 230000001960 triggered effect Effects 0.000 description 2
- 208000010378 Pulmonary Embolism Diseases 0.000 description 1
- 230000006978 adaptation Effects 0.000 description 1
- 238000004458 analytical method Methods 0.000 description 1
- 230000009286 beneficial effect Effects 0.000 description 1
- 229910002056 binary alloy Inorganic materials 0.000 description 1
- 238000010276 construction Methods 0.000 description 1
- 230000007547 defect Effects 0.000 description 1
- 238000011065 in-situ storage Methods 0.000 description 1
- 238000009434 installation Methods 0.000 description 1
- 238000002955 isolation Methods 0.000 description 1
- 230000000116 mitigating effect Effects 0.000 description 1
- 238000002156 mixing Methods 0.000 description 1
- 238000012856 packing Methods 0.000 description 1
- 230000036961 partial effect Effects 0.000 description 1
- 230000003068 static effect Effects 0.000 description 1
- 238000012360 testing method Methods 0.000 description 1
- 238000013519 translation Methods 0.000 description 1
- 230000007723 transport mechanism Effects 0.000 description 1
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F8/00—Arrangements for software engineering
- G06F8/70—Software maintenance or management
- G06F8/72—Code refactoring
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F8/00—Arrangements for software engineering
- G06F8/70—Software maintenance or management
- G06F8/76—Adapting program code to run in a different environment; Porting
-
- Y—GENERAL TAGGING OF NEW TECHNOLOGICAL DEVELOPMENTS; GENERAL TAGGING OF CROSS-SECTIONAL TECHNOLOGIES SPANNING OVER SEVERAL SECTIONS OF THE IPC; TECHNICAL SUBJECTS COVERED BY FORMER USPC CROSS-REFERENCE ART COLLECTIONS [XRACs] AND DIGESTS
- Y02—TECHNOLOGIES OR APPLICATIONS FOR MITIGATION OR ADAPTATION AGAINST CLIMATE CHANGE
- Y02D—CLIMATE CHANGE MITIGATION TECHNOLOGIES IN INFORMATION AND COMMUNICATION TECHNOLOGIES [ICT], I.E. INFORMATION AND COMMUNICATION TECHNOLOGIES AIMING AT THE REDUCTION OF THEIR OWN ENERGY USE
- Y02D10/00—Energy efficient computing, e.g. low power processors, power management or thermal management
Landscapes
- Engineering & Computer Science (AREA)
- Software Systems (AREA)
- General Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Physics & Mathematics (AREA)
- Stored Programmes (AREA)
Abstract
本发明公开了一种程序重构方法、应用跨平台迁移方法、装置与计算设备,涉及应用迁移技术领域,目的是为了解决现有的跨平台应用迁移技术存在的迁移效率低的问题。程序重构方法包括:为待重构程序对应的第一文件添加文件头,获得中间文件;对中间文件进行文件对齐,得到第二文件,以使第二文件符合第二可执行程序格式的文件对齐要求;确定当前第二文件中的所有第一重定位表项,将每个第一重定位表项对应的绝对地址重定位指令改为相对地址重定位指令,以使第二文件的重定位从基于绝对地址的重定位转换为基于相对地址的重定位。本发明通过添加文件头、文件对齐以及使重定位实现地址无关,能够提高应用跨平台的迁移效率。
Description
技术领域
本发明涉及应用迁移技术领域,尤其是一种程序重构方法、应用跨平台迁移方法、装置与计算设备。
背景技术
随着桌面***及相关技术的快速发展,跨平台运行办公软件、娱乐软件的用户越来越多,进一步推动着其朝着更加稳定、简单的方向发展。
当下操作***发展迅猛,应用生态缺位的劣势进一步凸显,跨平台兼容应用不失为一种可行的过渡方案。目前,操作***相关软件的迁移工作基本由第三方公司和操作***厂商承担,和应用开发商处于分离的状态。这是因为,一方面,应用开发商不了解该技术,应用厂商也对其适配意愿不高;而另一方面,操作***厂商由于没有应用源码,在迁移过程中往往将应用作为黑盒处理,使得迁移效率很低。由此,亟需提高跨平台迁移应用的迁移效率。
发明内容
为此,本发明提供了一种程序重构方法、应用跨平台迁移方法、装置与计算设备,以力图解决或者至少缓解上面存在的至少一个问题。
根据本发明的一个方面,提供了一种程序重构方法,包括:为待重构程序所对应的第一文件添加文件头,以获得中间文件,所述第一文件具有与原操作***相匹配的第一可执行程序格式,所述文件头具有与目标操作***相匹配的第二可执行程序格式;对所述中间文件进行文件对齐,得到第二文件,以使第二文件符合所述第二可执行程序格式的文件对齐要求;确定当前第二文件中的所有第一重定位表项,将每个第一重定位表项对应的绝对地址重定位指令改为相对地址重定位指令,以使第二文件的重定位从基于绝对地址的重定位转换为基于相对地址的重定位。
可选地,在根据本发明的程序重构方法中,所述第一文件为PE文件,所述文件头包括ELF文件头。
可选地,在根据本发明的程序重构方法中,将每个第一重定位表项对应的绝对地址重定位指令改为相对地址重定位指令,以使第二文件的重定位从基于绝对地址的重定位转换为基于相对地址的重定位包括:针对每个第一重定位表项,在该第一重定位表项对应处***相对地址重定位指令;获取当前程序运行时下一条要执行的指令位置与该第一重定位表项的目标位置之间的偏移;利用所述相对地址重定位指令及所述偏移,将该第一重定位表项对应的重定位处地址修改为相对偏移寻址。
可选地,在根据本发明的程序重构方法中,所述在该第一重定位表项对应处***相对地址重定位指令包括:确定该第一重定位表项对应的目标指令,以定位该目标指令所处的函数;根据所述函数的相关信息生成相对地址重定位指令,以基于所述相对地址重定位指令创建与所述第二可执行程序格式匹配的第二重定位表项。
可选地,在根据本发明的程序重构方法中,所述函数的相关信息包括以下信息中的一种或多种:所述函数的指令条数;所述函数的代码空间;所述函数的寄存器使用信息;所述函数的访存信息。
可选地,在根据本发明的程序重构方法中,在创建与所述第二可执行程序格式匹配的第二重定位表项时,将所述相对地址重定位指令中的部分或全部写入预定节区。
可选地,根据本发明的程序重构方法还包括:基于所述第一文件自身所包含的相对寻址指令,修正当前第二文件中的相对地址重定位指令的偏移。
根据本发明的另一方面,还提供了一种应用跨平台迁移方法,包括:将待迁移应用的依赖库通过如上所述的程序重构方法进行重构,得到适于在目标操作***中运行的目标库;将待迁移应用通过兼容层转换为适于在目标操作***中运行的目标应用,所述目标应用适于直接调用所述目标库。
根据本发明的另一方面,还提供了一种程序重构装置,包括:添加单元,适于为待重构程序所对应的第一文件添加文件头,以获得中间文件,所述第一文件具有与原操作***相匹配的第一可执行程序格式,所述文件头具有与目标操作***相匹配的第二可执行程序格式;文件对齐单元,适于对所述中间文件进行文件对齐,得到第二文件,以使第二文件符合所述第二可执行程序格式的文件对齐要求;重定位单元,适于确定当前第二文件中的所有第一重定位表项,将每个第一重定位表项对应的绝对地址重定位指令改为相对地址重定位指令,以使第二文件的重定位从基于绝对地址的重定位转换为基于相对地址的重定位。
根据本发明的另一方面,还提供了一种应用跨平台迁移装置,包括重构模块和转换模块:所述重构模块适于将待迁移应用的依赖库通过如上所述的程序重构方法进行重构,得到适于在目标操作***中运行的目标库;所述转换模块适于将待迁移应用通过兼容层转换为适于在目标操作***中运行的目标应用,所述目标应用适于直接调用所述目标库。
根据本发明的另一方面,还提供了一种计算设备,包括:至少一个处理器和存储有程序指令的存储器;当程序指令被处理器读取并执行时,使得计算设备执行如上的程序重构方法或应用跨平台迁移方法。
根据本发明的再一方面,还提供了一种存储有程序指令的可读存储介质,当程序指令被计算设备读取并执行时,使得计算设备执行如上的程序重构方法或应用跨平台迁移方法。
根据本发明的程序重构方法、应用跨平台迁移方法、装置与计算设备,能够实现至少以下有益效果之一:通过对需要跨操作***运行的应用对应的待重构程序进行重构,即对其通过添加文件头、文件对齐以及使重定位实现地址无关,能够提高跨平台迁移应用的迁移效率,而无需消耗大量的时间和精力;降低由于升级带来的维护成本;对于不同应用公共的开发库可以做到共享,充分减少容器体积;解决了由于不同操作***的文件对齐方式不一致使得无法享受文件映射的好处,进而导致运行时内存激增的问题;通过将文件的绝对地址重定位转换成相对地址重定位,可进一步解决由于重定位导致的文件映射无法共享的问题,能够降低内存占用。
附图说明
为了实现上述以及相关目的,本文结合下面的描述和附图来描述某些说明性方面,这些方面指示了可以实践本文所公开的原理的各种方式,并且所有方面及其等效方面旨在落入所要求保护的主题的范围内。通过结合附图阅读下面的详细描述,本公开的上述以及其它目的、特征和优势将变得更加明显。遍及本公开,相同的附图标记通常指代相同的部件或元素。
图1示出了根据现有技术进行迁移后的应用拓扑图;
图2示出了根据本发明一个实施例的计算设备200的示意图;
图3示出了利用根据本发明实施例的程序重构方法处理后的拓扑图;
图4示出了根据本发明一个实施例的程序重构方法400的流程图;
图5示出了在一个实施例中对PE文件添加文件头的方式的示意图;
图6示出了文件对齐过程的示例性处理的流程图;
图7示出了绝对地址重定位的示例性处理的流程图;
图8示出了图4中的步骤430的一个子处理的示例性流程图;
图9示出了相对地址重定位的示例性处理的流程图;
图10示出了图8中的步骤810的一个子处理的示例性流程图;
图11示出了根据本发明一个实施例的应用跨平台迁移方法1100的流程图;
图12示出了根据本发明一个实施例的程序重构装置1200的结构示意图;
图13示出了根据本发明一个实施例的应用跨平台迁移装置1300的结构示意图。
具体实施方式
下面将参照附图更详细地描述本公开的示例性实施例。虽然附图中显示了本公开的示例性实施例,然而应当理解,可以以各种形式实现本公开而不应被这里阐述的实施例所限制。相反,提供这些实施例是为了能够更透彻地理解本公开,并且能够将本公开的范围完整的传达给本领域的技术人员。
如前文所述,目前,具有跨平台运行应用需求的用户越来越多,例如,用户想要在Linux平台运行Windows应用或macOS应用,在macOS平台运行Windows应用或Linux应用,等等。
例如,想要在Linux上运行Windows应用,离不开Wine(Wine Is Not an Emulator)技术,Wine表示Windows应用程序在Posix(Portable Operating System Interface ofUNIX,可移植操作***接口)***运行的兼容层。然而,由于应用开发商不了解Wine技术,应用厂商针对Wine进行适配意愿不高,此外,操作***厂商由于没有Windows应用源码,其在迁移过程中将Windows应用作为黑盒处理,则使得迁移效率非常低。
此外,由于迁移和开发的这种分离状态,又常常会导致迁移的应用因维护不及时或缺少维护而无法正常使用,这也进一步割裂了这些操作***的体验。
在现有技术中,例如针对Windows应用在Linux下的分发,主要是基于Wine现有条件,在尽可能不修改Windows应用程序二进制的前提下,集中处理应用运行中的问题,当应用运行状态基本良好后,再进行打包和二次发布。该技术包含如下几个主要过程:从应用开发商官网下载Windows应用安装包;在Linux上通过Wine初始化Windows应用运行容器,并在其中安装Windows应用;负责迁移的开发者调试解决Windows应用在Linux下的运行问题;将安装有Windows应用的Wine容器及修复Bug(错误、故障、缺陷、漏洞等)的Wine进行测试、打包、分发。图1给出了迁移后的应用拓扑图,其中,应用1~应用N表示原Windows操作***(或称Windows平台)的N个应用,利用上述现有技术将这N个应用迁移至Linux平台后,对应多个兼容层容器(Wine Bottle,Wine容器)、兼容层资源管理端(Wineserver ,Wine资源管理端),该拓扑图的最下面为兼容层客户端动态链接库(Wine client Libs,Wine客户端动态链接库)。Wine容器是Wine为Windows应用程序提供的运行环境。WineServer是Wine提供的一个组件,用于资源管理和分配,应用程序在运行时作为客户端(Wineclient)向Wineserver发送资源请求。Libs为Windows应用程序依赖的DLL库(即动态链接库)。
在这个过程中,Windows应用的开发者是全程不参与的,迁移开发者针对Bug需要对Wine进行打补丁,由于没有源码,很多解决方案只是由现象推导出来的,无法得到有效的验证,导致解决方案可能并不通用,维护成本高,迁移效率低。此外,不同的Windows应用使用独立的Wine容器,随着用户安装应用增多,Wine容器也会带来不小的存储压力,对于公共的Windows开发库,不同容器无法做到共享。
同时,随着Windows应用的升级,原先打包的容器及Wine需要重新打包及测试,进一步增加了维护成本。此外,现有的技术方案,并没有针对PE(Portable Executable,Windows***的可执行程序格式)文件和ELF(Executable and Linkable Format,Unix/Linux等***的可执行程序格式)文件的差异进行优化,会导致在Linux上分发的包体积及运行时内存占用远远高于Windows,对于在非X86的处理器平台,这将进一步严重影响性能。
下面,介绍一些本发明实施例中所提到的术语。
ELF是一种常见的二进制文件格式,用于表示可执行文件、共享库和目标文件。
重定位(relocation)是编译器和链接器在将目标文件组装成可执行文件时的一个重要步骤,它的目的是解决跨模块或跨文件的符号引用问题,确保程序可以正确地执行。通过全局偏移表(GOT)和过程链接表(Procedure Linkage Table,PLT)可以比较容易地实现ELF文件Position-Independent Code(PIC,地址无关),即通过相对地址寻址方式索引函数或数据。
全局偏移表(GOT)是一个表格,包含了所有全局变量和函数的地址的偏移量。在程序加载时,操作***会为GOT分配空间并填充正确的地址。在PIC代码中,全局变量和函数引用将被替换为对GOT中相应条目的引用。
过程链接表(Procedure Linkage Table,PLT)是一个表格,包含了对函数的调用以及用于解决函数地址的代码。PLT的目的是在第一次调用函数时进行初始化,然后将控制权转移到函数的实际地址。
由此,针对上述跨平台迁移应用效率低的问题,本发明提供了一种程序重构方法以及一种应用跨平台迁移方法,能够对需要跨操作***运行的应用对应的待重构程序(即对应的依赖库)进行重构,提供了一种可行的高效迁移方案,以消除应用开发和应用迁移的鸿沟。
图2示出了根据本发明一个实施例的计算设备200的示意图。需要说明的是,图2所示的计算设备200仅为一个示例,在实践中,用于实施本发明的程序重构方法或应用跨平台迁移方法的计算设备可以是任意型号的设备,其硬件配置情况可以与图2所示的计算设备200相同,也可以与图2所示的计算设备200不同。实践中用于实施本发明的程序重构方法或应用跨平台迁移方法的计算设备可以对图2 所示的计算设备200的硬件组件进行增加或删减,本发明对计算设备的具体硬件配置情况不做限制。
如图2所示,计算设备200典型地包括存储器210以及一个或者多个处理器220。
取决于期望的配置,处理器220可以是任何类型的处理,包括但不限于:微处理器(µP)、微控制器(µC)、数字信息处理器(DSP)或者它们的任何组合。
取决于期望的配置,存储器210可以是任意类型的存储器,包括但不限于:易失性存储器(诸如RAM)、非易失性存储器(诸如ROM、闪存等)或者它们的任何组合。存储器210至少存储有目标操作***211以及执行程序重构方法或应用跨平台迁移方法的程序指令212。
计算设备200可以实现为服务器,例如文件服务器、数据库服务器、应用程序服务器和WEB服务器等,也可以实现为包括桌面计算机和笔记本计算机配置的个人计算机。当然,计算设备200也可以实现为小尺寸便携(或者移动)电子设备的一部分。在根据本发明的实施例中,计算设备200被配置为执行根据本发明的程序重构方法或应用跨平台迁移方法。
根据本发明实施例的一种程序重构方法包括:为待重构程序所对应的第一文件添加文件头,以获得中间文件;所述第一文件具有与原操作***相匹配的第一可执行程序格式,所述文件头具有与目标操作***相匹配的第二可执行程序格式;对所述中间文件进行文件对齐,得到第二文件,以使第二文件符合所述第二可执行程序格式的文件对齐要求;确定当前第二文件中的所有第一重定位表项,将每个第一重定位表项对应的绝对地址重定位指令改为相对地址重定位指令,以使第二文件的重定位从基于绝对地址的重定位转换为基于相对地址的重定位。
应当理解的是,在该实施例以及本发明的其他实施例中,主要以将Windows应用迁移至Linux平台的应用场景为例来进行描述,但本发明的实施例不限于此,也可以是其他跨平台的应用迁移场景,如将Linux应用迁移至Windows平台或macOS平台,又或者将macOS应用迁移至Linux平台或Windows平台,等等。
例如,在将Windows应用迁移至Linux平台的应用场景下,可以通过PE文件重构,为PE应用提供可以共享的PE库,以减少应用分发所占用空间和复杂度。图3示出了上述场景下采用本发明的程序重构方法对Windows程序重构后的一个示例的拓扑图。图3中,相比于图1,在Wine容器与Wine资源管理端之间有PE与ELF混合共享动态链接库(PE ELF Mix SharedLibs),以实现对PE文件的重构。
下面结合图4描述根据本发明一个实施例的程序重构方法400的示例性处理。上述程序重构方法400在计算设备(例如前述计算设备200)中执行。如图4所示,程序重构方法400始于步骤410。
在步骤410中,为待重构程序所对应的第一文件添加文件头,以获得中间文件。
其中,第一文件具有与原操作***相匹配的第一可执行程序格式,文件头具有与目标操作***相匹配的第二可执行程序格式。
原操作***例如是Windows操作***,而目标操作***例如是Linux操作***。
作为示例,第一文件例如为PE文件,文件头例如包括ELF文件头。
图5示出了将第一文件添加文件头后的一个示例。如图5所示,PE文件(作为第一文件的示例)添加的文件头可以包括ELF Header(ELF文件头,如图所示的H1)、DynamicSection Header(动态节区头,如图所示的H2)和TextSection Header(代码节区头,如图所示的H3)。此外,还向第一文件添加重定位表项(Rela),也即数据区(.data)。例如,可以使用Wrapper来对上述H1、H2和H3打包,得到ELF Wrapper(作为文件头的示例),添加至PE文件前,得到如图5右图所示的PE-ELF混合文件。PE-ELF混合文件是添加了ELF信息的PE文件(作为中间文件的示例),它既具有PE文件属性,又具有ELF文件的部分属性。
这样,上述PE-ELF混合文件可以在Linux上被加载器ld.so识别,能像原生Linux应用一样被正常对待。
作为示例,中间文件中可添加用于过渡处理的初始化函数。由于PE文件中的代码无法被Linux原生执行,因此,通过添加的初始化函数能够让PE文件中的代码被Wine的PELoader(PE加载工具)接管,进而完成PE文件的加载。
作为示例,添加的文件头可以用于识别原第一文件的依赖,以避免相同第一文件的重复拷贝和重新加载。例如,通过如图5所示的添加的ELF信息(如ELF文件头、动态节区头、代码节区头和重定位表项),可以很清楚地识别该PE文件的依赖,避免相同PE文件的重复拷贝和重新加载。
接下来,在步骤420中,对中间文件进行文件对齐,对齐后的中间文件作为第二文件。由此,通过上述文件对齐,使得获得的第二文件能够符合第二可执行程序格式的文件对齐要求。
例如,Wine对PE文件的加载和Linux下ld.so对ELF文件的加载方式类似,使用文件映射的方式将PE文件中的代码段以只读的方式载入内存,以避免因为没有对齐而使用读文件的方式读取到内存。但如果没有页面对齐,文件映射将会失败,转而使用文件读取的方式读入文件,从而导致内存激增。
现有技术中,PE文件对齐后通常为512字节,而ELF文件对齐后通常为4K字节,若采用512字节对齐方式进行对齐,则这种非4K对齐会在文件读取时导致大量内存占用。
图6示出了步骤420的文件对齐过程的一个示例性处理。需要说明的是,在图6所示例子中,采用PE文件格式作为第一可执行程序格式的示例、ELF文件格式作为第二可执行程序格式的示例来进行描述,但第一、第二可执行程序格式并不限于此,针对于不同的原操作***、目标操作***,第一、第二可执行程序格式可以不同,这里不再一一赘述。
PE文件对齐为512字节,而ELF文件对齐则普遍为4K字节,为了减轻由于非4K对齐导致大量内存占用的问题,需要将原本不对齐的PE节区重新对齐。
如图6所示,首先在步骤610中加载读取PE文件。Wine对PE的加载和Linux下ld.so对ELF的加载方式类似,使用文件映射的方式将PE中的代码段载入内存。
然后,在步骤620中,对加载读取到的PE文件进行解析。通过上述解析,可以得到解析后的多个节区。
然后,在步骤630中,利用解析后的多个节区对上述PE文件进行文件对齐(如页面对齐)。
接着,在步骤640中进行判断,判断当前页面对齐是否全部完成:若是,则执行步骤650,以写入上述对齐后的文件;否则,则返回,再次执行步骤630,重新进行文件对齐,直到全部完成为止。这样,便得到了4K对齐的PE文件(作为第二文件的示例)。
也就是说,在步骤630中,对于解析得到的节区中存在的未对齐部分(即未对齐的PE节区)进行页面对齐(如4k对齐),直到全部完成再结束处理,并写入磁盘存储,以获得4k对齐的PE文件。
如果没有页面对齐,文件映射将会失败,转而使用文件读取的方式读入文件,从而导致内存激增。通过添加填充生成页面对齐的PE文件,能够在只少量增加单个PE文件大小的情况下,解决现有技术方案中由于文件不对齐带来内存占用的问题。
这样,通过步骤420的文件对齐过程,将原本不对齐的PE节区重新对齐,大大减轻了内存占用情况。
接下来,在步骤430中,确定当前第二文件中的所有第一重定位表项,将每个第一重定位表项对应的绝对地址重定位指令改为相对地址重定位指令,以使第二文件的重定位从基于绝对地址的重定位转换为基于相对地址的重定位。
例如,可以通过解析原第一文件来确定其中的重定位表象,作为当前第二文件中的第一重定位表项。
当多个PE文件加载时,由于加载地址冲突,需要进行重定位。重定位就是把程序的逻辑地址空间变换成内存中的实际物理地址空间的过程,它是实现多道程序在内存中同时运行的基础。重定位包括动态重定位与静态重定位。
PE文件的重定位是绝对地址偏移的,绝对地址重定位方式如图7所示。其中,重定位表项(Relocation)用于记录需要进行重定位的指令位置、重定位的类型(知道如何进行重定位)及其他重定位需要的辅助信息。在现有情况下,如图7所示,由于写时拷贝(Copy-on-Write,COW),会导致重定位的PE文件无法利用文件映射的优势,而导致额外的内存占用。
写时拷贝是一种操作***技术,通常用于在多个进程之间共享资源(如内存或文件),同时确保每个进程在修改共享资源时不会影响其他进程。Linux中的文件写时拷贝通常用于处理以下两种情况:进程复制及内存映射。
对于进程复制而言,当一个进程(作为父进程)通过fork函数创建出另一个进程(作为子进程)时,子进程通常与父进程共享相同的内存映射,包括文件映射。如果父子进程中的任何一个试图修改共享的文件映射,就会触发写时拷贝机制,以确保只有修改的那一部分数据会被拷贝,而不会影响到其他进程。
对于内存映射而言,当多个进程通过mmap()***调用映射同一个文件到它们的虚拟内存地址空间时,写时拷贝也适用。如果某个进程试图修改映射文件中的数据,只有被修改的页面会被拷贝到新的物理内存页,而其他进程仍然可以共享原始数据。
在Linux中,当多个进程共享同一个资源(如文件映射或内存映射)时,内核会将这些进程的页表项指向相同的物理页面。如果其中一个进程尝试写入共享的资源,内核会检测到这个写入操作,并触发写时拷贝机制。内核会为触发写入操作的进程创建一个新的物理页面,并将被修改的数据拷贝到新页面上。然后,更新进程的页表项,使其指向新的物理页面;其他进程仍然指向原始的共享页面,因此它们不受影响。写时拷贝的优势在于它能够减少不必要的内存开销,因为只有在有进程尝试写入时才会发生实际的数据拷贝。这使得多个进程可以高效地共享资源,同时保持数据的隔离性。然而,由于PE文件的绝对地址重定位,需要修改大量文件映射后的页面,因而现有技术无法利用这一优势。
相比于PE文件,可共享ELF文件的重定位一般都是地址无关的,因此可以避免绝对地址重定位带来的写时拷贝问题。ELF可共享是ELF文件自身的特性。通过将PE文件的重定位转换成相对地址重定位,使PE文件实现地址无关,这样,即使多个进程也可以共享同一份PE文件,进一步降低内存占用。实现地址无关后,在linux操作***中通过文件映射的方式,将文件映射到虚拟地址空间,多个进程对同一个文件的写时拷贝由操作***(内核)本身保证,由于PE-ELF文件是地址无关的,因此映射后代码段不会修改,故而拷贝也就不存在,从而实现共享。
在一个示例中,上述将每个第一重定位表项对应的绝对地址重定位指令改为相对地址重定位指令的过程可以包括如图8所示的步骤810~830。
在步骤810中,针对每个第一重定位表项,在该第一重定位表项对应处***相对地址重定位指令。接着,执行步骤820。
在步骤820中,获取当前PC(Program Counter,程序运行时下一条要执行的指令位置)与该第一重定位表项的目标位置之间的偏移。然后,执行步骤830。
在步骤830中,利用相对地址重定位指令及步骤820中得到的偏移,将该第一重定位表项对应的重定位处地址修改为相对偏移寻址。
由此,在本发明的实施例中,通过在PE重定位表项(即前文所述的第一重定位表项)处***指令,获取当前PC(Program Counter,程序运行时下一条要执行的指令的位置)与重定位目标的偏移,然后修改重定位处地址为PC相对偏移寻址,这样就完成了绝对地址重定位到相对地址重定位的转换。相对PC地址偏移重定位方式如图9所示,作为上文所述的相对地址重定位的示例。通过解析PE文件,能够得到重定位处指令类型,以及转换成相对PC寻址需要***的指令,经过一次遍历后(遍历所有的重定位表项),可以确定原PE文件需要扩充的空间,然后对PE文件进行相应的空间拉伸处理后,便可确定各重定位表项与重定位目标的相对偏移。这样,在重定位表项前后***相对PC寻址的指令完成转换过程。
其中,步骤810例如可以通过如图10所示的步骤1010~1020来实现。
如图10所示,在步骤1010中,针对每个第一重定位表项,确定该第一重定位表项对应的目标指令,以定位该目标指令所处的函数。然后,执行步骤1020。
在步骤1020中,根据上述函数的相关信息生成相对地址重定位指令,以基于相对地址重定位指令创建与第二可执行程序格式匹配的第二重定位表项。
其中,函数的相关信息例如可以包括但不限于以下信息中的一种或多种:函数的指令条数;函数的代码空间;函数的寄存器使用信息;函数的访存信息;等等。
此外,相对地址重定位指令例如可以包括但不限于以下指令中的一种或多种:跳转指令;转移指令;访存指令;等等。
作为示例,在创建与第二可执行程序格式匹配的第二重定位表项时,将相对地址重定位指令中的部分或全部写入预定节区。
例如,可以将跳转指令、转移指令以及访存指令的目标写入预定节区。
作为示例,程序重构方法400还可以包括如下步骤:基于第一文件自身所包含的相对寻址(如相对PC寻址)指令,修正当前第二文件中的相对地址重定位指令的偏移。这样,若第一文件(如PE文件)也存在一些相对寻址的指令,通过再次遍历当前第二文件中的所有重定位表项,能够修正相对寻址指令的偏移。
在一个示例中,可以首先解析PE文件(对应于原第一文件),得到其中的重定位表项(对应于第一重定位表项),遍历每一个重定位表项,对其中每个重定位表项进行如下处理:根据该重定位表项,找到对应的目标(即需要进行重定位的指令处),然后定位该指令所处的函数;解析该函数,确定该函数指令条数、代码空间、寄存器使用信息、访存信息,收集以上信息后,确定重定位处指令改成相对地址寻址所需的一条或多条指令,为其创建ELF对应的重定位表项,例如,可以将跳转指令、转移指令、访存指令的目标,写入一个数据区(如.data节区),后续该文件加载时只需针对性修改data节区中的数据即可,代码段再无需修改。这样,上述遍历完成之后,得到新的代码段大小,对应ELF重定位表项。可选地,可以通过再次遍历,来修正相对寻址指令的偏移。
在本发明的实施例中,为了解决现有技术所存在的问题,例如采用重构PE文件结构的方式,为Windows应用在Linux平台上提供一种新的再分发技术方案。通过重构PE文件,可以让Windows应用开发者直接生成符合Linux运行的版本,重构后的PE既具有PE文件属性,又具有ELF文件的部分属性,可以做到像Linux原生应用一样的分发方式。这样就解决了由于升级带来的维护成本,同时Windows应用开发者可以通过提供符号的方式,直接在Linux下进行调试,与应用迁移开发者协同,定位出真正的问题。对于不同应用公共的开发库也可以做到共享,充分减少Wine容器的体积。此外,通过PE文件重构,还可以解决PE文件由于对齐方式和ELF文件不一致、享受不到文件映射的好处而导致运行时内存激增的问题。通过将PE文件的绝对地址重定位改成类似ELF的相对地址重定位,可进一步解决由于重定位导致的文件映射无法共享的问题,降低内存占用,这将极大改善Windows应用在非X86的Linux平台的内存占用过高问题。
如下为根据本发明实施例的程序重构方法的一段算法代码示例:
REBUILD_PIC_PE(file)
new_size<- CACULATE_INSERT_SIZE() + old_size // 在原文件基础上计算新文件的文件大小
new_file<- create empty file with new_size // 创建新文件
R<- all relocation entries // R 表示所有重定位表项
begin<- the base of file // 映射文件到内存的基地址
foreach relocation in R // 遍历所有重定位表项
code<- begin to relocation.addr // 定位到重定位目标地址
new_file<- write code to // 将原文件的代码指令写入新文件
new_file<- insert pc relative addressing code // 在新文件***相对PC寻址代码
begin<- relocation.addr // 更新重定位目标地址
// 计算构建位置无关PE文件所需的磁盘空间大小
CACULATE_INSERT_SIZE
size<- 0 // 大小初始化为0
R<- all relocation entries // R 表示所有重定位表项
foreach relocation in R // 遍历所有重定位表项
type<- the type of instruction relocation belongs to // type表示重定位类型
size += GET_INST_RELATIVE_ADDRESS(type) // 计算新增代码的长度
GET_INST_RELATIVE_ADDRESS(type)
case TYPE1: // TYPE1重定位型 的新增指令大小计算,仅作举例说明
reg<- GET_SPARE_REG() // 获取当前代码片段空闲寄存器
if reg is not NULL then
return (5 + 6) // one call + one add // 新增一条call指令和add指令的长度
else
// need spill one reg
return (5+6) + (1+1) // extra one pop and one push // 新增一条call指令和add指令以及一条push和pop指令的长度
case TYPE2: // 其他重定位型 的新增指令大小计算
根据本发明的实施例,上述程序重构方法例如可以在原操作***中进行,或者,也可以在目标操作***中完成。例如,在原操作***中执行上述程序重构方法,可方便原操作***的应用开发者直接生成符合目标操作***运行的版本。或者,在目标操作***执行上述程序重构方法,则可以由目标操作***的应用迁移开发者完成上述重构工作,通过一段重构程序来快速、高效地完成转化,最终实现迁移。
本发明的实施例还提供了一种应用跨平台迁移方法1100,应用跨平台迁移方法1100可以利用上文结合图4所描述的程序重构方法400来完成应用的跨平台迁移。如图11所示,应用跨平台迁移方法1100包括步骤1110和步骤1120。
在应用跨平台迁移方法1100中,要将原操作***上的应用(即待迁移应用)迁移到目标操作***上使用,这样,可以在步骤1110中,通过程序重构方法400对待迁移应用的依赖库进行重构,得到适于在目标操作***中运行的目标库。待迁移应用的依赖库例如可以通过解析该应用文件获得,解析应用文件获得依赖库的过程例如可以采用现有的解析技术实现,这里不再赘述。
根据本发明的实施例,例如可以通过重构待迁移应用的依赖库对应的PE文件(作为第一文件的示例),来为Windows(作为原操作***的示例)应用开发者直接生成符合Linux(作为目标操作***的示例)运行的版本,重构后的PE文件既具有PE文件属性,又具有ELF文件的部分属性,可以做到像Linux原生应用一样的分发方式。
然后,在步骤1120中,将待迁移应用通过兼容层转换为适于在目标操作***中运行的目标应用,目标应用适于直接调用所述目标库。
例如,当需要将Windows应用迁移到Linux上使用时,对待迁移的Windows应用首先通过步骤1110完成对其依赖库的重构。重构完成后,基于上述重构的目标库,通过Wine实现转换,即,将Windows应用转换为适于在Linux平台运行的Linux应用,从而完成应用的跨平台迁移。
上述根据本发明实施例的应用跨平台迁移方法1100,能够实现便捷的应用跨平台迁移,通过将待迁移应用的依赖库(如PE文件)进行重构转换(例如转换为共享ELF库),使得迁移后的应用可以直接使用这些库,而无需通过wine打包大量文件(如PE库)。
这样,迁移工作可以不需要第三方承担,也可以不需要操作***厂商承担,而是可以由应用开发商来直接处理,不再处于一种迁移工作与应用开发商相分离的状态。或者,迁移工作也可以由应用迁移开发者执行,这样便于减轻应用开发商的工作和成本。
综上可知,本发明实施例的上述技术,通过对需要跨操作***运行的应用对应的待重构程序(即对应的依赖库)进行重构,即对其通过添加文件头、文件对齐以及使重定位实现地址无关,便于原操作***的应用在目标操作***顺利、高效地完成迁移,而无需消耗大量的时间和精力,克服了现有技术针对跨平台应用进行迁移时所存在的迁移效率过低的问题。
在本发明的实施例中,通过混合PE和ELF格式的方法,能够实现Windows PE在Linux上的共享加载技术。通过PE重构,能够实现PE地址无关的重定位方案。
在本发明的实施例中,通过为PE文件添加ELF文件属性,解决了各个Windows应用程序中DLL无法共享的问题,可以将不同的应用程序的共同DLL生成共享DLL,类似ELF共享库,解决由此造成的占用存储的问题,以及运行时内存占用的问题。
在本发明的实施例中,通过PE文件重构将PE的绝对地址重定位转换成相对PC地址偏移重定位,解决了重定位造成的写时拷贝导致内存激增的问题。通过PE文件重构,解决了应用开发商的应用发布依赖操作***厂商的问题,操作***厂商只需专注Wine相关的问题,极大地节省了由于升级、打包引入的工作量。
此外,在本发明的实施例中,由应用开发商进行分发还可以尽量避免其他厂商分发带来的权利风险。
本发明的实施例还提供了一种程序重构装置1200,如图12所示,该装置能够执行如上文所描述的程序重构方法400的各步骤处理。下面,结合图12来描述上述程序重构装置1200。
如图12所示,程序重构装置1200包括添加单元1210、文件对齐单元1220和重定位单元1230。
添加单元1210适于为待重构程序所对应的第一文件添加文件头,以获得中间文件,第一文件具有与原操作***相匹配的第一可执行程序格式,文件头具有与目标操作***相匹配的第二可执行程序格式。
文件对齐单元1220适于对中间文件进行文件对齐,得到第二文件,以使第二文件符合第二可执行程序格式的文件对齐要求。
重定位单元1230适于确定当前第二文件中的所有第一重定位表项,将每个第一重定位表项对应的绝对地址重定位指令改为相对地址重定位指令,以使第二文件的重定位从基于绝对地址的重定位转换为基于相对地址的重定位。
作为示例,第一文件例如为PE文件,文件头例如包括ELF文件头。
作为示例,重定位单元1230可以适于:针对每个第一重定位表项,确定该第一重定位表项对应的目标指令,以定位该目标指令所处的函数;根据函数的相关信息生成相对地址重定位指令,以基于相对地址重定位指令创建与第二可执行程序格式匹配的第二重定位表项。
作为示例,函数的相关信息可以包括以下信息中的一种或多种:函数的指令条数;函数的代码空间;函数的寄存器使用信息;函数的访存信息;等等。
作为示例,相对地址重定位指令可以包括以下指令中的一种或多种:跳转指令;转移指令;访存指令;等等。
作为示例,在创建与第二可执行程序格式匹配的第二重定位表项时,可以将相对地址重定位指令中的部分或全部写入预定节区。
作为示例,重定位单元1230还适于:基于第一文件自身所包含的相对寻址指令,修正当前第二文件中的相对地址重定位指令的偏移。
本发明的实施例还提供了一种应用跨平台迁移装置1300,如图13所示,该装置能够执行如上文所描述的应用跨平台迁移方法1100的各步骤处理。下面,结合图13来描述上述应用跨平台迁移装置1300。
如图13所示,应用跨平台迁移装置1300包括重构模块1310和转换模块1320。
其中,重构模块1310适于将待迁移应用的依赖库通过如上所述的程序重构方法进行重构,得到适于在目标操作***中运行的目标库。
转换模块1320适于将待迁移应用通过兼容层转换为适于在目标操作***中运行的目标应用,所述目标应用适于直接调用所述目标库。
目前,现有技术中将Windows应用迁移到Linux需要两套文件***(作为示例应用场景),对于迁移、打包、发布、更新、管理极不方便,而根据本发明实施例的上述程序重构方法和应用跨平台迁移方法,通过融合两种文件***的优势,新构建一种基于Wine的可执行文件格式,更加适合Windows应用在Linux平台的再次分发。此外,根据本发明实施例的上述技术还降低了迁移和发布的难度,能够节省应用包空间大小,缩窄原Windows应用和迁移开发者之间的距离,节省Windows应用在Linux平台的迁移发布时间。
此外,在本发明的实施例中,在构造ELF-PE混合二进制的文件格式下,通过PC相对偏移地址将PE的绝对地址重定位转换成类似ELF的相对地址重定位,实现PE文件的完全文件映射,减少内存页的修改。此外,通过为其添加依赖信息,自动完成库依赖的管理,通过***ld.so完成混合二进制的加载、重定位,进一步降低对Wine的依赖,节省运行时的开销,提升程序性能。
这里描述的各种技术可结合硬件或软件,或者它们的组合一起实现。从而,本发明的方法和装置,或者本发明的方法和装置的某些方面或部分可采取嵌入有形媒介,例如可移动硬盘、U盘、软盘、CD-ROM或者其它任意机器可读的存储介质中的程序代码(即指令)的形式,其中当程序被载入诸如计算机之类的机器,并被所述机器执行时,所述机器变成实践本发明的装置。
在程序代码在可编程计算机上执行的情况下,计算设备一般包括处理器、处理器可读的存储介质(包括易失性和非易失性存储器和/或存储元件),至少一个输入装置,和至少一个输出装置。其中,存储器被配置用于存储程序代码;处理器被配置用于根据该存储器中存储的所述程序代码中的指令,执行本发明的程序重构方法或应用跨平台迁移方法。
以示例而非限制的方式,可读介质包括可读存储介质和通信介质。可读存储介质存储诸如计算机可读指令、数据结构、程序模块或其它数据等信息。通信介质一般以诸如载波或其它传输机制等已调制数据信号来体现计算机可读指令、数据结构、程序模块或其它数据,并且包括任何信息传递介质。以上的任一种的组合也包括在可读介质的范围之内。
在此处所提供的说明书中,算法和显示不与任何特定计算机、虚拟***或者其它设备固有相关。各种通用***也可以与本发明的示例一起使用。根据上面的描述,构造这类***所要求的结构是显而易见的。此外,本发明也不针对任何特定编程语言。应当明白,可以利用各种编程语言实现在此描述的本发明的内容,并且上面对特定语言所做的描述是为了披露本发明的优选实施方式。
在此处所提供的说明书中,说明了大量具体细节。然而,能够理解,本发明的实施例可以在没有这些具体细节的情况下被实践。在一些实例中,并未详细示出公知的方法、结构和技术,以便不模糊对本说明书的理解。
类似地,应当理解,为了精简本公开并帮助理解各个发明方面中的一个或多个,在上面对本发明的示例性实施例的描述中,本发明的各个特征有时被一起分组到单个实施例、图、或者对其的描述中。本领域那些技术人员应当理解在本文所公开的示例中的设备的模块或单元或组件可以布置在如该实施例中所描述的设备中,或者可替换地可以定位在与该示例中的设备不同的一个或多个设备中。前述示例中的模块可以组合为一个模块或者此外可以分成多个子模块。
本领域那些技术人员可以理解,可以对实施例中的设备中的模块进行自适应性地改变并且把它们设置在与该实施例不同的一个或多个设备中。可以把实施例中的模块或单元或组件组合成一个模块或单元或组件,以及此外可以把它们分成多个子模块或子单元或子组件。除了这样的特征和/或过程或者单元中的至少一些是相互排斥之外,可以采用任何组合对本说明书中公开的所有特征以及如此公开的任何方法或者设备的所有过程或单元进行组合。除非另外明确陈述,本说明书中公开的每个特征可以由提供相同、等同或相似目的的替代特征来代替。
此外,本领域的技术人员能够理解,尽管在此所述的一些实施例包括其它实施例中所包括的某些特征而不是其它特征,但是不同实施例的特征的组合意味着处于本发明的范围之内并且形成不同的实施例。此外,所述实施例中的一些在此被描述成可以由计算机***的处理器或者由执行所述功能的其它装置实施的方法或方法元素的组合。因此,具有用于实施所述方法或方法元素的必要指令的处理器形成用于实施该方法或方法元素的装置。此外,装置实施例在此所述的元素是如下装置的例子:该装置用于实施由为了实施该发明的目的的元素所执行的功能。
如在此所使用的那样,除非另行规定,使用序数词“第一”、“第二”、“第三”等等来描述普通对象仅仅表示涉及类似对象的不同实例,并不意图暗示这样被描述的对象必须具有时间上、空间上、排序方面或者以任意其它方式的给定顺序。
尽管根据有限数量的实施例描述了本发明,但是受益于上面的描述,本技术领域内的技术人员明白,在由此描述的本发明的范围内,可以设想其它实施例。此外,应当注意,本说明书中使用的语言主要是为了可读性和教导的目的而选择的,而不是为了解释或者限定本发明的主题而选择的。
Claims (10)
1.程序重构方法,其特征在于,包括:
为待重构程序所对应的第一文件添加文件头,以获得中间文件,所述第一文件具有与原操作***相匹配的第一可执行程序格式,所述文件头具有与目标操作***相匹配的第二可执行程序格式;
对所述中间文件进行文件对齐,得到第二文件,以使第二文件符合所述第二可执行程序格式的文件对齐要求;
确定当前第二文件中的所有第一重定位表项,将每个第一重定位表项对应的绝对地址重定位指令改为相对地址重定位指令,以使第二文件的重定位从基于绝对地址的重定位转换为基于相对地址的重定位;
所述将每个第一重定位表项对应的绝对地址重定位指令改为相对地址重定位指令包括:针对每个第一重定位表项,在该第一重定位表项对应处***相对地址重定位指令;获取当前程序运行时下一条要执行的指令位置与该第一重定位表项的目标位置之间的偏移;利用所述相对地址重定位指令及所述偏移,将该第一重定位表项对应的重定位处地址修改为相对偏移寻址;
所述在该第一重定位表项对应处***相对地址重定位指令包括:确定该第一重定位表项对应的目标指令,以定位该目标指令所处的函数;根据所述函数的相关信息生成相对地址重定位指令,以基于所述相对地址重定位指令创建与所述第二可执行程序格式匹配的第二重定位表项。
2.根据权利要求1所述的程序重构方法,其特征在于,所述第一文件为PE文件,所述文件头包括ELF文件头。
3.根据权利要求1所述的程序重构方法,其特征在于,所述函数的相关信息包括以下信息中的一种或多种:
所述函数的指令条数;所述函数的代码空间;所述函数的寄存器使用信息;所述函数的访存信息。
4.根据权利要求1所述的程序重构方法,其特征在于,在创建与所述第二可执行程序格式匹配的第二重定位表项时,将所述相对地址重定位指令中的部分或全部写入预定节区。
5.根据权利要求1-4中任一项所述的程序重构方法,其特征在于,还包括:
基于所述第一文件自身所包含的相对寻址指令,修正当前第二文件中的相对地址重定位指令的偏移。
6.应用跨平台迁移方法,其特征在于,包括:
将待迁移应用的依赖库通过如权利要求1-5中任一项所述的程序重构方法进行重构,得到适于在目标操作***中运行的目标库;
将待迁移应用通过兼容层转换为适于在目标操作***中运行的目标应用,所述目标应用适于直接调用所述目标库。
7.程序重构装置,其特征在于,包括:
添加单元,适于为待重构程序所对应的第一文件添加文件头,以获得中间文件,所述第一文件具有与原操作***相匹配的第一可执行程序格式,所述文件头具有与目标操作***相匹配的第二可执行程序格式;
文件对齐单元,适于对所述中间文件进行文件对齐,得到第二文件,以使第二文件符合所述第二可执行程序格式的文件对齐要求;
重定位单元,适于确定当前第二文件中的所有第一重定位表项,将每个第一重定位表项对应的绝对地址重定位指令改为相对地址重定位指令,以使第二文件的重定位从基于绝对地址的重定位转换为基于相对地址的重定位;
所述重定位单元适于通过执行如下处理来将每个第一重定位表项对应的绝对地址重定位指令改为相对地址重定位指令:针对每个第一重定位表项,在该第一重定位表项对应处***相对地址重定位指令;获取当前程序运行时下一条要执行的指令位置与该第一重定位表项的目标位置之间的偏移;利用所述相对地址重定位指令及所述偏移,将该第一重定位表项对应的重定位处地址修改为相对偏移寻址;
所述重定位单元适于通过执行如下处理来在该第一重定位表项对应处***相对地址重定位指令:确定该第一重定位表项对应的目标指令,以定位该目标指令所处的函数;根据所述函数的相关信息生成相对地址重定位指令,以基于所述相对地址重定位指令创建与所述第二可执行程序格式匹配的第二重定位表项。
8.应用跨平台迁移装置,其特征在于,包括重构模块和转换模块:
所述重构模块适于将待迁移应用的依赖库通过如权利要求1-5中任一项所述的程序重构方法进行重构,得到适于在目标操作***中运行的目标库;
所述转换模块适于将待迁移应用通过兼容层转换为适于在目标操作***中运行的目标应用,所述目标应用适于直接调用所述目标库。
9.一种计算设备,其特征在于,包括:
至少一个处理器和存储有程序指令的存储器;
当所述程序指令被所述处理器读取并执行时,使得所述计算设备执行如权利要求1-5中任一项所述的程序重构方法或如权利要求6所述的应用跨平台迁移方法。
10.一种存储有程序指令的可读存储介质,其特征在于,当所述程序指令被计算设备读取并执行时,使得所述计算设备执行如权利要求1-5中任一项所述的程序重构方法或如权利要求6所述的应用跨平台迁移方法。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202311344740.2A CN117075960B (zh) | 2023-10-17 | 2023-10-17 | 程序重构方法、应用跨平台迁移方法、装置与计算设备 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202311344740.2A CN117075960B (zh) | 2023-10-17 | 2023-10-17 | 程序重构方法、应用跨平台迁移方法、装置与计算设备 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN117075960A CN117075960A (zh) | 2023-11-17 |
CN117075960B true CN117075960B (zh) | 2024-01-23 |
Family
ID=88715713
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202311344740.2A Active CN117075960B (zh) | 2023-10-17 | 2023-10-17 | 程序重构方法、应用跨平台迁移方法、装置与计算设备 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN117075960B (zh) |
Families Citing this family (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN118194252B (zh) * | 2024-05-17 | 2024-07-30 | 宁波如磐科技有限公司 | 一种Windows内核驱动程序的保护方法和装置 |
Citations (9)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
KR20120114926A (ko) * | 2011-04-08 | 2012-10-17 | 주식회사 아이리버 | 바이너리 실행파일 생성을 위한 프로그래밍 방법 |
WO2017067175A1 (zh) * | 2015-10-21 | 2017-04-27 | 百度在线网络技术(北京)有限公司 | 一种加载elf文件的方法、装置、设备和计算机存储介质 |
CN110765027A (zh) * | 2019-12-27 | 2020-02-07 | 中国人民解放军国防科技大学 | 一种pe文件地址定位*** |
CN111124550A (zh) * | 2020-03-26 | 2020-05-08 | 北京翼辉信息技术有限公司 | 一种程序动态加载方法、装置及存储介质 |
CN113672597A (zh) * | 2021-09-03 | 2021-11-19 | 中国银行股份有限公司 | 数据库跨平台迁移方法、装置、***和设备 |
CN114357454A (zh) * | 2021-12-13 | 2022-04-15 | 安天科技集团股份有限公司 | 二进制可执行文件依赖库分析方法、装置、电子设备及存储介质 |
CN114610384A (zh) * | 2020-12-08 | 2022-06-10 | 腾讯科技(深圳)有限公司 | 一种应用迁移方法、装置、设备及存储介质 |
WO2022237610A1 (zh) * | 2021-05-10 | 2022-11-17 | 阿里巴巴(中国)有限公司 | 程序编译和程序加载方法 |
US11586515B1 (en) * | 2022-05-18 | 2023-02-21 | Snowflake Inc. | Data ingestion replication and disaster recovery |
-
2023
- 2023-10-17 CN CN202311344740.2A patent/CN117075960B/zh active Active
Patent Citations (9)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
KR20120114926A (ko) * | 2011-04-08 | 2012-10-17 | 주식회사 아이리버 | 바이너리 실행파일 생성을 위한 프로그래밍 방법 |
WO2017067175A1 (zh) * | 2015-10-21 | 2017-04-27 | 百度在线网络技术(北京)有限公司 | 一种加载elf文件的方法、装置、设备和计算机存储介质 |
CN110765027A (zh) * | 2019-12-27 | 2020-02-07 | 中国人民解放军国防科技大学 | 一种pe文件地址定位*** |
CN111124550A (zh) * | 2020-03-26 | 2020-05-08 | 北京翼辉信息技术有限公司 | 一种程序动态加载方法、装置及存储介质 |
CN114610384A (zh) * | 2020-12-08 | 2022-06-10 | 腾讯科技(深圳)有限公司 | 一种应用迁移方法、装置、设备及存储介质 |
WO2022237610A1 (zh) * | 2021-05-10 | 2022-11-17 | 阿里巴巴(中国)有限公司 | 程序编译和程序加载方法 |
CN113672597A (zh) * | 2021-09-03 | 2021-11-19 | 中国银行股份有限公司 | 数据库跨平台迁移方法、装置、***和设备 |
CN114357454A (zh) * | 2021-12-13 | 2022-04-15 | 安天科技集团股份有限公司 | 二进制可执行文件依赖库分析方法、装置、电子设备及存储介质 |
US11586515B1 (en) * | 2022-05-18 | 2023-02-21 | Snowflake Inc. | Data ingestion replication and disaster recovery |
Also Published As
Publication number | Publication date |
---|---|
CN117075960A (zh) | 2023-11-17 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN109491695B (zh) | 一种集成安卓应用的增量更新方法 | |
CN109614165B (zh) | 一种com组件的多版本并行运行方法和装置 | |
US8156482B2 (en) | System and method for efficiently generating native code calls from byte code in virtual machines | |
EP1214645B1 (en) | Method and system for distributing object-oriented computer programs | |
CN108139921B (zh) | 仿真器的性能优化方法及*** | |
US11507362B1 (en) | System and method for generating a binary patch file for live patching of an application | |
BRPI0618027A2 (pt) | configuração de extensões isoladas e acionadores de dispositivo | |
CN117075960B (zh) | 程序重构方法、应用跨平台迁移方法、装置与计算设备 | |
KR20080047444A (ko) | 확장 가능한 메타 데이터 | |
US8615743B2 (en) | Adaptive compiled code | |
CN113867768A (zh) | 操作***处理方法、装置、电子设备及存储介质 | |
US11231918B1 (en) | Native emulation compatible application binary interface for supporting emulation of foreign code | |
CN114490103A (zh) | 一种操作***接口调用方法、装置以及电子设备 | |
CN113641389B (zh) | 基于OpenCPU的软件升级方法、装置及设备 | |
CN115658275A (zh) | 一种可执行程序迁移方法、装置与计算设备 | |
CN113220314B (zh) | App资源加载及apk生成方法、装置、设备及介质 | |
US11042422B1 (en) | Hybrid binaries supporting code stream folding | |
CN115167862A (zh) | 补丁方法及相关设备 | |
CN116243971B (zh) | 一种基于静态依赖自举的内核无关的模块构建方法 | |
CN113535566B (zh) | 一种安卓应用校验方法、装置、设备及存储介质 | |
CN115421875B (zh) | 二进制翻译方法及装置 | |
KR20070081868A (ko) | 이동통신시스템에서 효율적으로 소프트웨어를 업데이트하는방법 | |
CN114253523A (zh) | 读取裸设备的方法、装置、计算机设备和介质 | |
CN117421018A (zh) | 应用更新方法、计算设备及计算机存储介质 | |
CN112416418A (zh) | 应用组件的生成方法、装置、计算机设备和可读存储介质 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant | ||
GR01 | Patent grant |