CN116010108A - 二进制重排的预分析方法、装置、设备及存储介质 - Google Patents
二进制重排的预分析方法、装置、设备及存储介质 Download PDFInfo
- Publication number
- CN116010108A CN116010108A CN202310140892.4A CN202310140892A CN116010108A CN 116010108 A CN116010108 A CN 116010108A CN 202310140892 A CN202310140892 A CN 202310140892A CN 116010108 A CN116010108 A CN 116010108A
- Authority
- CN
- China
- Prior art keywords
- binary
- rearrangement
- information
- memory
- 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.)
- Pending
Links
Images
Classifications
-
- 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
- Debugging And Monitoring (AREA)
Abstract
本申请实施例提供了一种二进制重排的预分析方法、装置、设备及存储介质,涉及应用优化技术领域。该方法包括:通过应用的编译文件计算预设方法函数的第一内存占用信息,预设方法函数为应用启动所调用的方法函数;根据预设方法函数计算应用对应的二进制重排文件的第二内存占用信息;基于第一内存占用信息、第二内存占用信息确定二进制重排分析结果。因此,本申请实施例能够在二进制重排之前获取应用启动速度提升相关的二进制重排分析结果,便于快速得到二进制重排的预期效果和判断二进制重排是否成功,有助于应用优化策略调整的有效进行,且降低了应用设计时间和设计成本。
Description
技术领域
本申请涉及应用优化技术领域,具体而言,本申请涉及一种二进制重排的预分析方法、装置、设备及存储介质。
背景技术
随着科技的发展,智能手机、PAD(平板电脑)等智能终端无论是在硬件上,还是在软件上,都得到了极大提升。用户也越来越喜欢在智能终端上安装各式各样的应用,比如通过视频应用看视频节目,通过聊天应用与好友聊天,通过音乐应用欣赏音乐等,并且这已经成为了用户日常生活的一个重要组成部分。
在应用使用时,用户常常希望应用能够尽可能快地启动,为了满足用户的需求,设计了多种提升应用启动速度的技术。其中一个比较有代表性的技术就是二进制重排。二进制重排通过对应用启动时调到的方法函数进行再次排列,使得这些方法函数按照顺序紧密规律地排列在打包的二进制文件前面。这样在应用启动时就能够减少数据读取内存缺页中断(Page Fault)的频次,进而加快应用的启动速度。
但是,应用的二进制重排具有一定的技术门槛,实际操作过程中的每个步骤都可能遇到各种问题,且不同的应用通过二进制重排节省的时间也不一致。而现有技术中,二进制重排的速度提升效果相关的分析结果只能在二进制重排操作之后才能得知,容易导致为了二进制重排付出了比较高的成本,应用后启动速度却无法满足要求,且增加了应用设计成本。
发明内容
本申请实施例提供了一种二进制重排的预分析方法、装置、设备及存储介质,可以解决不能在二进制重排操作之前获取二进制重排的分析结果的问题。为了实现该目的,本申请实施例提供了如下几个方案。
根据本申请实施例的一个方面,提供了一种二进制重排的预分析方法,该方法包括:
通过应用的编译文件计算预设方法函数的第一内存占用信息,所述预设方法函数为应用启动所调用的方法函数;
根据所述预设方法函数计算应用对应的二进制重排文件的第二内存占用信息;
基于所述第一内存占用信息、所述第二内存占用信息确定二进制重排分析结果。
在一个可能的实现方式中,所述通过应用的编译文件计算预设方法函数的第一内存占用信息,包括:
通过预设编译工具编译应用生成链接映射表文件;
获取所述链接映射表文件中预设方法函数的信息,根据所述信息计算所述预设方法函数占用的虚拟内存页数量,并将所述虚拟内存页数量作为第一内存占用信息,所述信息包括预设方法函数的地址、大小、符号以及预设方法函数对应的代码区的起始地址中的至少一项。
在一个可能的实现方式中,所述获取所述链接映射表文件中预设方法函数的信息,包括:
扫描所述链接映射表文件中的方法函数,并将扫描所得的方法函数的信息存入所述信息对应的字典。
在一个可能的实现方式中,所述根据所述信息计算所述预设方法函数占用的虚拟内存页数量,包括:
获取应用的重排文件,根据所述重排文件与字典的映射关系获取预设方法函数对应的地址和大小,基于所述地址和大小确定占用的虚拟内存页数量,所述重排文件包括应用启动所调用的预设方法函数的符号列表。
在一个可能的实现方式中,所述根据所述预设方法函数计算应用对应的二进制重排文件的第二内存占用信息,包括:
获取所述预设方法函数的大小相加之和,根据所述大小相加之和确定预设方法函数二进制重排后占用的虚拟内存页数量,并将所述虚拟内存页数量作为第二内存占用信息。
在一个可能的实现方式中,所述基于所述第一内存占用信息、所述第二内存占用信息确定二进制重排分析结果,包括:
根据所述第一内存占用信息、第二内存占用信息的差值获取节省的内存缺页中断处理时间,基于所述节省的内存缺页中断处理时间确定二进制重排分析结果。
在一个可能的实现方式中,所述将扫描所得的方法函数的信息存入所述信息对应的字典,还包括:
根据所述字典中方法函数的地址、大小获取所述方法函数的校验结果。
根据本申请实施例的另一个方面,提供了一种二进制重排的预分析装置,预分析装置包括:
第一内存占用计算模块,用于通过应用的编译文件计算预设方法函数的第一内存占用信息,所述预设方法函数为应用启动所调用的方法函数;
第二内存占用计算模块,用于根据所述预设方法函数计算应用对应的二进制重排文件的第二内存占用信息;
分析模块,用于基于所述第一内存占用信息、所述第二内存占用信息的差值获取二进制重排分析结果。
根据本申请实施例的又一个方面,提供了一种电子设备,该电子设备包括存储器、处理器及存储在存储器上的计算机程序,所述处理器执行所述计算机程序以实现如上所述方法的步骤。
根据本申请实施例的再一个方面,提供了一种计算机可读存储介质,其上存储有计算机程序,所述计算机程序被处理器执行时实现如上所述方法的步骤。
本申请实施例提供的技术方案带来的有益效果是:通过应用的编译文件计算预设方法函数的第一内存占用信息,并根据该预设函数计算应用对应的二进制重排文件的第二内存占用信息,通过得到的第一内存占用信息、第二内存占用信息得到二进制重排分析结果。本申请实施例在对应用执行二进制重排操作前,先计算应用启动所调用的方法函数的第一内存占用信息,并计算该方法函数在二进制重排后的第二内存占用信息,根据该第一内存占用信息与第二内存占用信息得到二进制重排的分析结果。因此,本申请实施例能够在二进制重排之前获取应用启动速度提升相关的二进制重排分析结果,便于快速得到二进制重排的预期效果和判断二进制重排是否成功,有助于应用优化策略调整的有效进行,且降低了应用设计时间和设计成本。
附图说明
为了更清楚地说明本申请实施例中的技术方案,下面将对本申请实施例描述中所需要使用的附图作简单的介绍。
图1为本申请实施例提供的一种二进制重排的预分析方法的流程示意图;
图2为本申请实施例提供的一种计算第一内存占用信息的实施例流程示意图;
图3为本申请实施例提供的预分析方法的实施例示意图;
图4为本申请实施例提供的二进制重排的预分析装置的结构示意图;
图5为本申请实施例提供的一种电子设备的结构示意图。
具体实施方式
下面结合本申请中的附图描述本申请的实施例。应理解,下面结合附图所阐述的实施方式,是用于解释本申请实施例的技术方案的示例性描述,对本申请实施例的技术方案不构成限制。
本技术领域技术人员可以理解,除非特意声明,这里使用的单数形式“一”、“一个”、“所述”和“该”也可包括复数形式。应该进一步理解的是,本申请实施例所使用的术语“包括”以及“包含”是指相应特征可以实现为所呈现的特征、信息、数据、步骤、操作、元件和/或组件,但不排除实现为本技术领域所支持其他特征、信息、数据、步骤、操作、元件、组件和/或它们的组合等。应该理解,当我们称一个元件被“连接”或“耦接”到另一元件时,该一个元件可以直接连接或耦接到另一元件,也可以指该一个元件和另一元件通过中间元件建立连接关系。此外,这里使用的“连接”或“耦接”可以包括无线连接或无线耦接。这里使用的术语“和/或”指示该术语所限定的项目中的至少一个,例如“A和/或B”指示实现为“A”,或者实现为“A”,或者实现为“A和B”。
为使本发明的目的、技术方案和优点更加清楚,下面将结合附图对本发明实施方式作进一步的详细描述。
针对背景技术中所示的技术问题或需要改善的地方,本申请提出一种二进制重排的预分析方法、装置、设备以及存储介质,该方案通过应用的编译文件计算预设方法函数的第一内存占用信息,并根据该预设函数计算应用对应的二进制重排文件的第二内存占用信息,通过得到的第一内存占用信息、第二内存占用信息得到二进制重排分析结果。
下面通过对几个示例性实施方式的描述,对本发明实施例的技术方案以及本发明的技术方案产生的技术效果进行说明。需要指出的是,下述实施方式之间可以相互参考、借鉴或结合,对于不同实施方式中相同的术语、相似的特征以及相似的实施步骤等,不再重复描述。
首先对本申请涉及的几个名词进行介绍和解释:
编译文件:通过编译器对应用的源文件进行处理生成的文件。本申请的编译文件包括应用启动所调用的方法函数的信息。
方法函数:一个可以完成独立功能的代码块,可以反复使用,每次使用都是独立的,其为存在于类的结构体,通过该结构体完成功能、数据的处理。
目前二进制重排的已有操作是先对应用执行二进制重排操作,获取二进制重排后的应用的启动速度,将该启动速度与应用二进制重排之前的启动速度进行对比,判断启动速度是否有效提升。若有效提升,则认为二进制重排有效,结束二进制重排操作,若未能有效提升,则对二进制重排生的文件或相关操作进行检查判断是否存在错误或者更换其他优化方法。这种优化方式具备以下缺点:
1.时间长,由于无法提前做出评估,只能是通过应用的启动速度数据来观察优化效果。从应用上线到数据呈现变化,通常至少需要两周的时间,耗时长。
2.会让人产生困惑,由于不知道二进制重排优化多少启动时间,可能应用启动速度相关的线上数据没有明显变化,就会怀疑二进制重排运用的是否正确,以及用上了是否起作用,会让开发人员产生困惑。
3.成本高,二进制重排技术有一定技术门槛,当线上数据没有呈现预期变化的时候,需要寻找问题,再次复盘过程,会产生额外成本,增加了人力、物力、时间成本消耗。
本申请提供的二进制重排的预分析方法、装置、设备及存储介质,旨在解决现有技术中存在的至少一个技术问题。
本申请实施例中提供了一种预分析方法,可选地,该方法可以应用于任一电子设备,如手机、计算机设备、服务器设备等。如图1所示,该方法包括如下步骤S101~S103。
S101:通过应用的编译文件计算预设方法函数的第一内存占用信息。
可选地,电子设备为手机、平板电脑等移动终端,预设方法函数为应用启动时调用的方法函数。移动终端获取待进行二进制重排的应用的编译文件,利用该编译文件得到应用启动时调用的方法函数的信息,根据该信息计算第一内存占用信息。
其中,移动终端可以通过手动输入、本地存储查询、互联网下载、二维码扫描、APP导入等至少一种方式获取应用的编译文件。也可以在接收到预分析指令后,根据该预分析指令确定待分析的目标应用,利用预设的编译工具编译目标应用得到目标应用的编译文件。
可选地,应用对应的操作系统为iOS系统、Windows系统、Android系统、Linux系统以及其他能够加载和运行应用的操作系统。
可选地,电子设备在通过应用的编译文件计算第一内存占用信息前,还可以判断是否存储有该应用的第一内存占用信息对应的历史信息,若存储有历史信息,根据该历史信息获取历史版本应用中预设方法函数的信息以及对应的历史第一内存占用信息。根据该历史版本应用中预设方法函数的信息与当前版本应用中预设方法函数的差别(如增加、减少或改变的方法函数)、历史第一内存占用信息计算当前版本应用对应的第一内存占用信息。
可选地,第一内存占用信息为预设方法函数占用的虚拟内存页数量。电子设备获取预设每个预设方法函数的地址,将该地址对应的虚拟内存页确定为预设方法函数占用的虚拟内存页。对预设方法函数占用的虚拟内存页进行统计得到预设方法函数在二进制重排前占用的虚拟内存页数量。
S102:根据预设方法函数计算应用对应的二进制重排文件的第二内存占用信息。
可选地,电子设备获取预设方法函数的大小相加之和,根据该大小相加之和确定预设方法函数二进制重排后占用的虚拟内存页数量,并将虚拟内存页数量作为第二内存占用信息。
在一个实施例中,电子设备获取每个预设方法函数的内存占用大小,将该内存占用大小相加得到内存占用总和。根据内存占用总和以及单个虚拟内存页对应的内存大小计算二进制重排后的虚拟内存页占用数量。
其中,应用的编译文件包括每个预设方法函数的地址、大小、符号以及预设方法函数对应的代码区的起始地址中的至少一项信息,通过该编译文件中的信息每个预设方法函数的内存占用大小。
可选地,电子设备也可以通过编译文件获取每个预设方法函数的起始地址、结束地址,利用该起始地址、结束地址得到每个预设方法函数的内存占用大小,进而得到二进制重排后的虚拟内存页数量。
S103:基于第一内存占用信息、第二内存占用信息确定二进制重排分析结果。
可选地,电子设备根据第一内存占用信息、第二内存占用信息的差值获取节省的内存缺页中断处理时间,基于节省的内存缺页中断处理时间确定二进制重排分析结果。
在一个实施例中,电子设备计算得到第一内存占用信息、第二内存占用信息后,利用该第一内存占用信息、第二内存占用信息计算二进制重排后节省的虚拟内存页数量。因每读取一个虚拟内存页产生一次内存缺页中断,因此,能够根据该节省的虚拟内存页数量确定减少产生的内存缺页中断次数。且电子设备根据减少产生的内存缺页中断次数以及存储的单个内存缺页中断消耗的时间计算得到节省的内存缺页中断处理总时间,将该内存缺页中断处理总时间加入二进制重排分析结果中。
在一个实施例中,二进制重排分析结果还包括减少产生的内存缺页中断次数、二进制重排后占用的虚拟内存页个数、预设方法函数的数量以及二进制重排前预设方法函数在编译文件中的起始地址、结束地址和分配的虚拟内存页的个数中的至少一种。
可选地,计算得到二进制重排分析结果后,电子设备可以在其关联或管理的显示界面上显示该分析结果,也可以将该分析结果以邮件、短信、微信消息等方式发送给需要获取分析结果的目标对象。
可选地,获取二进制重排分析结果后,还可以根据该分析结果判断应用是否满足预设条件;若满足预设条件,则对应用执行二进制重排操作,若不满足,则提示应用的设计对象或开发对象选择新的优化策略。其中,预设条件可以为节省的内存缺页中断处理总时间大于等于预设值,也可以为节省的内存缺页中断处理总时间相比于原内存缺页中断处理总时间的比例小于预设比例。
可选地,获取二进制重排分析结果,并在根据二进制重排分析结果确定执行二进制重排操作后,还可以通过二进制重排分析结果对二进制重排后的优化效果进行监控。如获取二进制重排后的二进制重排文件,计算该二进制重排文件节省的内存缺页中断处理总时间与二进制重排分析结果中记录的内存缺页中断处理总时间是否一致,若一致判断二进制重排操作完成。若不一致,确定二进制重排操作未完成,需要重新进行二进制重排操作或进行故障检测。
相比于现有技术,本申请提供的方案通过应用的编译文件计算预设方法函数的第一内存占用信息,并根据该预设函数计算应用对应的二进制重排文件的第二内存占用信息,通过得到的第一内存占用信息、第二内存占用信息得到二进制重排分析结果。本申请实施例在对应用执行二进制重排操作前,先计算应用启动所调用的方法函数的第一内存占用信息,并计算该方法函数在二进制重排后的第二内存占用信息,根据该第一内存占用信息与第二内存占用信息得到二进制重排的分析结果。因此,本申请实施例能够在二进制重排之前获取应用启动速度提升相关的二进制重排分析结果,便于快速得到二进制重排的预期效果和判断二进制重排是否成功,有助于应用优化策略调整的有效进行,且降低了应用设计时间和设计成本。
针对预分析方法中的步骤S101,本申请实施例中提供了一种可能的实现方式,如图2所示,图2为本申请实施例提供的一种计算第一内存占用信息的实施例流程示意图。结合图2作进一步说明。
S210:通过预设编译工具编译应用生成链接映射表文件。
可选地,应用编译生成的编译文件为链接映射表文件,电子设备根据当前运行的操作系统选择编译应用的预设编译工具,不同操作系统对应的预设编译工具不同。其中,也可以根据应用的分类、名称等信息选择编译应用的预设编译工具,只需能够通过选择的预设编译工具进行应用编译操作,得到包括预设方法函数的编译文件即可。
具体的,当前操作系统为iOS系统,预设编译工具为iOS编译器Xcode。通过Xcode编译应用的操作如下:
1、通过Xcode的Write Link Map File接收输入的设置指令,根据该设置指令判断是否输出链接映射表文件。在Write Link Map File位于文件目录Target->BuildSettings下,默认设置为no。
2、根据输入的设置指令修改完毕之后,基于接收到指令执行clean操作,运行工程,执行Products->Show in Finder,并在mach-o文件上上层目录Intermediates.noindex文件生成链接映射表文件,该文件txt文件。根据接收到的重命名指令将链接映射表文件重命名为linked_map.txt。
可选地,为了减少工作量,电子设备在获取链接映射表文件前,还可以检查是否存在该应用的链接映射表文件,若检测到存在,且该链接映射表文件对应的应用的版本与当前的应用的版本一致时,不执行编译操作,直接输出检测到的链接映射表文件。
可选地,在执行预分析方法之前,还可以识别当前执行预分析操作的对象或终端,根据识别结果获取该对象或终端的权限,通过该权限判断该对象或终端是否能够执行预分析操作。并在确定能够执行预分析操作后,执行二进制重排的预分析方法。
S220:获取链接映射表文件中预设方法函数的信息,根据信息计算预设方法函数占用的虚拟内存页数量,并将虚拟内存页数量作为第一内存占用信息。
可选地,获取链接映射表文件中预设方法函数的信息,包括:扫描链接映射表文件中的方法函数,并将扫描所得的方法函数的信息存入信息对应的字典。其中,该信息包括预设方法函数的地址、大小、符号以及预设方法函数对应的代码区的起始地址中的至少一项。
其中,电子设备存储建立字典的实现代码,根据该实现代码在扫描链接映射表文件前、扫描链接映射表文件时或扫描得到方法函数的信息后,建立该信息对应的字典。该字典可以存储在电子设备的本地存储上,也可以存储在云端、连接的外部服务器、硬盘等外部存储设备上。
可选地,方法函数对应的代码区为链接映射表文件的特定代码区,方法函数的代码存储在链接映射表文件的特定代码区上,通过扫描该特定代码区的方式得到方法函数的信息。其中,可以根据特定代码区的名称、地址、标识符等信息识别链接映射表的特定代码区。
在一个实施例中,为了便于了解应用的方法函数的内存占用信息,电子设备在识别特定代码区后,获取该特定代码区的起始地址、结束地址以及所在的数据块的大小,并利用获取的信息计算该特定代码区分配的虚拟内存页个数。将该起始地址、结束地址以及分配的虚拟内存页个数加入二进制重排分析结果中。
具体的,链接映射表文件为Linked Map文件,方法函数对应的代码区为LinkedMap文件中的__Text代码区,电子设备读取Linked Map文件,获取__Text代码区的起始地址和块(数据块)大小,分析得到__Text代码区需要分配的虚拟内存页个数。并且,电子设备获取__Text代码区中所有方法函数的地址、大小(分配的内存大小)和具体符号(符号就是方法函数的签名,每一个方法函数都有),将获取的上述信息存入字典。
可选地,为了能够检测方法函数的地址重复、跳跃现象,将扫描所得的方法函数的信息存入所述信息对应的字典,还包括:根据字典中方法函数的地址、大小获取方法函数的校验结果。
具体的,电子设备将字典中代码区的起始地址与所有方法函数的大小相加得到一个地址,判断该地址与代码区的结束地址是否一致,若一致不进行方法函数重复或地址跳跃现象检测。若不一致,则确定出现方法函数重复或地址跳跃现象。并在确定不一致时,遍历字典中方法函数的信息,根据该信息判断是否出现多个符号相同的方法函数(方法函数重复)以及方法函数的地址与预设地址不匹配(地址跳跃),输出判断结果。其中,在该地址与代码区的结束地址一致。
在一个实施例中,方法函数对应的代码区为__Text代码区。__Text代码区有一个统计函数summary,该函数表明了__Text代码区的起始地址和结束地址,理论上起始地址+所有方法函数的大小=结束地址,若不一致,则可能出现方法函数重复或地址跳跃现象。其中,方法函数重复、地址跳跃的具体解释如下:
方法函数重复:比如一个方法函数的名字叫做A,遍历__Text代码区的所有方法函数,发现不止一个名字为A的方法函数。则确定出现方法函数重复。
地址跳跃:比如两个方法函数A和B。A的结束地址是3,B是下一个方法函数,B的开始地址应该是4,但根据遍历结果发现B的开始地址不是4,而是比4大的数,也就是跳过了紧挨着的地址编号。这叫地址跳跃。
可选地,在检测到方法函数或地址跳跃后,电子设备可以终止预分析方法的执行,根据检测结果提示出现方法函数重复或地址跳跃,并展示代码区中出现方法函数重复或地址跳跃的内容,便于快速进行修改,提高预分析结果的有效性。
可选地,根据信息计算所述预设方法函数占用的虚拟内存页数量,包括:获取应用的重排文件,根据重排文件与字典的映射关系获取预设方法函数对应的地址和大小,基于地址和大小确定占用的虚拟内存页数量,重排文件包括应用启动所调用的预设方法函数的符号列表。
其中,利用预设编译工具生成应用对应的重排文件,该重排文件可以与应用的编译文件同时期生成,也可以在扫描链接映射表文件时利用预设编译工具生成。
具体的,应用为iOS操作系统中的应用,预设编译工具为iOS编译器Xcode,重排文件为lb.order文件。电子设备运行Xcode生成重排文件的步骤包括:
1、根据输入的指令在目标工程Target->BuildSettings->Other C Flags添加配置信息-fsanitize-coverage=func,trace-pc-guard。并且在确定应用存在swfit代码时在Other Swift Flags添加配置信息-sanitize-coverage=func和-sanitize=undefined(且如果应用有源码编译的Framework(架构)也要添加这些配置信息。CocoaPods引入的第三方库不添加此配置)。
2、将MMTracePCGuard文件(该文件包括应用从启动开始到启动结束,整个过程中调用的方法函数,也就是symbol列表)放入到目标工程。其中,MMTracePCGuard存储在预设的附件Linked_Order_Analyze.zip中。
3、将+[MMTracePCGuard analyze]方法放到目标工程认为可以启动结束的位置调用,执行clean->build->run。根据自身工程复杂度的情况,等待几分钟或者十几分钟,Xcode在沙盒Documents的temp目录生成作为重排文件的lb.order文件。
可选地,电子设备以重排文件中每个预设方法函数的符号为关键词对字典中的符号进行映射,根据映射结果得到字典中匹配的符号,将该符号对应的方法函数确定为预设方法函数。进而利用字典中预设方法函数的地址和大小确定预设方法函数占用的虚拟内存页数量。
具体的,方法函数对应的代码区为__Text代码区。一个虚拟内存页大小是10,有3个内存页,其地址分别为0~10,11~20、21~30,重排文件order中有三个预设方法函数的符号,为A、B和C,通过重排文件与字典的映射,得到字典中的预设方法函数的信息。根据该信息确定预设方法函数在__Text代码区中的起始地址分别是2、14、25,那么预设方法函数A、B和C分别落在了0~10,11~20、21~30范围的三个内存页中,也就是得到了预设方法函数占用的虚拟内存页个数为3。
为了更清楚地理解预分析方法的实施过程,本申请实施例还提供了执行二进制重排的预分析方法的示意图,具体参见图3。结合图3对预分析方法进行说明。
在一个实施例中,应用为iOS应用,通过预设编译工具Xcode生成应用的链接映射表文件Linked_map.txt和重排文件Lb.order。电子设备读取Linked_map.txt文件,获取该文件中方法函数所在的代码区__Text代码区的起始地址和块(数据块)大小,根据该数据块大小得到需要分配的虚拟内存页个数。获取__Text代码区中所有symbol(方法函数)的地址、大小(每一个方法函数被加载的时候,都要在内存中分配空间来存放运行,该大小为分配的内存空间大小)和符号(该符号为方法函数的签名,还可以为方法函数的编码、名称等识别信息),存入字典(该字典为执行预分析方法时对应建立的字典)。根据字典中的起始地址和所有symbol大小的总和(加起来之后就知道这些symbol总共占用多少内存),校验该总和与__Text代码区的结束地址是否一致,通过该方式检测方法函数重复和地址跳跃现象,输出校验结果。
电子设备将lb.order文件的签名列表所包含的预设方法函数的符号与字典中的符号做映射,得到字典中预设方法函数对应的地址和内存占用大小,根据该地址和内存占用大小得到二进制重排前预设方法函数占用的虚拟内存页数量。并且,电子设备将lb.order文件中所包含的预设方法函数的内存占用大小相加,得到内存占用之和,通过内存占用之和分析得到二进制重排后所占的虚拟内存页个数。通过二进制重排前占用的虚拟内存页个数-二进制重排后所占虚拟内存页个数=节省的虚拟内存页个数。
节省的虚拟内存页个数*每一个内存缺页中断大致的处理时间=节省的内存缺页中断处理总时间,将该节省的内存缺页中断处理总时间作为预估节省时间,并放入二进制重排分析结果。
在一个实施例中,应用为iOS应用,通过预设编译工具Xcode生成应用的链接映射表文件Linked_map.txt和重排文件Lb.order。其中,linked_map.txt里记录了方法函数+[Aa]、+[D d]、+[H h]和+[P p],以及各方法函数的地址和大小。各方法函数散列地分布在二进制文件中,分布在4个内存页里,调用这4个方法函数产生4次内存缺页中断(PageFault),lb.order里记录了启动应用所调用的方法函数+[A a]、+[D d]、+[H h]和+[Pp]。通过预分析方法获取方法函数+[A a]、+[D d]、+[H h]和+[P p]的大小之和,确定该大小之和正好能填满一个虚拟内存页,即二进制重排后调用这4个方法函数只产生了1次内存缺页中断(Page Fault),分析得到二进制重排节省了3个内存缺页中断(Page Fault)消耗的时间。
在另一个实施例中,应用的链接映射文件Linked_map.txt中方法函数对应的代码区的起始地址为0x100006A60,结束地址为0x1021E7E8,代码区分配的虚拟内存页个数为2169。根据重排文件lb.order得到需要重排的预设方法函数的符号个数为4630,二进制重排前预设方法函数分配的虚拟内存页格式为392,计算得到二进制重排后预设方法函数分配的虚拟内存页个数为99,在平均一个内存缺页中断(Page Fault)耗时0.5ms的情况下,减少的内存缺页中断(Page Fault)的个数为293个,计算得到预估节省146ms,可确定二进制重排对应用的优化幅度可观,满足预设条件,能够对应用执行二进制重排操作。
并且,为了对二进制重排结果进行验证,执行二进制重排操作后,还可以根据二进制重排后的应用再次编译出linked_map.txt和lb.order文件,再次根据linked_map.txt和lb.order计算应用的可节省时间。可以得到如下结果:Linked_map.txt中方法函数对应的代码区的起始地址为0x100006A60,结束地址为0x1021E7E8,代码区分配的虚拟内存页个数为2169,根据再次编译的重排文件lb.order得到需要重排的预设方法函数的符号个数为4630,二进制重排前预设方法函数分配的虚拟内存页格式为99,计算得到二进制重排后预设方法函数分配的虚拟内存页个数为99,内存缺页中断减少的个数为0,预估节省的时间为0ms。可以看出二进制重排后应用的文件已经不需要再次进行重排了。
通过上述实施例可知,本申请的预分析方法能够在二进制重排前分析出二进制重排对应用启动节省的时间,便于获取优化效果,给开发对象和设计对象一个可接受的心理预期,以便调整优化策略。
需要说明的是,在本申请的可选实施例中,所涉及到的数据(如第一内存占用信息、编译文件、第二内存占用信息等数据),当本申请以上实施例运用到具体产品或技术中时,需要获得使用对象许可或者同意,且相关数据的收集、使用和处理需要遵守相关国家和地区的相关法律法规和标准。也就是说,本申请实施例中如果涉及到与对象有关的数据,这些数据需要经由对象授权同意、且符合国家和地区的相关法律法规和标准的情况下获取的。
本申请实施例中还提供了一种二进制重排的预分析装置。如图4所示,本实施例二进制重排的预分析装置300包括第一内存占用计算模块301、第二内存占用计算模块302以及分析模块303。其中,第一内存占用计算模块301,用于通过应用的编译文件计算预设方法函数的第一内存占用信息,预设方法函数为应用启动所调用的方法函数。第二内存占用计算模块302,用于根据预设方法函数计算应用对应的二进制重排文件的第二内存占用信息。分析模块303,用于基于第一内存占用信息、第二内存占用信息的差值获取二进制重排分析结果。
可选地,通过应用的编译文件计算预设方法函数的第一内存占用信息,包括:通过预设编译工具编译应用生成链接映射表文件;获取链接映射表文件中预设方法函数的信息,根据信息计算预设方法函数占用的虚拟内存页数量,并将虚拟内存页数量作为第一内存占用信息,信息包括预设方法函数的地址、大小、符号以及预设方法函数对应的代码区的起始地址中的至少一项。
可选地,获取所述链接映射表文件中预设方法函数的信息,包括:扫描链接映射表文件中的方法函数,并将扫描所得的方法函数的信息存入信息对应的字典。
可选地,根据所述信息计算预设方法函数占用的虚拟内存页数量,包括:获取应用的重排文件,根据重排文件与字典的映射关系获取预设方法函数对应的地址和大小,基于地址和大小确定占用的虚拟内存页数量,重排文件包括应用启动所调用的预设方法函数的符号列表。
可选地,根据预设方法函数计算应用对应的二进制重排文件的第二内存占用信息,包括:获取预设方法函数的大小相加之和,根据大小相加之和确定预设方法函数二进制重排后占用的虚拟内存页数量,并将虚拟内存页数量作为第二内存占用信息。
可选地,基于第一内存占用信息、第二内存占用信息确定二进制重排分析结果,包括:根据第一内存占用信息、第二内存占用信息的差值获取节省的内存缺页中断处理时间,基于节省的内存缺页中断处理时间确定二进制重排分析结果。
可选地,将扫描所得的方法函数的信息存入信息对应的字典,还包括:根据字典中方法函数的地址、大小获取方法函数的校验结果。
本申请实施例中提供了一种电子设备,包括存储器、处理器及存储在存储器上的计算机程序,该处理器执行上述计算机程序以实现二进制重排的预分析方法的步骤。
在一个可选实施例中提供了一种电子设备,如图5所示,图5所示的电子设备4000包括:处理器4001和存储器4003。其中,处理器4001和存储器4003相连,如通过总线4002相连。可选地,电子设备4000还可以包括收发器4004,收发器4004可以用于该电子设备与其他电子设备之间的数据交互,如数据的发送和/或数据的接收等。需要说明的是,实际应用中收发器4004不限于一个,该电子设备4000的结构并不构成对本申请实施例的限定。
处理器4001可以是CPU(Central Processing Unit,中央处理器),通用处理器,DSP(Digital Signal Processor,数据信号处理器),ASIC(Application SpecificIntegrated Circuit,专用集成电路),FPGA(Field Programmable Gate Array,现场可编程门阵列)或者其他可编程逻辑器件、晶体管逻辑器件、硬件部件或者其任意组合。其可以实现或执行结合本申请公开内容所描述的各种示例性的逻辑方框,模块和电路。处理器4001也可以是实现计算功能的组合,例如包含一个或多个微处理器组合,DSP和微处理器的组合等。
总线4002可包括一通路,在上述组件之间传送信息。总线4002可以是PCI(Peripheral Component Interconnect,外设部件互连标准)总线或EISA(ExtendedIndustry Standard Architecture,扩展工业标准结构)总线等。总线4002可以分为地址总线、数据总线、控制总线等。为便于表示,图5中仅用一条粗线表示,但并不表示仅有一根总线或一种类型的总线。
存储器4003可以是ROM(Read Only Memory,只读存储器)或可存储静态信息和指令的其他类型的静态存储设备,RAM(Random Access Memory,随机存取存储器)或者可存储信息和指令的其他类型的动态存储设备,也可以是EEPROM(Electrically ErasableProgrammable Read Only Memory,电可擦可编程只读存储器)、CD-ROM(Compact DiscRead Only Memory,只读光盘)或其他光盘存储、光碟存储(包括压缩光碟、激光碟、光碟、数字通用光碟、蓝光光碟等)、磁盘存储介质、其他磁存储设备或者能够用于携带或存储计算机程序并能够由计算机读取的任何其他介质,在此不做限定。
存储器4003用于存储执行本申请实施例的计算机程序,并由处理器4001来控制执行。处理器4001用于执行存储器4003中存储的计算机程序,以实现前述方法实施例所示的步骤。
其中,电子设备可以是任何一种可与对象进行人机交互的电子产品,例如,个人计算机、平板电脑、智能手机、个人数字助理(Personal Digital Assistant,PDA)、游戏机、交互式网络电视(Internet Protocol Television,IPTV)、智能式穿戴式设备等。
所述电子设备还可以包括网络设备和/或对象设备。其中,所述网络设备包括,但不限于单个网络服务器、多个网络服务器组成的服务器组或基于云计算(CloudComputing)的由大量主机或网络服务器构成的云。
所述电子设备所处的网络包括但不限于互联网、广域网、城域网、局域网、虚拟专用网络(Virtual Private Network,VPN)等。
本申请实施例提供了一种计算机可读存储介质,该计算机可读存储介质上存储有计算机程序,计算机程序被处理器执行时可实现前述方法实施例的步骤及相应内容。
本申请的说明书和权利要求书及上述附图中的术语“第一”、“第二”、“第三”、“第四”、“1”、“2”等(如果存在)是用于区别类似的对象,而不必用于描述特定的顺序或先后次序。应该理解这样使用的数据在适当情况下可以互换,以便这里描述的本申请的实施例能够以除图示或文字描述以外的顺序实施。
应该理解的是,虽然本申请实施例的流程图中通过箭头指示各个操作步骤,但是这些步骤的实施顺序并不受限于箭头所指示的顺序。除非本文中有明确的说明,否则在本申请实施例的一些实施场景中,各流程图中的实施步骤可以按照需求以其他的顺序执行。此外,各流程图中的部分或全部步骤基于实际的实施场景,可以包括多个子步骤或者多个阶段。这些子步骤或者阶段中的部分或全部可以在同一时刻被执行,这些子步骤或者阶段中的每个子步骤或者阶段也可以分别在不同的时刻被执行。在执行时刻不同的场景下,这些子步骤或者阶段的执行顺序可以根据需求灵活配置,本申请实施例对此不限制。
以上所述仅是本申请部分实施场景的可选实施方式,应当指出,对于本技术领域的普通技术人员来说,在不脱离本申请的方案技术构思的前提下,采用基于本申请技术思想的其他类似实施手段,同样属于本申请实施例的保护范畴。
Claims (10)
1.一种二进制重排的预分析方法,其特征在于,包括:
通过应用的编译文件计算预设方法函数的第一内存占用信息,所述预设方法函数为应用启动所调用的方法函数;
根据所述预设方法函数计算应用对应的二进制重排文件的第二内存占用信息;
基于所述第一内存占用信息、所述第二内存占用信息确定二进制重排分析结果。
2.根据权利要求1所述的方法,其特征在于,所述通过应用的编译文件计算预设方法函数的第一内存占用信息,包括:
通过预设编译工具编译应用生成链接映射表文件;
获取所述链接映射表文件中预设方法函数的信息,根据所述信息计算所述预设方法函数占用的虚拟内存页数量,并将所述虚拟内存页数量作为第一内存占用信息,所述信息包括预设方法函数的地址、大小、符号以及预设方法函数对应的代码区的起始地址中的至少一项。
3.根据权利要求2所述的方法,其特征在于,所述获取所述链接映射表文件中预设方法函数的信息,包括:
扫描所述链接映射表文件中的方法函数,并将扫描所得的方法函数的信息存入所述信息对应的字典。
4.根据权利要求3所述的方法,其特征在于,所述根据所述信息计算所述预设方法函数占用的虚拟内存页数量,包括:
获取应用的重排文件,根据所述重排文件与字典的映射关系获取预设方法函数对应的地址和大小,基于所述地址和大小确定占用的虚拟内存页数量,所述重排文件包括应用启动所调用的预设方法函数的符号列表。
5.根据权利要求1所述的方法,其特征在于,所述根据所述预设方法函数计算应用对应的二进制重排文件的第二内存占用信息,包括:
获取所述预设方法函数的大小相加之和,根据所述大小相加之和确定预设方法函数二进制重排后占用的虚拟内存页数量,并将所述虚拟内存页数量作为第二内存占用信息。
6.根据权利要求1所述的方法,其特征在于,所述基于所述第一内存占用信息、所述第二内存占用信息确定二进制重排分析结果,包括:
根据所述第一内存占用信息、第二内存占用信息的差值获取节省的内存缺页中断处理时间,基于所述节省的内存缺页中断处理时间确定二进制重排分析结果。
7.根据权利要求3所述的方法,其特征在于,所述将扫描所得的方法函数的信息存入所述信息对应的字典,还包括:
根据所述字典中方法函数的地址、大小获取所述方法函数的校验结果。
8.一种二进制重排的预分析装置,其特征在于,包括:
第一内存占用计算模块,用于通过应用的编译文件计算预设方法函数的第一内存占用信息,所述预设方法函数为应用启动所调用的方法函数;
第二内存占用计算模块,用于根据所述预设方法函数计算应用对应的二进制重排文件的第二内存占用信息;
分析模块,用于基于所述第一内存占用信息、所述第二内存占用信息的差值获取二进制重排分析结果。
9.一种电子设备,包括存储器、处理器及存储在存储器上的计算机程序,其特征在于,所述处理器执行所述计算机程序以实现权利要求1-7任一项所述方法的步骤。
10.一种计算机可读存储介质,其上存储有计算机程序,其特征在于,所述计算机程序被处理器执行时实现权利要求1-7任一项所述方法的步骤。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202310140892.4A CN116010108A (zh) | 2023-02-15 | 2023-02-15 | 二进制重排的预分析方法、装置、设备及存储介质 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202310140892.4A CN116010108A (zh) | 2023-02-15 | 2023-02-15 | 二进制重排的预分析方法、装置、设备及存储介质 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN116010108A true CN116010108A (zh) | 2023-04-25 |
Family
ID=86037500
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202310140892.4A Pending CN116010108A (zh) | 2023-02-15 | 2023-02-15 | 二进制重排的预分析方法、装置、设备及存储介质 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN116010108A (zh) |
-
2023
- 2023-02-15 CN CN202310140892.4A patent/CN116010108A/zh active Pending
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US20190324772A1 (en) | Method and device for processing smart contracts | |
CN107229559B (zh) | 针对业务系统的测试完整度的检测方法和装置 | |
CN108984389B (zh) | 一种应用程序测试方法及终端设备 | |
CN114546738B (zh) | 服务器通用测试方法、系统、终端及存储介质 | |
CN110231994B (zh) | 内存分析方法、装置和计算机可读存储介质 | |
CN105573734B (zh) | 一种用于提供sdk文件的方法与设备 | |
CN107066519B (zh) | 一种任务检测方法及装置 | |
CN109828859B (zh) | 移动终端内存分析方法、装置、存储介质及电子设备 | |
WO2017128952A1 (zh) | 堆栈的保护方法及装置 | |
US9026612B2 (en) | Generating a custom parameter rule based on a comparison of a run-time value to a request URL | |
CN111124480A (zh) | 应用程序包的生成方法、装置、电子设备及存储介质 | |
CN110795353B (zh) | 快应用的调试方法、装置、设备及存储介质 | |
CN111597553A (zh) | 病毒查杀中的进程处理方法、装置、设备及存储介质 | |
CN112579146A (zh) | 接口变化的检测方法及装置 | |
CN114116505A (zh) | 代码测试方法及装置 | |
CN112181830B (zh) | 内存泄露的检测方法、装置、终端及介质 | |
CN109542775B (zh) | 一种测试脚本的生成和执行方法及装置 | |
CN105302700A (zh) | 一种记录在触摸终端上的用户操作的方法与设备 | |
CN116010108A (zh) | 二进制重排的预分析方法、装置、设备及存储介质 | |
CN110716866A (zh) | 代码质量扫描方法、装置、计算机设备及存储介质 | |
CN110688320A (zh) | 全局变量的检测方法、装置及终端设备 | |
CN108563578A (zh) | Sdk兼容性检测方法、装置、设备及可读存储介质 | |
CN114840427A (zh) | 一种代码测试、测试用例生成的方法及装置 | |
CN114169311A (zh) | 一种数据解析方法及装置 | |
CN113806231A (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 |