本公开涉及显示技术领域,具体而言,涉及一种运动数据展示方法、装置、计算机设备及存储介质。
背景技术:
随着科学技术的不断发展,应用互联网技术的终端设备为人们的生活带来了翻天覆地的变化。用户在使用终端设备的时候,会下载各种应用程序,应用程序具有下载容量和安装容量两个概念,下载容量是指应用程序的压缩包所占的存储空间,用户在下载应用程序时,下载的是压缩包,这样做可以节省流量;当压缩包下载完成后,就会自动解压,解压过程也就是通常所说的安装过程,安装大小就是指压缩包解压后所占用的存储空间。下载容量会影响下载消耗的流量、时长等。
目前,应用程序无论是安装大小还是下载大小,都在日益增加,对于终端设备,尤其是移动终端来讲,当应用程序的下载容量超出移动界限时,下载会被限制,将无法自动进行下载。而现在应用程序在上架到应用商店以供下载前,大多会对其中的一些可执行文件进行加密,从而严重影响了文件的压缩效率,导致压缩后的压缩包增大,应用程序的下载容量易超出相关容量限制。
技术实现要素:
本公开实施例至少提供一种应用文件配置方法、装置、计算机设备及存储介质,可以有效降低应用的压缩包大小,提高压缩效率。
第一方面,本公开实施例提供了一种应用文件配置方法,所述方法包括:
识别应用程序中可执行文件的文本数据段中属于非启动读取项的至少一个数据节;
在所述可执行文件中创建新的目标数据段;
将所述至少一个数据节移动至所述目标数据段中;
基于所述至少一个数据节在所述目标数据段中的物理地址,更新所述至少一个数据节在所述可执行文件的布局数据段中记载的、在所述目标数据段中的物理地址。
在一种可选的实施方式中,所述识别应用程序中可执行文件的文本数据段中属于非启动读取项的至少一个数据节,包括:
确定可执行文件的文本数据段中属于非启动读取项的第一数据节和第二数据节,其中,所述第一数据节中存储有指示跳转至所述第二数据节的可执行跳转指令;
检测所述第一数据节和所述第二数据节在所述文本数据段中的物理地址间的第一绝对距离;
所述将所述至少一个数据节移动至所述目标数据段中,包括:
在将所述第一数据节和所述第二数据节移动至所述目标数据段时,保持所述第一数据节和所述第二数据节在所述目标数据段中的物理地址间的第二绝对距离等于所述第一绝对距离。
在一种可选的实施方式中,所述方法包括:
在所述目标数据段中,检测所述第一数据节和所述第二数据节之间是否存在第三数据节;
若存在,将检测到的第三数据节移动至所述目标数据段中除所述第一数据节和所述第二数据节之间的其他位置。
在一种可选的实施方式中,所述方法还包括:
将所述文本数据段的读写权限设置为可读写。
在一种可选的实施方式中,所述识别应用程序中可执行文件的文本数据段中属于非启动读取项的至少一个数据节,包括:
识别可执行文件的文本数据段中与所述第一数据节关联的第四数据节,其中,所述第四数据节在可执行文件被运行时能够被重命名为所述第一数据节;
确定所述第四数据节为所述至少一个数据节中的数据节。
在一种可选的实施方式中,所述识别应用程序中可执行文件的文本数据段中属于非启动读取项的至少一个数据节,包括:
识别可执行文件的文本数据段中的自定义数据节;
确定所述自定义数据节为所述至少一个数据节中的一个。
在一种可选的实施方式中,所述将所述至少一个数据节移动至所述目标数据段中,包括:
将所述自定义数据节移动至创建的自定义数据段中,并保持所述第一数据节在所述目标数据段中的物理地址和所述自定义数据节在所述自定义数据段中的物理地址之间的相对距离,与所述第一数据节和所述自定义数据节在所述文本数据段中的物理地址间的相对距离相等。
在一种可选的实施方式中,所述方法还包括:
将所述自定义数据段的读写权限设置为可读写。
第二方面,本公开实施例还提供一种应用文件配置装置,所述装置包括:
数据节识别模块,用于识别应用程序中可执行文件的文本数据段中属于非启动读取项的至少一个数据节;
数据段创建模块,用于在所述可执行文件中创建新的目标数据段;
数据节移动模块,用于将所述至少一个数据节移动至所述目标数据段中;
地址更新模块,用于基于所述至少一个数据节在所述目标数据段中的物理地址,更新所述至少一个数据节在所述可执行文件的布局数据段中记载的、在所述目标数据段中的物理地址。
在一种可选的实施方式中,所述数据节识别模块具体用于:
识别可执行文件的文本数据段中属于非启动读取项的第一数据节和第二数据节,其中,所述第一数据节中存储有指示跳转至所述第二数据节的可执行跳转指令;
检测所述第一数据节和所述第二数据节在所述文本数据段中的物理地址间的第一绝对距离;
数据节移动模块在用于所述将所述至少一个数据节移动至所述目标数据段中时,具体用于:
在将所述第一数据节和所述第二数据节移动至所述目标数据段时,保持所述第一数据节和所述第二数据节在所述目标数据段中的物理地址间的第二绝对距离等于所述第一绝对距离。
在一种可选的实施方式中,所述装置还包括多余字节移除模块,所述多余字节移除模块用于:
在所述目标数据段中,检测所述第一数据节和所述第二数据节之间是否存在第三数据节;
若存在,将检测到的第三数据节移动至所述目标数据段中除所述第一数据节和所述第二数据节之间的其他位置。
在一种可选的实施方式中,所述装置还包括第一设置模块,所述第一设置模块用于:
将所述文本数据段的读写权限设置为可读写。
在一种可选的实施方式中,所述数据节识别模块还用于:
识别可执行文件的文本数据段中与所述第一数据节关联的第四数据节,其中,所述第四数据节在可执行文件被运行时能够被重命名为所述第一数据节;
确定所述第四数据节为所述至少一个数据节中的数据节。
在一种可选的实施方式中,所述数据节识别模块还用于:
识别可执行文件的文本数据段中的自定义数据节;
确定所述自定义数据节为所述至少一个数据节中的一个。
在一种可选的实施方式中,数据节移动模块在用于所述将所述至少一个数据节移动至所述目标数据段中时,具体用于:
将所述自定义数据节移动至创建的自定义数据段中,并保持所述第一数据节在所述目标数据段中的物理地址和所述自定义数据节在所述自定义数据段中的物理地址之间的相对距离,与所述第一数据节和所述自定义数据节在所述文本数据段中的物理地址间的相对距离相等。
在一种可选的实施方式中,所述装置还包括第二设置模块,所述第二设置模块用于:
将所述自定义标数据段的读写权限设置为可读写。
第三方面,本公开实施例还提供一种计算机设备,包括:处理器、存储器和总线,所述存储器存储有所述处理器可执行的机器可读指令,当计算机设备运行时,所述处理器与所述存储器之间通过总线通信,所述机器可读指令被所述处理器执行时执行上述的应用文件配置方法的步骤。
第四方面,本公开实施例还提供一种计算机可读存储介质,该计算机可读存储介质上存储有计算机程序,该计算机程序被处理器运行时执行上述的应用文件配置方法的步骤。
本公开实施例提供的应用文件配置方法、装置、计算机设备及存储介质,通过识别应用程序中可执行文件的文本数据段中属于非启动读取项的至少一个数据节;在所述可执行文件中创建新的目标数据段;将所述至少一个数据节移动至所述目标数据段中;使用所述至少一个数据节在所述目标数据段中的物理地址更新所述至少一个数据节在所述可执行文件的不就数据段中记载的、在所述目标数据段中的物理地址。
这样,通过将文本数据段中的部分数据节从文本数据段移动至新建的目标数据段中,以减少可执行文件中文本数据段内的数据节的数量,从而可以减少可执行文件中需要加密的数据量,有效减小可执行文件压缩后压缩包的大小,提高提高压缩效率。
为使本公开的上述目的、特征和优点能更明显易懂,下文特举较佳实施例,并配合所附附图,作详细说明如下。
附图说明
为了更清楚地说明本公开实施例的技术方案,下面将对实施例中所需要使用的附图作简单地介绍,此处的附图被并入说明书中并构成本说明书中的一部分,这些附图示出了符合本公开的实施例,并与说明书一起用于说明本公开的技术方案。应当理解,以下附图仅示出了本公开的某些实施例,因此不应被看作是对范围的限定,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他相关的附图。
图1为本公开实施例提供的一种应用文件配置方法的流程图;
图2为本公开实施例提供的另一种应用文件配置方法的流程图;
图3为本公开实施例中的数据距离的示意图之一;
图4为本公开实施例中的数据距离的示意图之二;
图5为本公开实施例提供的一种应用文件配置装置的示意图之一;
图6为本公开实施例提供的一种应用文件配置装置的示意图之二;
图7为本公开实施例所提供的一种计算机设备的示意图。
具体实施方式
为使本公开实施例的目的、技术方案和优点更加清楚,下面将结合本公开实施例中附图,对本公开实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本公开一部分实施例,而不是全部的实施例。通常在此处附图中描述和示出的本公开实施例的组件可以以各种不同的配置来布置和设计。因此,以下对在附图中提供的本公开的实施例的详细描述并非旨在限制要求保护的本公开的范围,而是仅仅表示本公开的选定实施例。基于本公开的实施例,本领域技术人员在没有做出创造性劳动的前提下所获得的所有其他实施例,都属于本公开保护的范围。
经研究发现,随着技术的不断完善,以及应用中各种功能的逐渐增多,无论是应用程序的安装容量还是下载容量,都在日益增加,对于终端设备,尤其是移动终端来讲,当应用程序的下载容量超出移动界限时,下载会被限制,将无法自动进行下载,例如会收到文件容量太大的提示,需通过wi-fi网络下载,无法使用蜂窝网络下载应用程序,或者需要用户手动设置来选择下载方式等。而现在应用程序在上架到应用商店以供下载前,大多会对其中的一些可执行文件进行加密,例如苹果系统,在将应用程序app上传到商店后台前,苹果会对mach-o(machobject文件格式的缩写)文件中的__text段加密,然后才会将app发布到应用商店appstore,加密对二进制文件的大小本身影响很小,但是它会严重影响二进制文件的压缩效率,导致压缩后的压缩包增大,也就是下载容易增大,应用程序的下载容量易超出相关容量限制。
基于上述研究,本公开提供了一种应用文件配置方法,通过将文本数据段中的部分数据节从文本数据段移动至新建的目标数据段中,以减少可执行文件中文本数据段内的数据节的数量,从而可以减少可执行文件中需要加密的数据量,有效减小可执行文件压缩后压缩包的大小,提高提高压缩效率。
针对以上方案所存在的缺陷,均是发明人在经过实践并仔细研究后得出的结果,因此,上述问题的发现过程以及下文中本公开针对上述问题所提出的解决方案,都应该是发明人在本公开过程中对本公开做出的贡献。
应注意到:相似的标号和字母在下面的附图中表示类似项,因此,一旦某一项在一个附图中被定义,则在随后的附图中不需要对其进行进一步定义和解释。
为便于对本实施例进行理解,首先对本公开实施例所公开的一种应用文件配置方法进行详细介绍,本公开实施例所提供的应用文件配置方法的执行主体一般为具有一定计算能力的计算机设备,该计算机设备例如包括:终端设备或服务器或其它处理设备,终端设备可以为用户设备(userequipment,ue)、移动设备、用户终端、终端、蜂窝电话、无绳电话、个人数字助理(personaldigitalassistant,pda)、手持设备、计算设备、车载设备、可穿戴设备等。在一些可能的实现方式中,该运动数据展示方法可以通过处理器调用存储器中存储的计算机可读指令的方式来实现。
下面以执行主体为终端设备为例对本公开实施例提供的应用文件配置方法加以说明。
请参阅图1,图1为本公开实施例提供的一种应用文件配置方法的流程图。如图1中所示,所述方法:
s101:识别应用程序中可执行文件的文本数据段中属于非启动读取项的至少一个数据节。
该步骤中,在用户将编辑好的应用程序上传后,可以对接收到的应用程序的可执行文件进行识别,以识别出属于非启动读取项的至少一个数据节。
其中,所述可执行文件,可以是指应用程序对应的文件包,可以由操作系统进行加载执行的文件。
示例性的,以mach-o(machobject文件格式的缩写)格式的二进制文件为例进行说明,其主要由标头header、加载命令loadcommands、数据data三部分组成。其中,header主要描述了文件的大概信息;loadcommands由多条loadcommand组成,它们描述了data在二进制文件和虚拟内存中的布局信息,有了这个布局信息就能够知道data在二进制文件中和虚拟内存中是怎样排布的,它相当于修房子时的图纸一样;data存储了实际的内容,主要是程序的指令和数据,它们的排布完全依照loadcommands的描述。mach-o文件中的data部分主要是以segment(中文翻译为段)和section(中文翻译为节)的方式来组织内容的,把有共同特点的内容组织到一块,可以方便管理,提高效率,例如“__text,__text”,即表示的是“__text”段“__text”节。
其中,非启动读取项的数据节,可以是指代码没有明确指示需要在启动阶段进行检查的数据,例如data中的数据节,鉴于目前在对可执行文件进行加密时,大多只会对mach-o文件中的“__text”段加密,即mach-o文件中的“__text”段中的数据进行加密,因此,对数据段中属于非启动读取项的数据节进行处理即可。
其中,如果在应用程序的启动阶段,代码指明了要读取某个数据段中的某个数据节,那么这个数据节就不能够被移动,否则代码就无法读取到它,就会导致出错,示例性的,例如mach-o文件中的“__text”段中,swift相关的数据节部分就不能移动,再例如,应用在启动阶段会检查“__unwind_info”和“__eh_frame”,因此,这两部分也不能移动。
s102:在所述可执行文件中创建新的目标数据段。
示例性的,在mach-o文件中,data部分一般包括5个段,分别为“__pagezero”、“__text”、“__data_const”、“__data”和“__linkedit”,其中,除“__pagezero”和“__linkedit”外,每个段中有多个数据节,在需要对所述可执行文件中“__data”段,即文本数据段中的内容进行处理时,如果数据还在“__data”段中,则依旧会被进行加密处理,因此,将会被加密的数据从“__data”段中移出即可,故而,可以创建新的目标数据段,目标数据段的名字可以任意命名,与文本数据段不同即可,更进一步的,也可以与原有的5个段的命名均不同。
其中,“__”为代码中的双下划线。
s103:将所述至少一个数据节移动至所述目标数据段中。
其中,将所述至少一个数据节移动至所述目标数据段中,需要将每个数据节中的数据全部移动至所述目标数据段中。
示例性的,可以通过指令“wl,-rename_section,__text,__text,__bd_text,__text”来对所述至少一个数据节进行移动,“-rename_section”兼具重命名和移动的功能,即将新建的数据段命名为“__bd_text,__text”,并将“__text”移动至_“_bd_text”中,其中,“_bd_text”仅为示例中目标数据段的命名。
s104:基于所述至少一个数据节在所述目标数据段中的物理地址,更新所述至少一个数据节在所述可执行文件的布局数据段中记载的、在所述目标数据段中的物理地址。
该步骤中,在将所述至少一个数据节移动后,为了在所述可执行文件被执行时,各项指令依旧是有效和可执行的,即在需要读取所述至少一个数据节中的数据时,依旧可以读取到原有的数据,则需要将所述至少一个数据节的地址进行更新,以便可以顺利读取。
具体的,可以是对所述至少一个数据节中每个数据节的物理地址进行更新,例如,可以使用每个数据节在所述目标数据段中新的物理地址,替换掉对应数据节在所述可执行文件的布局数据段中记载的、在所述目标数据段中原有的物理地址。
本公开实施例提供的文件配置方法,通过识别应用程序中可执行文件的文本数据段中属于非启动读取项的至少一个数据节;在所述可执行文件中创建新的目标数据段;将所述至少一个数据节移动至所述目标数据段中;使用所述至少一个数据节在所述目标数据段中的物理地址更新所述至少一个数据节在所述可执行文件的不就数据段中记载的、在所述目标数据段中的物理地址。
这样,通过将文本数据段中的部分数据节从文本数据段移动至新建的目标数据段中,以减少可执行文件中文本数据段内的数据节的数量,从而可以减少可执行文件中需要加密的数据量,有效减小可执行文件压缩后压缩包的大小,提高提高压缩效率。
请参阅图2,图2为本公开实施例提供的另一种应用文件配置方法的流程图。如图2中所示,所述方法:
s201:识别应用程序中可执行文件的文本数据段中属于非启动读取项的至少一个数据节。
s202:在所述可执行文件中创建新的目标数据段。
s203:将所述至少一个数据节移动至所述目标数据段中。
s204:基于所述至少一个数据节在所述目标数据段中的物理地址,更新所述至少一个数据节在所述可执行文件的布局数据段中记载的、在所述目标数据段中的物理地址。
其中,步骤s201至步骤s204的描述可以参考步骤s101至步骤s104的描述,并且可以达到相同的技术效果和解决相同的技术问题,在此不再赘述。
s205:将所述文本数据段的读写权限设置为可读写。
其中,由于操作系统只关心段的读/写/执行权限,并不关心段或节的名称。因此,在将所述至少一个数据节中的数据移动至所述目标数据段中相应的数据节下,各符号的地址也会由链接器修正好之后,需要将所述文本数据段的读写权限设置为可读写,即相应的所述目标数据段中的各数据节的读写权限设置为可读写后,应用程序也可以正常运行。
下面,结合一些具体实施例,对本公开的实施例进行说明。
在一些可能的实施例中,s201包括:
识别可执行文件的文本数据段中属于非启动读取项的第一数据节和第二数据节;检测所述第一数据节和所述第二数据节在所述文本数据段中的物理地址间的第一绝对距离。
该步骤中,在识别所述文本数据段中的数据节的时候,可以是选择所述文本数据段中读写属性为只读的部分内容,具体的,可以是所述文本数据段中的第一数据节和第二数据节,并且在识别出所述第一数据节和所述第二数据节后,可以通过检测所述第一数据节和所述第二数据节在所述文本数据段中的就物理地址,以得知二者的物理地址间的第一绝对距离,以便为后续的移动做准备。
其中,所述第一数据节中存储有指示跳转至所述第二数据节的可执行跳转指令。
示例性的,所述第一数据节,可以是指所述文本数据段“__text”中的文本数据节“__text,__text”;所述第二数据节可以是指“__text”中的残留数据节“__text,__stubs”。“__text,__text”用于存储程序的可执行代码,可执行代码中有bl跳转指令,跳转指令让程序跳转到“__text,__stubs”。
上述第一数据节和所述第二数据节仅为示例性说明,除上述两种数据节外,例如还可以包括“__text”中的“__cstring”、“__gcc_except_tab”、“__const”、“__objc_methname”、“__objc_classname”、“__objc_methtype”等。
进一步的,s203包括:
在将所述第一数据节和所述第二数据节移动至所述目标数据段时,保持所述第一数据节和所述第二数据节在所述目标数据段中的物理地址间的第二绝对距离等于所述第一绝对距离。
该步骤中,为了使在指令跳转以读取相应数据节中的数据时,可以进行有效跳转,所以在将所述第一数据节和所述第二数据节移动至所述目标数据段时,需要保持两者之间的绝对距离不变,即使得所述第一数据节和所述第二数据节在所述目标数据段中的物理地址间的第二绝对距离等于所述第一绝对距离,才可以保证指令跳转时,可以实现有效跳转,读取到相应的数据。
其中,由于在所述可执行文件中,存在“__text,__text->__text,__stubs”这种跳转指令,所以如果只移动“__text”段中的“__text,__text”而不移动“__text,__stubs”,在指令跳转时,由于检查的是“__text”中的符号相对于“__bd_text”的距离,“__stubs”是相对于“__text”的距离,该方式计算出来的二者之间的距离与它们的实际距离不符,那么指令无法跳转,输出时检查到错误,抛出异常。
示例性的,请参阅3,图3为本公开实施例中的数据距离的示意图之一。如图3中所示,在一个正常的mach-o文件中,例如“__text,__text”的大小是110,“__text,__stubs”的大小是20。a符号存在于“__text,__text”中,b符号存在于“__text,__stubs”中。a距离__text,__text的补偿offset距离为90,b距离“__text,__stubs”的offset距离为10,a、b的实际距离是30。在检查时,发现b位于“__text,__stubs”,于是直接令地址距离dstaddr=130(110+20=130),然后计算出它们的相距距离displacement=130-90=40,无需插入相应的跳转中转符branchisland。在最终输出时检查出它们的实际距离为30,小于128,不会抛出异常,链接成功。
而在移动“__text,__text”之后,a被移动到了“__bd_text”,a、b的实际距离变成了10+40+90=140,但处理器计算相距距离displacement=130-90=40,没有插入branchisland,但在移动后,两者实际的距离应为10+40+90=140,这会导致实际的跳转出错,在最后的输出阶段检查出了这种错误,抛出异常,链接失败。因此,需要保证移动之后“__text,__text”和“__text,__stubs”两者的绝对距离与移动前是一致的。
在一些可能的实施例中,所述方法还包括:
在所述目标数据段中,检测所述第一数据节和所述第二数据节之间是否存在第三数据节;若存在,将检测到的第三数据节移动至所述目标数据段中除所述第一数据节和所述第二数据节之间的其他位置。
该步骤中,在将所述第一数据节和所述第二数据节移动至所述目标数据段中之后,为了避免在移动后出现指令跳转失败的情况,需要检测所述第一数据节和所述第二数据节之间是否存在第三数据节,如果有,则需要将多余的数据节移动到其他位置。
示例性的,请参阅图4,图4为本公开实施例中的数据距离的示意图之二。如图4中所示,在一个正常的mach-o文件中,例如“__text,__text”的大小是110,“__text,__stubs”的大小是17.9。a符号存在于“__text,__text”中,b符号存在于“__text,__stubs”中,a相对于“__text”的offset为0,b相对于“__stubs”的offset为17.5。在移动后,检查后判断出它们的距离为(110+17.9)-0=127.9,因此没有插入branchisland。而移动后,由于“__text,__text”和“__text,__stubs”之间存在多余的数据节部分,它们的实际距离应该是110+0.5+17.5=128,是会导致跳转出错的,所以抛出异常,链接失败。因此,需要将“__text,__text”和“__text,__stubs”,即所述第一数据节和所述第二数据节之间的多余的数据节移走。
在一些可能的实施例中,s201包括:
识别可执行文件的文本数据段中与所述第一数据节关联的第四数据节,其中,所述第四数据节在可执行文件运行时能够被重命名为所述第一数据节;确定所述第四数据节为所述至少一个数据节中的数据节。
在将所述第一数据节和所述第二数据节移动至所述目标数据段中时,需要将所述第一数据节和所述第二数据节中的数据全部移走,否则容易存在链接失败的问题。其中,在移动所述第一数据节时,由于部分数据节的问题,易导致所述第一数据节的数据无法全部移动,例如在“__text”中,存在文本媒介数据节“__textcoal_nt”和静态初始化数据节“__staticinit”等部分数据节,在所述可执行文件被执行时,会被重命名为文本数据节,即被重命名为所述第一数据节,因此,需要将这部分数据节一并移走。
因此,在该步骤中,需要从可执行文件的文本数据段中识别出与所述第一数据节关联的第四数据节,例如文本媒介数据节和静态初始化数据节等,并将这两个数据节确定为需要移动的所述至少一个数据节中的数据节,以在后续移动数据节的过程中一并移走。
其中,在其他实施例中,除与所述第一数据节关联的第四数据节外,还可以将其他能够被重命名为所述第一数据节的数据节进行相同处理,即确定为所述至少一个数据节,以在后续一并移走。
在一些可能的实施例中,s201包括:
识别可执行文件的文本数据段中的自定义数据节;确定所述自定义数据节为所述至少一个数据节中的一个。
当在可执行文件中添加了自定义数据节的话,如果自定义数据节中有跳转指令并且跳转距离超出限制的话,也会出现链接失败的问题。
因此,在该步骤中,也需要识别可执行文件的文本数据段中的自定义数据节,并将所述自定义数据节作为所述至少一个数据节中的一个数据节,以便后续可以将自定义数据节一并移走。
进一步的,在移动所述自定义数据节的时候,步骤s203包括:
将所述自定义数据节移动至创建的自定义数据段中,并保持所述第一数据节在所述目标数据段中的物理地址和所述自定义数据节在所述自定义数据段中的物理地址之间的相对距离,与所述第一数据节和所述自定义数据节在所述文本数据段中的物理地址间的相对距离相等。
该步骤中,需要新创建自定义数据段,并在移动时将所述自定义数据节移动至所述自定义数据段中,相应的,为了保证在移动后指令可以顺利跳转,需要保持移动前后,所述第一数据节和所述自定义数据节在各自数据段中的相对距离不变。
进一步的,在将所述自定义数据节移动至所述自定义数据段后,需要将所述自定义数据段的读写权限设置为可读写。
本公开实施例提供的文件配置方法,通过将文本数据段中的部分数据节从文本数据段移动至新建的目标数据段中,并设置可读写属性,可以减少可执行文件中文本数据段内的数据节的数量,从而可以减少可执行文件中需要加密的数据量,有效减小可执行文件压缩后压缩包的大小,提高提高压缩效率。
本领域技术人员可以理解,在具体实施方式的上述方法中,各步骤的撰写顺序并不意味着严格的执行顺序而对实施过程构成任何限定,各步骤的具体执行顺序应当以其功能和可能的内在逻辑确定。
基于同一发明构思,本公开实施例中还提供了与应用文件配置方法对应的应用文件配置装置,由于本公开实施例中的装置解决问题的原理与本公开实施例上述应用文件配置方法相似,因此装置的实施可以参见方法的实施,重复之处不再赘述。
请参阅图5和图6,图5为本公开实施例提供的一种应用文件配置装置的示意图之一,图6为本公开实施例提供的一种应用文件配置装置的示意图之二。如图5中所示,应用文件配置装置500包括:
数据节识别模块510,用于识别应用程序中可执行文件的文本数据段中属于非启动读取项的至少一个数据节。
数据段创建模块520,用于在所述可执行文件中创建新的目标数据段。
数据节移动模块530,用于将所述至少一个数据节移动至所述目标数据段中。
地址更新模块540,用于基于所述至少一个数据节在所述目标数据段中的物理地址,更新所述至少一个数据节在所述可执行文件的布局数据段中记载的、在所述目标数据段中的物理地址。
在一种可选的实施方式中,所述数据节识别模块510具体用于:
确定可执行文件的文本数据段中属于非启动读取项的第一数据节和第二数据节,其中,所述第一数据节中存储有指示跳转至所述第二数据节的可执行跳转指令;
检测所述第一数据节和所述第二数据节在所述文本数据段中的物理地址间的第一绝对距离;
所述数据节移动模块530在用于所述将所述至少一个数据节移动至所述目标数据段中时,具体用于:
在将所述第一数据节和所述第二数据节移动至所述目标数据段时,保持所述第一数据节和所述第二数据节在所述目标数据段中的物理地址间的第二绝对距离等于所述第一绝对距离。
在一种可选的实施方式中,如图6中所示所述应用文件配置500还包括多余字节移除模块550,所述多余字节移除模块550用于:
在所述目标数据段中,检测所述第一数据节和所述第二数据节之间是否存在第三数据节;
若存在,将检测到的第三数据节移动至所述目标数据段中除所述第一数据节和所述第二数据节之间的其他位置。
在一种可选的实施方式中,如图6中所示,所述应用文件配置500还包括第一设置模块560,所述第一设置模块560用于:
将所述文本数据段的读写权限设置为可读写。
在一种可选的实施方式中,所述数据节识别模块510还用于:
识别可执行文件的文本数据段中与所述第一数据节关联的第四数据节,其中,所述第四数据节在可执行文件被运行时能够被重命名为所述第一数据节;
确定所述第四数据节为所述至少一个数据节中的数据节。
在一种可选的实施方式中,所述数据节识别模块510还用于:
识别可执行文件的文本数据段中的自定义数据节;
确定所述自定义数据节为所述至少一个数据节中的一个。
在一种可选的实施方式中,所述数据节移动模块530在用于所述将所述至少一个数据节移动至所述目标数据段中时,具体用于:
将所述自定义数据节移动至创建的自定义数据段中,并保持所述第一数据节在所述目标数据段中的物理地址和所述自定义数据节在所述自定义数据段中的物理地址之间的相对距离,与所述第一数据节和所述自定义数据节在所述文本数据段中的物理地址间的相对距离相等。
在一种可选的实施方式中,如图6中所示,所述应用文件配置500还包括第二设置模块570,所述第二设置模块570用于:
将所述自定义标数据段的读写权限设置为可读写。
本公开实施例提供的应用文件配置装置,通过将文本数据段中的部分数据节从文本数据段移动至新建的目标数据段中,可以减少可执行文件中文本数据段内的数据节的数量,从而可以减少可执行文件中需要加密的数据量,有效减小可执行文件压缩后压缩包的大小,提高提高压缩效率。
对应于图1和图2中的应用文件配置方法,本公开实施例还提供了一种计算机设备700,如图7所示,为本公开实施例提供的计算机设备700结构示意图,包括:
处理器71、存储器72、和总线73;存储器72用于存储执行指令,包括内存721和外部存储器722;这里的内存721也称内存储器,用于暂时存放处理器71中的运算数据,以及与硬盘等外部存储器722交换的数据,处理器71通过内存721与外部存储器722进行数据交换,当所述计算机设备700运行时,所述处理器71与所述存储器72之间通过总线73通信,使得所述处理器71可以执行上述的应用文件配置方法的步骤。
上述指令的具体执行过程可以参考本公开实施例中所述的运动数据展示方法的步骤,此处不再赘述。
本公开实施例还提供一种计算机可读存储介质,该计算机可读存储介质上存储有计算机程序,该计算机程序被处理器运行时执行上述方法实施例中所述的应用文件配置方法的步骤。其中,该存储介质可以是易失性或非易失的计算机可读取存储介质。
所属领域的技术人员可以清楚地了解到,为描述的方便和简洁,上述描述的系统和装置的具体工作过程,可以参考前述方法实施例中的对应过程,在此不再赘述。在本公开所提供的几个实施例中,应该理解到,所揭露的系统、装置和方法,可以通过其它的方式实现。以上所描述的装置实施例仅仅是示意性的,例如,所述单元的划分,仅仅为一种逻辑功能划分,实际实现时可以有另外的划分方式,又例如,多个单元或组件可以结合或者可以集成到另一个系统,或一些特征可以忽略,或不执行。另一点,所显示或讨论的相互之间的耦合或直接耦合或通信连接可以是通过一些通信接口,装置或单元的间接耦合或通信连接,可以是电性,机械或其它的形式。
所述作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部单元来实现本实施例方案的目的。
另外,在本公开各个实施例中的各功能单元可以集成在一个处理单元中,也可以是各个单元单独物理存在,也可以两个或两个以上单元集成在一个单元中。
所述功能如果以软件功能单元的形式实现并作为独立的产品销售或使用时,可以存储在一个处理器可执行的非易失的计算机可读取存储介质中。基于这样的理解,本公开的技术方案本质上或者说对现有技术做出贡献的部分或者该技术方案的部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质中,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)执行本公开各个实施例所述方法的全部或部分步骤。而前述的存储介质包括:u盘、移动硬盘、只读存储器(read-onlymemory,rom)、随机存取存储器(randomaccessmemory,ram)、磁碟或者光盘等各种可以存储程序代码的介质。
最后应说明的是:以上所述实施例,仅为本公开的具体实施方式,用以说明本公开的技术方案,而非对其限制,本公开的保护范围并不局限于此,尽管参照前述实施例对本公开进行了详细的说明,本领域的普通技术人员应当理解:任何熟悉本技术领域的技术人员在本公开揭露的技术范围内,其依然可以对前述实施例所记载的技术方案进行修改或可轻易想到变化,或者对其中部分技术特征进行等同替换;而这些修改、变化或者替换,并不使相应技术方案的本质脱离本公开实施例技术方案的精神和范围,都应涵盖在本公开的保护范围之内。因此,本公开的保护范围应所述以权利要求的保护范围为准。