CN103631971A - 一种可移植的执行体文件的重组方法和装置 - Google Patents
一种可移植的执行体文件的重组方法和装置 Download PDFInfo
- Publication number
- CN103631971A CN103631971A CN201310714655.0A CN201310714655A CN103631971A CN 103631971 A CN103631971 A CN 103631971A CN 201310714655 A CN201310714655 A CN 201310714655A CN 103631971 A CN103631971 A CN 103631971A
- Authority
- CN
- China
- Prior art keywords
- file
- function logic
- logic sequence
- execution body
- record
- 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.)
- Granted
Links
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/44—Arrangements for executing specific programs
- G06F9/445—Program loading or initiating
- G06F9/44568—Immediately runnable code
- G06F9/44578—Preparing or optimising for loading
Landscapes
- Engineering & Computer Science (AREA)
- Software Systems (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Devices For Executing Special Programs (AREA)
Abstract
本发明公开了一种可移植的执行体文件的重组方法和装置,所述方法包括:读取原可移植的执行体文件中功能逻辑序列;获取所述功能逻辑序列的调用记录;采用所述调用记录生成排序位置;按照所述排序位置重组所述功能逻辑序列,获得目标可移植的执行体文件。本发明获取可移植的执行体文件的功能逻辑序列的调用记录生成排序位置,再按照排序位置重组功能逻辑序列,使得CPU可以直接在内存中读取功能逻辑序列,避免了CPU频繁读磁盘,降低了系统资源的耗费,减少了缺页中断的产生,从而加快了应用程序的冷启动速度。
Description
技术领域
本发明涉及数据优化的技术领域,具体涉及一种可移植的执行体文件的重组方法和一种可移植的执行体文件的重组装置。
背景技术
文件是一些在计算机磁盘上连续存放的二进制的数据。对于不同的操作系统,其可执行文件的格式是不同的。在Win9x、Win NT/2000/XP下,32位的可执行文件的格式是PE(Portable Executable,可移植的可执行文件)。例如在Windows平台下,Win32可执行文件,如*.EXE、*.DLL、*.OBJ、*.COX等,都是PE格式。
可执行文件的编译是从源代码(通常为高级语言)到能直接被计算机或虚拟机执行的目标代码(通常为低级语言或机器语言)的翻译过程。典型的编译器输出是由包含入口点的名字和地址,以及外部调用(到不在这个目标文件中的函数调用)的机器代码所组成的目标文件。一组目标文件,不必是同一编译器产生,但使用的编译器必需采用同样的输出格式,可以链接在一起并生成可以由用户直接执行的EXE,即计算机上的文件都是经过编译后的文件。
链接器(Linker)是一个程序,将一个或多个由编译器或汇编器生成的目标文件外加库链接为一个可执行文件。
目标文件是包括机器码和链接器可用信息的程序模块。简单的讲,链接器的工作就是解析未定义的符号引用,将目标文件中的占位符替换为符号的地址。链接器还要完成程序中各目标文件的地址空间的组织,这可能涉及重定位工作。
在可执行文件(例如浏览器)的编译过程中,某些链接器(例如VisualStudio)生成的函数符号默认是无序的。而可执行文件(例如浏览器)在冷启动时会去寻找并执行这些符号所在的代码段,默认情况下,浏览器会优先从内存中寻找,当找不到的情况下,处理器会产生缺页中断,此时处理器会从硬盘中取出那一页放入内存。然而函数符号的无序性会导致这种缺页中断发生的频率远高于实际所需的次数,由于硬盘的速度远慢于内存,频繁地读取硬盘严重地影响了启动速度。此外,频繁从硬盘中读取代码到内存也会导致可执行文件(例如浏览器)运行时占用的内存增加。
发明内容
鉴于上述问题,提出了本发明以便提供一种克服上述问题或者至少部分地解决上述问题的一种可移植的执行体文件的重组方法和相应的一种可移植的执行体文件的重组装置。
依据本发明的一个方面,提供了一种可移植的执行体文件的重组方法,包括:
读取原可移植的执行体文件中功能逻辑序列;
获取所述功能逻辑序列的调用记录;
采用所述调用记录生成排序位置;
按照所述排序位置重组所述功能逻辑序列,获得目标可移植的执行体文件。
可选地,所述获取所述功能逻辑序列的调用记录的步骤包括:
在所述原可移植的执行体文件中植入追踪组件;
运行所述原可移植的执行体文件归属的应用程序;
采用所述追踪组件记录所述功能逻辑序列的调用信息。
可选地,所述获取所述功能逻辑序列的调用记录的步骤还包括:
采用所述追踪组件记录所述功能逻辑序列在调用时,与所述应用程序中的进程以及线程的对应关系。
可选地,所述在所述原可移植的执行体文件中植入追踪组件的步骤包括:
在所述原可移植的执行体文件中的导入表中添加所述追踪组件的标识;
采用所述追踪组件为每个功能逻辑序列创建对应的调用组件。
可选地,所述采用所述追踪组件记录所述功能逻辑序列的调用信息的步骤包括:
当所述功能逻辑序列被调用时,通过所述调用组件调用所述追踪组件;
采用所述追踪组件记录当前功能逻辑序列的地址信息及调用时间。
可选地,所述采用所述调用记录生成排序位置的步骤包括:
按照所述调用时间对所述功能逻辑序列的地址信息进行排序,获得排序位置。
可选地,所述按照所述排序位置重组所述功能逻辑序列,获得目标可移植的执行体文件的步骤包括:
按照排序后的地址信息将对应的功能逻辑序列进行重组,获得目标可移植的执行体文件。
可选地,还包括:
采用所述排序位置更新所述目标可移植的执行体文件归属的应用程序的程序数据库文件。
可选地,所述采用所述排序位置更新所述可移植的执行体文件归属的应用程序的程序数据库文件的步骤包括:
将重组后的地址信息更新至所述程序数据库文件存储的所述目标可移植的执行体文件的地址信息。
可选地,还包括:
将所述目标可移植的执行体文件、所述程序数据库文件和组成文件生成应用程序安装包;所述组成文件为除所述目标可移植的执行体文件和所述程序数据库文件外组成所述应用程序的文件。
根据本发明的另一方面,提供了一种可移植的执行体文件的重组装置,包括:
功能逻辑序列读取模块,适于读取原可移植的执行体文件中功能逻辑序列;
调用记录获取模块,适于获取所述功能逻辑序列的调用记录;
排序位置生成模块,适于采用所述调用记录生成排序位置;
重组模块,适于按照所述排序位置重组所述功能逻辑序列,获得目标可移植的执行体文件。
可选地,所述调用记录获取模块还适于:
在所述原可移植的执行体文件中植入追踪组件;
运行所述原可移植的执行体文件归属的应用程序;
采用所述追踪组件记录所述功能逻辑序列的调用信息。
可选地,所述调用记录获取模块还适于:
采用所述追踪组件记录所述功能逻辑序列在调用时,与所述应用程序中的进程以及线程的对应关系。
可选地,所述调用记录获取模块还适于:
在所述原可移植的执行体文件中的导入表中添加所述追踪组件的标识;
采用所述追踪组件为每个功能逻辑序列创建对应的调用组件。
可选地,所述调用记录获取模块还适于:
当所述功能逻辑序列被调用时,通过所述调用组件调用所述追踪组件;
采用所述追踪组件记录当前功能逻辑序列的地址信息及调用时间。
可选地,所述排序位置生成模块还适于:
按照所述调用时间对所述功能逻辑序列的地址信息进行排序,获得排序位置。
可选地,所述重组模块还适于:
按照排序后的地址信息将对应的功能逻辑序列进行重组,获得目标可移植的执行体文件。
可选地,还包括:
程序数据库文件更新模块,适于采用所述排序位置更新所述目标可移植的执行体文件归属的应用程序的程序数据库文件。
可选地,所述程序数据库文件更新模块还适于:
将重组后的地址信息更新至所述程序数据库文件存储的所述目标可移植的执行体文件的地址信息。
可选地,还包括:
安装包生成模块,适于将所述目标可移植的执行体文件、所述程序数据库文件和组成文件生成应用程序安装包;所述组成文件为除所述目标可移植的执行体文件和所述程序数据库文件外组成所述应用程序的文件。
本发明获取可移植的执行体文件的功能逻辑序列的调用记录生成排序位置,再按照排序位置重组功能逻辑序列,使得CPU可以直接在内存中读取功能逻辑序列,避免了CPU频繁读磁盘,降低了系统资源的耗费,减少了缺页中断的产生,从而加快了应用程序的冷启动速度。
本发明实施例可以将重组后的可移植的执行体文件、更新后的程序数据库文件和其他组成文件生成应用程序安装包,其他用户给予词安装包进行应用程序的安装,可以大大减少其他用户重组可移植的执行体文件的步骤,大大减少了其他用户的设备的系统资源耗费。
上述说明仅是本发明技术方案的概述,为了能够更清楚了解本发明的技术手段,而可依照说明书的内容予以实施,并且为了让本发明的上述和其它目的、特征和优点能够更明显易懂,以下特举本发明的具体实施方式。
附图说明
通过阅读下文优选实施方式的详细描述,各种其他的优点和益处对于本领域普通技术人员将变得清楚明了。附图仅用于示出优选实施方式的目的,而并不认为是对本发明的限制。而且在整个附图中,用相同的参考符号表示相同的部件。在附图中:
图1示出了根据本发明一个实施例的一种可移植的执行体文件的重组方法实施例1的步骤流程图;
图2示出了根据本发明一个实施例的一种可移植的执行体文件的结构示意图;
图3示出了根据本发明一个实施例的一种在可移植的执行体文件重组前的缺页异常的示例图;
图4示出了根据本发明一个实施例的一种在可移植的执行体文件重组后的缺页异常的示例图;
图5示出了根据本发明一个实施例的一种可移植的执行体文件的重组方法实施例2的步骤流程图;
图6示出了根据本发明一个实施例的一种可移植的执行体文件的重组装置实施例1的结构框图;以及,
图7示出了根据本发明一个实施例的一种可移植的执行体文件的重组装置实施例2的结构框图。
具体实施方式
下面将参照附图更详细地描述本公开的示例性实施例。虽然附图中显示了本公开的示例性实施例,然而应当理解,可以以各种形式实现本公开而不应被这里阐述的实施例所限制。相反,提供这些实施例是为了能够更透彻地理解本公开,并且能够将本公开的范围完整的传达给本领域的技术人员。
参照图1,示出了根据本发明一个实施例的一种可移植的执行体文件的重组方法实施例1的步骤流程图,具体可以包括如下步骤:
步骤101,读取原可移植的执行体文件中功能逻辑序列;
需要说明的是,原可移植的执行体文件(PE文件)可以为应用程序中的主DLL(Dynamic Link Library,动态链接库)文件。一个应用程序可以有很多个模块组成,其中大部分都是些扩展插件以及其他一些小程序,主DLL文件可以为实现应用程序的基础部分功能的文件。
参照图2,示出了本发明一个实施例的一种可移植的执行体文件的结构示意图。如图2所示,PE文件可以分为DOS部分、PE头、节表和节数据。
其中,DOS部分可以包括MS-DOS MZ头部和MS-DOS实模式参与程序。
MS-DOS MZ头部:通常情况DOS MZ头总共占用64byte。所有PE文件以一个简单的DOS MZ header开始。一旦PE文件归属的应用程序在DOS下执行,DOS就能从DOS MZ头识别出这是有效的执行体,然后运行紧随DOS MZ header之后的DOS程序,以此达到对DOS系统的兼容。
MS-DOS实模式残余程序:实际上是个有效的EXE,在不支持PE文件格式的操作系统中,它将简单显示一个错误提示,大多数情况下它是由汇编编译器自动生成。通常,它简单调用中断21h,服务9来显示字符串"This program cannot run in DOS mode"。在编写应用程序中,MS-DOS实模式残余程序不是必须的,可以不予以实现,但是要保留其大小,大小为112byte,为了简洁,可以使用00来填充。
PE头可以包括PE文件标识、PE文件头和PE文件可选头。
PE文件标志:是PE文件结构的起始标志(长度4byte,Windows程序此值为0x50450000)。
PE文件头:是PE相关结构IMAGE_NT_HEADERS的简称,其中包含了许多PE装载器用到的重要域。执行体在支持PE文件结构的操作系统中执行时,PE装载器将从DOS MZ header中找到PE header的起始偏移量,跳过了MS-DOS实模式残余程序,直接定位到真正的文件头PE header,长度20byte。
PE文件可选头:长度224byte,包含了很多关于PE文件的重要信息,例如初始的堆栈大小、程序入口点的位置、首选基地址、操作系统版本、段对齐的信息等等。PE文件可选头在不同的平台下可以是不一样的,例如在32位的平台下是IMAGE_OPTIONAL_HEADER32,而在64位的平台下是IMAGE_OPTIONAL_HEADER64。
节表中可以记载了各段头部。
各段头部:又称节头部,每个段头部占40byte,描述了PE文件中各个节的详细信息。节表的每个条目存储一个文件的实际数据被映射到内存中的地址。一个Windows NT的应用程序典型地拥有9个预定义段(节),它们是“.text”、“.bss”、“.rdata”、“.data”、“.rsrc”、“.edata”、“.idata”、“.pdata”和“.debug”。一些应用程序不需要所有的这些段,同样还有些应用程序为了自己特殊的需要而定义了更多的段。
节数据可以记载了各段实体数据。
各段实体数据:包含了文件的内容。具体包括代码、数据、资源以及其它可执行信息,每个段都有一个头部和一个实体(原始数据)。常用的节名称可以包括“.text/.code”(代码段)、“.data”(初始化的数据块)、“.idata”(导入表)、“.rsrc”(资源数据块)、“.reloc”(重定位表)、“.edata”(导出表)、“.radata”(存放调试目录、说明字符串)。
在本发明实施例中,功能逻辑序列可以为节数据中存储的一个或多个代码段。在具体实现中,可以在节表中读取代码段的地址读取到代码段。
步骤102,获取所述功能逻辑序列的调用记录;
调用记录可以记载功能逻辑序列的被调用的信息。
在本发明的一种优选实施例中,所述步骤102具体可以包括如下子步骤:
子步骤S11,在所述原可移植的执行体文件中植入追踪组件;
在具体实现中,追踪组件可以为一个DLL文件,可以用于记录功能逻辑序列的调用记录。
在本发明的一种优选实施例中,所述子步骤S11进一步可以包括如下子步骤:
子步骤S111,在所述原可移植的执行体文件中的导入表中添加所述追踪组件的标识;
导入表(.idata)可以是一个IMAGE_IMPORT_DESCRIPTOR结构数组,每个结构包含PE文件从某一个DLL库引入函数的相关信息。
在具体实现中,在导入表中记载了PE文件所依赖的各种DLL,在导入表中再添加一个追踪组件的DLL的标识(例如一个段,段名为“.thunks”)即可使得追踪组件被PE文件调用。
需要说明的是,本发明实施例可以应用在内存中,则需要写回磁盘,然后再运行PE文件所属的应用程序时,导入表才可以生效。
子步骤S112,采用所述追踪组件为每个功能逻辑序列创建对应的调用组件。
在本发明示例的一种优选示例中,为了调用追踪组件,需要把GetMessage(追踪组件)的地址放到pfnGetMessage变量中。在16位Windows中,pfnGetMessage可以工作,然而在32位Windows中却不能。在32位Windows中,变量pfnGetMessage保存的是JMP DWORD PTR[XXXXXXXX]thunk的地址。因此为了确定追踪组件的DLL的修改,需要为每一个功能逻辑序列生成一个适当的JMP DWORD PTR[XXXXXXXX]thunk(调用组件),并存储这些thunk在一个命名为.icode的节中,把原来的功能逻辑序列都指向对应的新的thunk。
当当然,上述追踪组件只是作为示例,在实施本发明实施例时,可以根据实际情况设置其它追踪组件,本发明实施例对此不加以限制。
子步骤S12,运行所述原可移植的执行体文件归属的应用程序;
在具体实现中,可以构建一个能够模拟正常运行应用程序的完整目录结构以及其中需要的各种资源,则可以试运行PE文件归属的应用程序。
子步骤S13,采用所述追踪组件记录所述功能逻辑序列的调用信息;
在具体实现中,追踪组件可以生成一个日志记录功能逻辑序列的调用信息。
在本发明的一种优选实施例中,所述子步骤S13进一步可以包括如下子步骤:
子步骤S131,当所述功能逻辑序列被调用时,通过所述调用组件调用所述追踪组件;
子步骤S132,采用所述追踪组件记录当前功能逻辑序的地址信息及调用时间。
在具体实现中,调用组件可以在使得在运行原来的功能逻辑序列之前先运行追踪组件里的函数,追踪组件可以将被调用功能逻辑序的地址信息及调用时间写入日志中。
例如,有功能逻辑序列:
int Add(int a,int b)
{
Return a+b;
}
在PE文件中功能逻辑序列的调用:
...
Int sum=0;
Sum=Add(1,2);
...
植入调用组件:
Int MyAdd(int a,int b)
{
ETW_Log(function_address,time of entry);//记录信息
Return Add(a,b);
}
这样就可以在每个功能逻辑序列运行之前将地址信息及调用时间等记录下来。
在本发明的一种优选实施例中,所述子步骤S13进一步还可以包括如下子步骤:
子步骤S14,采用所述追踪组件记录所述功能逻辑序列在调用时,与所述应用程序中的进程以及线程的对应关系。
应用程序运行的时候,至少包括一个进程,这个进程会默认有一个主线程,然后主线程会在某些时机创建另外一些线程。因此一个进程里面可以包含若干线程,每一个功能逻辑序列都会在某一个线程里面运行,所以功能逻辑序列和线程及进程是有对应关系的。
对于多进程应用程序,例如多核浏览器(启动时会有一个主进程和若干渲染进程)是比较有用的。
步骤103,采用所述调用记录生成排序位置;
在具体实现中,可以读取追踪组件生成的日志读取调用记录。生成的排序位置可以为“第一次调用顺序”,即哪个功能逻辑序列先被调用,就可以把它放到前面的位置。
在本发明的一种优选实施例中,所述步骤103具体可以包括如下子步骤:
子步骤S21,按照所述调用时间对所述功能逻辑序列的地址信息进行排序,获得排序位置。
在实际应用中,排序位置的顺序可以为功能逻辑序列的调用顺序。
步骤104,按照所述排序位置重组所述功能逻辑序列,获得目标可移植的执行体文件。
需要说明的是,重组需要依循PE文件结构的规范进行,并同时将功能逻辑序列的地址表等进行更新。
在本发明的一种优选实施例中,所述步骤104具体可以包括如下子步骤:
按照排序后的地址信息将对应的功能逻辑序列进行重组,获得目标可移植的执行体文件。
需要说明的是,本发明实施例在修改完导入表后,再向磁盘写回一个被修改过的PE文件,此时,原PE文件还是存在的,在生成地址信息后,可以在原PE文件的基础上重组。
例如,原PE文件中有顺序为A、C、E、D、B共5个无序的功能逻辑序列,应用本发明实施例,捕获到了这5个功能逻辑序列在实际运行当中的第一次被调用的顺序,例如顺序为A、B、C、D、E。则在重组的时候,可以将PE文件中的5个功能逻辑序列顺序调整成A、B、C、D、E有序的状态。
CPU要读一个功能逻辑序列时,会优先去内存中读,发现内存没有,再去磁盘取。
在重组PE文件之前(即原可移植的执行体文件),当CPU读功能逻辑序列A时,内存中还没有,所以会去磁盘读,而且会把功能逻辑序列A后面的功能逻辑序列C、E、D一起读进来,这就是一次缺页异常。运行完功能逻辑序列A,接下来应该读功能逻辑序列B,但是内存中只有A、C、E、D,那么CPU又得去读磁盘,又产生一次缺页异常,往后相邻的几个功能逻辑序也会产生缺页异常,也需要读磁盘。如图3所示,在重组之前的冷启动时缺页异常的数量十分之多。而读磁盘的效率是很低的,因此造成冷启动速度很慢。
在重组PE文件之后(即目标可移植的执行体文件),当CPU读功能逻辑序列A时,内存中还没有,所以会去磁盘读,而且会把功能逻辑序列A后面的功能逻辑序列B、C、D一起读进来,这就是一次缺页异常。运行完功能逻辑序列A,接下来应该读功能逻辑序列B,在内存中有A、B、C、D,那么CPU不用去读磁盘而直接读内存,不会产生缺页异常,往后相邻的几个功能序列也不会产生缺页异常,也不需要度磁盘。如图4所示,在重组之前的冷启动时缺页中断的数量大大减少。
本发明获取可移植的执行体文件的功能逻辑序列的调用记录生成排序位置,再按照排序位置重组功能逻辑序列,使得CPU可以直接在内存中读取功能逻辑序列,避免了CPU频繁读磁盘,降低了系统资源的耗费,减少了缺页中断的产生,从而加快了应用程序的冷启动速度。
参照图5,示出了根据本发明一个实施例的一种可移植的执行体文件的重组方法实施例2的步骤流程图,具体可以包括如下步骤:
步骤501,读取原可移植的执行体文件中功能逻辑序列;
步骤502,获取所述功能逻辑序列的调用记录;
步骤503,采用所述调用记录生成排序位置;
步骤504,按照所述排序位置重组所述功能逻辑序列,获得目标可移植的执行体文件;
步骤505,采用所述排序位置更新所述目标可移植的执行体文件归属的应用程序的程序数据库文件;
程序数据库(PDB)文件保存着调试和项目状态信息,使用这些信息可以对应用程序的调试配置进行增量链接。
在本发明的一种优选实施例中,所述步骤505具体可以包括如下子步骤:
子步骤S31,将重组后的地址信息更新至所述程序数据库文件存储的所述目标可移植的执行体文件的地址信息。
PE文件在重组后的功能逻辑序列的地址信息已经改变了,但是PDB文件存储的地址信息还在原来的地址信息,调试的时候就对不上了。因此在重组PE文件时,有记录下每个功能逻辑序列相对于原地址信息的位移,将这个位移再结合PDB文件中的地址信息就可以得到重组后的地址了。
步骤506,将所述目标可移植的执行体文件、所述程序数据库文件和组成文件生成应用程序安装包;所述组成文件可以为除所述目标可移植的执行体文件和所述程序数据库文件外组成所述应用程序的文件。
应用程序安装包(Install pack),可以为可自行解压缩文件的集合,其中包括应用程序安装的所有文件。运行这个安装包(可执行文件),可以将此应用程序的所有文件释放到硬盘上,完成修改注册表、修改系统设置、创建快捷方式等工作。
本发明实施例可以将重组后的可移植的执行体文件、更新后的程序数据库文件和其他组成文件生成应用程序安装包,其他用户给予词安装包进行应用程序的安装,可以大大减少其他用户重组可移植的执行体文件的步骤,大大减少了其他用户的设备的系统资源耗费。
对于方法实施例,为了简单描述,故将其都表述为一系列的动作组合,但是本领域技术人员应该知悉,本发明实施例并不受所描述的动作顺序的限制,因为依据本发明实施例,某些步骤可以采用其他顺序或者同时进行。其次,本领域技术人员也应该知悉,说明书中所描述的实施例均属于优选实施例,所涉及的动作并不一定是本发明实施例所必须的。
参照图6,示出了根据本发明一个实施例的一种可移植的执行体文件的重组装置实施例1的结构框图,具体可以包括如下模块:
功能逻辑序列读取模块601,适于读取原可移植的执行体文件中功能逻辑序列;
调用记录获取模块602,适于获取所述功能逻辑序列的调用记录;
排序位置生成模块603,适于采用所述调用记录生成排序位置;
重组模块604,适于按照所述排序位置重组所述功能逻辑序列,获得目标可移植的执行体文件。
在本发明的一种优选实施例中,所述调用记录获取模块602还可以适于:
在所述原可移植的执行体文件中植入追踪组件;
运行所述原可移植的执行体文件归属的应用程序;
采用所述追踪组件记录所述功能逻辑序列的调用信息。
在本发明的一种优选实施例中,所述调用记录获取模块602还可以适于:
采用所述追踪组件记录所述功能逻辑序列在调用时,与所述应用程序中的进程以及线程的对应关系。
在本发明的一种优选实施例中,所述调用记录获取模块602还可以适于:
在所述原可移植的执行体文件中的导入表中添加所述追踪组件的标识;
采用所述追踪组件为每个功能逻辑序列创建对应的调用组件。
在本发明的一种优选实施例中,所述调用记录获取模块602还可以适于:
当所述功能逻辑序列被调用时,通过所述调用组件调用所述追踪组件;
采用所述追踪组件记录当前功能逻辑序列的地址信息及调用时间。
在本发明的一种优选实施例中,所述排序位置生成模块603还可以适于:
按照所述调用时间对所述功能逻辑序列的地址信息进行排序,获得排序位置。
在本发明的一种优选实施例中,所述重组模块604还可以适于:
按照排序后的地址信息将对应的功能逻辑序列进行重组,获得目标可移植的执行体文件。
参照图7,示出了根据本发明一个实施例的一种可移植的执行体文件的重组装置实施例2的结构框图,具体可以包括如下模块:
功能逻辑序列读取模块701,适于读取原可移植的执行体文件中功能逻辑序列;
调用记录获取模块702,适于获取所述功能逻辑序列的调用记录;
排序位置生成模块703,适于采用所述调用记录生成排序位置;
重组模块704,适于按照所述排序位置重组所述功能逻辑序列,获得目标可移植的执行体文件;
程序数据库文件更新模块705,适于采用所述排序位置更新所述目标可移植的执行体文件归属的应用程序的程序数据库文件。
安装包生成模块706,适于将所述目标可移植的执行体文件、所述程序数据库文件和组成文件生成应用程序安装包;所述组成文件可以为除所述目标可移植的执行体文件和所述程序数据库文件外组成所述应用程序的文件。
在本发明的一种优选实施例中,所述程序数据库文件更新模块705还可以适于:
将重组后的地址信息更新至所述程序数据库文件存储的所述目标可移植的执行体文件的地址信息。
对于装置实施例而言,由于其与方法实施例基本相似,所以描述的比较简单,相关之处参见方法实施例的部分说明即可。
在此提供的算法和显示不与任何特定计算机、虚拟系统或者其它设备固有相关。各种通用系统也可以与基于在此的示教一起使用。根据上面的描述,构造这类系统所要求的结构是显而易见的。此外,本发明也不针对任何特定编程语言。应当明白,可以利用各种编程语言实现在此描述的本发明的内容,并且上面对特定语言所做的描述是为了披露本发明的最佳实施方式。
在此处所提供的说明书中,说明了大量具体细节。然而,能够理解,本发明的实施例可以在没有这些具体细节的情况下实践。在一些实例中,并未详细示出公知的方法、结构和技术,以便不模糊对本说明书的理解。
类似地,应当理解,为了精简本公开并帮助理解各个发明方面中的一个或多个,在上面对本发明的示例性实施例的描述中,本发明的各个特征有时被一起分组到单个实施例、图、或者对其的描述中。然而,并不应将该公开的方法解释成反映如下意图:即所要求保护的本发明要求比在每个权利要求中所明确记载的特征更多的特征。更确切地说,如下面的权利要求书所反映的那样,发明方面在于少于前面公开的单个实施例的所有特征。因此,遵循具体实施方式的权利要求书由此明确地并入该具体实施方式,其中每个权利要求本身都作为本发明的单独实施例。
本领域那些技术人员可以理解,可以对实施例中的设备中的模块进行自适应性地改变并且把它们设置在与该实施例不同的一个或多个设备中。可以把实施例中的模块或单元或组件组合成一个模块或单元或组件,以及此外可以把它们分成多个子模块或子单元或子组件。除了这样的特征和/或过程或者单元中的至少一些是相互排斥之外,可以采用任何组合对本说明书(包括伴随的权利要求、摘要和附图)中公开的所有特征以及如此公开的任何方法或者设备的所有过程或单元进行组合。除非另外明确陈述,本说明书(包括伴随的权利要求、摘要和附图)中公开的每个特征可以由提供相同、等同或相似目的的替代特征来代替。
此外,本领域的技术人员能够理解,尽管在此所述的一些实施例包括其它实施例中所包括的某些特征而不是其它特征,但是不同实施例的特征的组合意味着处于本发明的范围之内并且形成不同的实施例。例如,在下面的权利要求书中,所要求保护的实施例的任意之一都可以以任意的组合方式来使用。
本发明的各个部件实施例可以以硬件实现,或者以在一个或者多个处理器上运行的软件模块实现,或者以它们的组合实现。本领域的技术人员应当理解,可以在实践中使用微处理器或者数字信号处理器(DSP)来实现根据本发明实施例的可移植的执行体文件的重组设备中的一些或者全部部件的一些或者全部功能。本发明还可以实现为用于执行这里所描述的方法的一部分或者全部的设备或者装置程序(例如,计算机程序和计算机程序产品)。这样的实现本发明的程序可以存储在计算机可读介质上,或者可以具有一个或者多个信号的形式。这样的信号可以从因特网网站上下载得到,或者在载体信号上提供,或者以任何其他形式提供。
应该注意的是上述实施例对本发明进行说明而不是对本发明进行限制,并且本领域技术人员在不脱离所附权利要求的范围的情况下可设计出替换实施例。在权利要求中,不应将位于括号之间的任何参考符号构造成对权利要求的限制。单词“包含”不排除存在未列在权利要求中的元件或步骤。位于元件之前的单词“一”或“一个”不排除存在多个这样的元件。本发明可以借助于包括有若干不同元件的硬件以及借助于适当编程的计算机来实现。在列举了若干装置的单元权利要求中,这些装置中的若干个可以是通过同一个硬件项来具体体现。单词第一、第二、以及第三等的使用不表示任何顺序。可将这些单词解释为名称。
本发明公开了A1、一种可移植的执行体文件的重组方法,包括:
读取原可移植的执行体文件中功能逻辑序列;
获取所述功能逻辑序列的调用记录;
采用所述调用记录生成排序位置;
按照所述排序位置重组所述功能逻辑序列,获得目标可移植的执行体文件。
A2、如A1所述的方法,所述获取所述功能逻辑序列的调用记录的步骤包括:
在所述原可移植的执行体文件中植入追踪组件;
运行所述原可移植的执行体文件归属的应用程序;
采用所述追踪组件记录所述功能逻辑序列的调用信息。
A3、如A2所述的方法,所述获取所述功能逻辑序列的调用记录的步骤还包括:
采用所述追踪组件记录所述功能逻辑序列在调用时,与所述应用程序中的进程以及线程的对应关系。
A4、如A2或A3所述的方法,所述在所述原可移植的执行体文件中植入追踪组件的步骤包括:
在所述原可移植的执行体文件中的导入表中添加所述追踪组件的标识;
采用所述追踪组件为每个功能逻辑序列创建对应的调用组件。
A5、如A4所述的方法,所述采用所述追踪组件记录所述功能逻辑序列的调用信息的步骤包括:
当所述功能逻辑序列被调用时,通过所述调用组件调用所述追踪组件;
采用所述追踪组件记录当前功能逻辑序列的地址信息及调用时间。
A6、如A5所述的方法,所述采用所述调用记录生成排序位置的步骤包括:
按照所述调用时间对所述功能逻辑序列的地址信息进行排序,获得排序位置。
A7、如A6所述的方法,所述按照所述排序位置重组所述功能逻辑序列,获得目标可移植的执行体文件的步骤包括:
按照排序后的地址信息将对应的功能逻辑序列进行重组,获得目标可移植的执行体文件。
A8、如A1或A2或A3或A5或A6或A7所述的方法,还包括:
采用所述排序位置更新所述目标可移植的执行体文件归属的应用程序的程序数据库文件。
A9、如A8所述的方法,所述采用所述排序位置更新所述可移植的执行体文件归属的应用程序的程序数据库文件的步骤包括:
将重组后的地址信息更新至所述程序数据库文件存储的所述目标可移植的执行体文件的地址信息。
A10、如A9所述的方法,还包括:
将所述目标可移植的执行体文件、所述程序数据库文件和组成文件生成应用程序安装包;所述组成文件为除所述目标可移植的执行体文件和所述程序数据库文件外组成所述应用程序的文件。
本发明还公开了B11、一种可移植的执行体文件的重组装置,包括:
功能逻辑序列读取模块,适于读取原可移植的执行体文件中功能逻辑序列;
调用记录获取模块,适于获取所述功能逻辑序列的调用记录;
排序位置生成模块,适于采用所述调用记录生成排序位置;
重组模块,适于按照所述排序位置重组所述功能逻辑序列,获得目标可移植的执行体文件。
B12、如B11所述的装置,所述调用记录获取模块还适于:
在所述原可移植的执行体文件中植入追踪组件;
运行所述原可移植的执行体文件归属的应用程序;
采用所述追踪组件记录所述功能逻辑序列的调用信息。
B13、如B12所述的装置,所述调用记录获取模块还适于:
采用所述追踪组件记录所述功能逻辑序列在调用时,与所述应用程序中的进程以及线程的对应关系。
B14、如B12或B13所述的装置,所述调用记录获取模块还适于:
在所述原可移植的执行体文件中的导入表中添加所述追踪组件的标识;
采用所述追踪组件为每个功能逻辑序列创建对应的调用组件。
B15、如B14所述的装置,所述调用记录获取模块还适于:
当所述功能逻辑序列被调用时,通过所述调用组件调用所述追踪组件;
采用所述追踪组件记录当前功能逻辑序列的地址信息及调用时间。
B16、如B15所述的装置,所述排序位置生成模块还适于:
按照所述调用时间对所述功能逻辑序列的地址信息进行排序,获得排序位置。
B17、如B16所述的装置,所述重组模块还适于:
按照排序后的地址信息将对应的功能逻辑序列进行重组,获得目标可移植的执行体文件。
B18、如B11或B12或B13或B15或B16或B17所述的装置,还包括:
程序数据库文件更新模块,适于采用所述排序位置更新所述目标可移植的执行体文件归属的应用程序的程序数据库文件。
B19、如B18所述的装置,所述程序数据库文件更新模块还适于:
将重组后的地址信息更新至所述程序数据库文件存储的所述目标可移植的执行体文件的地址信息。
B20、如B19所述的装置,还包括:
安装包生成模块,适于将所述目标可移植的执行体文件、所述程序数据库文件和组成文件生成应用程序安装包;所述组成文件为除所述目标可移植的执行体文件和所述程序数据库文件外组成所述应用程序的文件。
Claims (10)
1.一种可移植的执行体文件的重组方法,包括:
读取原可移植的执行体文件中功能逻辑序列;
获取所述功能逻辑序列的调用记录;
采用所述调用记录生成排序位置;
按照所述排序位置重组所述功能逻辑序列,获得目标可移植的执行体文件。
2.如权利要求1所述的方法,其特征在于,所述获取所述功能逻辑序列的调用记录的步骤包括:
在所述原可移植的执行体文件中植入追踪组件;
运行所述原可移植的执行体文件归属的应用程序;
采用所述追踪组件记录所述功能逻辑序列的调用信息。
3.如权利要求2所述的方法,其特征在于,所述获取所述功能逻辑序列的调用记录的步骤还包括:
采用所述追踪组件记录所述功能逻辑序列在调用时,与所述应用程序中的进程以及线程的对应关系。
4.如权利要求2或3所述的方法,其特征在于,所述在所述原可移植的执行体文件中植入追踪组件的步骤包括:
在所述原可移植的执行体文件中的导入表中添加所述追踪组件的标识;
采用所述追踪组件为每个功能逻辑序列创建对应的调用组件。
5.如权利要求4所述的方法,其特征在于,所述采用所述追踪组件记录所述功能逻辑序列的调用信息的步骤包括:
当所述功能逻辑序列被调用时,通过所述调用组件调用所述追踪组件;
采用所述追踪组件记录当前功能逻辑序列的地址信息及调用时间。
6.如权利要求5所述的方法,其特征在于,所述采用所述调用记录生成排序位置的步骤包括:
按照所述调用时间对所述功能逻辑序列的地址信息进行排序,获得排序位置。
7.如权利要求6所述的方法,其特征在于,所述按照所述排序位置重组所述功能逻辑序列,获得目标可移植的执行体文件的步骤包括:
按照排序后的地址信息将对应的功能逻辑序列进行重组,获得目标可移植的执行体文件。
8.如权利要求1或2或3或5或6或7所述的方法,其特征在于,还包括:
采用所述排序位置更新所述目标可移植的执行体文件归属的应用程序的程序数据库文件。
9.如权利要求8所述的方法,其特征在于,所述采用所述排序位置更新所述可移植的执行体文件归属的应用程序的程序数据库文件的步骤包括:
将重组后的地址信息更新至所述程序数据库文件存储的所述目标可移植的执行体文件的地址信息。
10.一种可移植的执行体文件的重组装置,包括:
功能逻辑序列读取模块,适于读取原可移植的执行体文件中功能逻辑序列;
调用记录获取模块,适于获取所述功能逻辑序列的调用记录;
排序位置生成模块,适于采用所述调用记录生成排序位置;
重组模块,适于按照所述排序位置重组所述功能逻辑序列,获得目标可移植的执行体文件。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201310714655.0A CN103631971B (zh) | 2013-12-20 | 2013-12-20 | 一种可移植的执行体文件的重组方法和装置 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201310714655.0A CN103631971B (zh) | 2013-12-20 | 2013-12-20 | 一种可移植的执行体文件的重组方法和装置 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN103631971A true CN103631971A (zh) | 2014-03-12 |
CN103631971B CN103631971B (zh) | 2017-12-08 |
Family
ID=50213012
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201310714655.0A Active CN103631971B (zh) | 2013-12-20 | 2013-12-20 | 一种可移植的执行体文件的重组方法和装置 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN103631971B (zh) |
Cited By (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN104199684A (zh) * | 2014-08-13 | 2014-12-10 | 百度在线网络技术(北京)有限公司 | 浏览器冷启动的实现方法及装置 |
CN106528221A (zh) * | 2016-11-03 | 2017-03-22 | 北京爱其科技有限公司 | 一种微处理器的程序执行方法 |
WO2018036000A1 (zh) * | 2016-08-23 | 2018-03-01 | 百富计算机技术(深圳)有限公司 | 应用程序跨系统运行的方法和装置 |
CN109471589A (zh) * | 2017-09-07 | 2019-03-15 | 宏碁股份有限公司 | 智能磁盘重组方法与智能磁盘重组系统 |
CN110187897A (zh) * | 2019-05-28 | 2019-08-30 | 新华三技术有限公司 | 一种固件升级方法及装置 |
Citations (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN1176426A (zh) * | 1996-05-15 | 1998-03-18 | 摩托罗拉公司 | 在数据处理系统中对计算机指令执行排序的方法和装置 |
US20050172263A1 (en) * | 2004-01-30 | 2005-08-04 | Rajaraman Hariharan | Methods, systems, and computer program products for integrating legacy applications into a platform-independent environment |
CN101458754A (zh) * | 2009-01-09 | 2009-06-17 | 清华大学 | 一种监控应用程序行为的方法及装置 |
CN101697131A (zh) * | 2009-11-04 | 2010-04-21 | 中兴通讯股份有限公司 | 一种可重定位文件动态加载的方法及装置 |
CN102034042A (zh) * | 2010-12-13 | 2011-04-27 | 四川大学 | 基于函数调用关系图特征的恶意代码检测新方法 |
-
2013
- 2013-12-20 CN CN201310714655.0A patent/CN103631971B/zh active Active
Patent Citations (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN1176426A (zh) * | 1996-05-15 | 1998-03-18 | 摩托罗拉公司 | 在数据处理系统中对计算机指令执行排序的方法和装置 |
US20050172263A1 (en) * | 2004-01-30 | 2005-08-04 | Rajaraman Hariharan | Methods, systems, and computer program products for integrating legacy applications into a platform-independent environment |
CN101458754A (zh) * | 2009-01-09 | 2009-06-17 | 清华大学 | 一种监控应用程序行为的方法及装置 |
CN101697131A (zh) * | 2009-11-04 | 2010-04-21 | 中兴通讯股份有限公司 | 一种可重定位文件动态加载的方法及装置 |
CN102034042A (zh) * | 2010-12-13 | 2011-04-27 | 四川大学 | 基于函数调用关系图特征的恶意代码检测新方法 |
Non-Patent Citations (1)
Title |
---|
邓海鹏: ""动态二进制翻译后端代码热路径的重组优化"", 《中国优秀硕士学位论文全文数据库 信息科技辑》 * |
Cited By (7)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN104199684A (zh) * | 2014-08-13 | 2014-12-10 | 百度在线网络技术(北京)有限公司 | 浏览器冷启动的实现方法及装置 |
WO2018036000A1 (zh) * | 2016-08-23 | 2018-03-01 | 百富计算机技术(深圳)有限公司 | 应用程序跨系统运行的方法和装置 |
US10303491B2 (en) | 2016-08-23 | 2019-05-28 | Pax Computer Technology (Shenzhen) Co., Ltd. | Method and device of running application program across systems |
CN106528221A (zh) * | 2016-11-03 | 2017-03-22 | 北京爱其科技有限公司 | 一种微处理器的程序执行方法 |
CN109471589A (zh) * | 2017-09-07 | 2019-03-15 | 宏碁股份有限公司 | 智能磁盘重组方法与智能磁盘重组系统 |
CN110187897A (zh) * | 2019-05-28 | 2019-08-30 | 新华三技术有限公司 | 一种固件升级方法及装置 |
CN110187897B (zh) * | 2019-05-28 | 2022-05-31 | 新华三技术有限公司 | 一种固件升级方法及装置 |
Also Published As
Publication number | Publication date |
---|---|
CN103631971B (zh) | 2017-12-08 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US9250875B1 (en) | Table of contents pointer value save and restore placeholder positioning | |
US9218168B1 (en) | Suppression of table of contents save actions | |
EP3084596B1 (en) | Executable code for constrained computing environments | |
KR100518584B1 (ko) | 공유 라이브러리 시스템 및 상기 시스템 구축 방법 | |
EP3267308B1 (en) | Application loading method and device | |
US20070283331A1 (en) | Arbitrary Runtime Function Call Tracing | |
CN103631971A (zh) | 一种可移植的执行体文件的重组方法和装置 | |
AU2001242028B2 (en) | System and method for preloading classes in a data processing device that does not have a virtual memory manager | |
CN109947643B (zh) | 一种基于a/b测试的实验方案的配置方法、装置及设备 | |
US6907597B1 (en) | Method and apparatus for constructing an executable program in memory | |
AU2001242028A1 (en) | System and method for preloading classes in a data processing device that does not have a virtual memory manager | |
CN102364433B (zh) | 在ARM处理器上实现Wine构建工具移植的方法 | |
US11507503B1 (en) | Write barrier for remembered set maintenance in generational Z garbage collector | |
WO2022097020A1 (en) | Updated shared library reloading without stopping execution of an application | |
Kang | Function call interception techniques | |
CN112306539B (zh) | 一种单片机应用层开发方法、系统、终端及介质 | |
CN103198244A (zh) | 保护动态链接库的方法 | |
CN110941433B (zh) | 一种边缘辅助部署第三方应用到微控制器方法及系统 | |
KR100478463B1 (ko) | 응용 프로그램의 동적링크 방법 | |
KR100763199B1 (ko) | 가상 머신 환경에서의 메소드 호출 방법 및 상기 방법을수행하는 가상 머신이 탑재된 시스템 | |
EP1678607B1 (en) | Mapping of dynamic link libraries in a computing device | |
CN116661904B (zh) | 一种基于申威平台的AppImage应用软件打包装置及其方法 | |
Pracner | Translation and Transformation of Low Level Programs | |
CN112130929A (zh) | 一种兼容裸机工具链多分区嵌入式配置方法及系统 | |
Gatliff | Porting and Using Newlib in Embedded Systems |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
C10 | Entry into substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant | ||
GR01 | Patent grant | ||
TR01 | Transfer of patent right |
Effective date of registration: 20220718 Address after: Room 801, 8th floor, No. 104, floors 1-19, building 2, yard 6, Jiuxianqiao Road, Chaoyang District, Beijing 100015 Patentee after: BEIJING QIHOO TECHNOLOGY Co.,Ltd. Address before: 100088 room 112, block D, 28 new street, new street, Xicheng District, Beijing (Desheng Park) Patentee before: BEIJING QIHOO TECHNOLOGY Co.,Ltd. Patentee before: Qizhi software (Beijing) Co.,Ltd. |
|
TR01 | Transfer of patent right |