CN108132790A - 检测无用代码的方法、装置及计算机存储介质 - Google Patents

检测无用代码的方法、装置及计算机存储介质 Download PDF

Info

Publication number
CN108132790A
CN108132790A CN201711400846.4A CN201711400846A CN108132790A CN 108132790 A CN108132790 A CN 108132790A CN 201711400846 A CN201711400846 A CN 201711400846A CN 108132790 A CN108132790 A CN 108132790A
Authority
CN
China
Prior art keywords
class
list
executable file
useless
function
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
Application number
CN201711400846.4A
Other languages
English (en)
Other versions
CN108132790B (zh
Inventor
李焕雄
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Guangzhou Kugou Computer Technology Co Ltd
Original Assignee
Guangzhou Kugou Computer Technology Co Ltd
Priority date (The priority date 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 date listed.)
Filing date
Publication date
Application filed by Guangzhou Kugou Computer Technology Co Ltd filed Critical Guangzhou Kugou Computer Technology Co Ltd
Priority to CN201711400846.4A priority Critical patent/CN108132790B/zh
Publication of CN108132790A publication Critical patent/CN108132790A/zh
Application granted granted Critical
Publication of CN108132790B publication Critical patent/CN108132790B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/40Transformation of program code
    • G06F8/41Compilation
    • G06F8/44Encoding
    • G06F8/443Optimisation
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/40Transformation of program code
    • G06F8/41Compilation
    • G06F8/44Encoding
    • G06F8/443Optimisation
    • G06F8/4434Reducing the memory space required by the program code

Landscapes

  • Engineering & Computer Science (AREA)
  • General Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Software Systems (AREA)
  • Physics & Mathematics (AREA)
  • General Physics & Mathematics (AREA)
  • Stored Programmes (AREA)

Abstract

本发明公开了一种检测无用代码的方法、装置及计算机可读存储介质,属于信息处理技术领域。该方法包括:获取可执行文件中的多个段;通过对多个段进行正则分析以确定可执行文件中的调用类列表和无用类列表,以及通过对多个段进行正则分析以确定可执行文件中的调用函数列表,调用类列表包括被调用的类和被调用的类包括的函数;基于调用类列表和调用函数列表,确定可执行文件中的无用函数列表;基于无用类列表和无用函数列表确定可执行文件中的无用代码。由此可见,在本发明实施例中无需人工参与,就可以自动分析出可执行文件中的无用代码,相较于相关技术中人工查找无用代码,省时省力效率高,且可以避免检测发生遗漏的问题。

Description

检测无用代码的方法、装置及计算机存储介质
技术领域
本发明涉及信息处理技术领域,特别涉及一种检测无用代码的方法、装置及计算机可读存储介质。
背景技术
当前,各种应用(Application,APP)的可执行文件中往往存在大量的无用代码,例如,无用类、无用函数等。其中,无用类是指未被使用的类,而无用函数则是指未被调用的函数,这些存在于可执行文件中的无用代码不仅会占用系统空间,而且会给代码的编译造成负担,因此,需要从这些可执行文件中查找出无用代码,从而将其去除。
相关技术中,当查找可执行文件中的无用代码时,需要技术人员人工分析可执行文件的代码,从而从中查找出无用代码,耗时长且容易发生遗漏。
发明内容
为了解决相关技术中人工查找无用代码耗时长且容易发生遗漏的问题,本发明实施例提供了一种检测无用代码的方法、装置及计算机可读存储介质。所述技术方案如下:
第一方面,提供了一种检测无用代码的方法,所述方法包括:
获取可执行文件中的多个段;
通过对所述多个段进行正则分析以确定所述可执行文件中的调用类列表和无用类列表,以及通过对所述多个段进行正则分析以确定所述可执行文件中的调用函数列表,所述调用类列表包括被调用的类和所述被调用的类包括的函数;
基于所述调用类列表和所述调用函数列表,确定所述可执行文件中的无用函数列表;
基于所述无用类列表和所述无用函数列表确定所述可执行文件中的无用代码。
可选地,所述通过对所述多个段进行正则分析以确定所述可执行文件中的调用类列表和无用类列表,包括:
对所述多个段进行第一正则分析,得到第一类列表,以及对所述多个段进行第二正则分析,得到第二类列表;
其中,所述第一类列表包括多条类记录,每条类记录包括类、所述类的父类和所述类中包括的函数,所述第二类列表包括所述可执行文件中被调用过的多个类;
基于所述第一类列表和所述第二类列表确定所述可执行文件中的所述调用类列表和所述无用类列表。
可选地,所述基于所述第一类列表和所述第二类列表确定所述可执行文件中的调用类列表和无用类列表,包括:
通过预设规则过滤所述第一类列表中包括的第三方库的类的类记录,得到第三类列表;
从所述第三类列表中提取父类被调用的类记录,并基于提取的类记录生成第四类列表;
从所述第四类列表中查找包括的类存在于所述第二类列表中的类记录;
基于从所述第四类列表中查找到的类记录生成所述调用类列表;
基于所述第三类列表中除提取的类记录之外的剩余类记录和所述第四类列表中除查找到的类记录之外的剩余类记录生成所述无用类列表。
可选地,所述通过对所述多个段进行正则分析以确定所述可执行文件中的调用函数列表,包括:
获取所述多个段中被调用的多个区域;
对所述多个区域进行第三正则分析,得到所述可执行文件中的调用函数列表。
可选地,所述基于所述调用类列表和所述调用函数列表,确定所述可执行文件中的无用函数列表,包括:
从所述调用类列表包括的函数中查找不存在于所述调用函数列表中的函数;
基于查找到的函数生成所述无用函数列表。
第二方面,提供了一种检测无用代码的装置,所述装置包括:
获取模块,用于获取可执行文件中的多个段;
分析模块,用于通过对所述多个段进行正则分析以确定所述可执行文件中的调用类列表和无用类列表,以及通过对所述多个段进行正则分析以确定所述可执行文件中的调用函数列表,所述调用类列表包括被调用的类和所述被调用的类包括的函数;
第一确定模块,用于基于所述调用类列表和所述调用函数列表,确定所述可执行文件中的无用函数列表;
第二确定模块,用于基于所述无用类列表和所述无用函数列表确定所述可执行文件中的无用代码。
可选地,所述分析模块包括:
第一分析子模块,用于对所述多个段进行第一正则分析,得到第一类列表,以及对所述多个段进行第二正则分析,得到第二类列表;
其中,所述第一类列表包括多条类记录,每条类记录包括类、所述类的父类和所述类中包括的函数,所述第二类列表包括所述可执行文件中被调用过的多个类;
确定子模块,用于基于所述第一类列表和所述第二类列表确定所述可执行文件中的所述调用类列表和所述无用类列表。
可选地,所述确定子模块具体用于:
通过预设规则过滤所述第一类列表中包括的第三方库的类的类记录,得到第三类列表;
从所述第三类列表中提取父类被调用的类记录,并基于提取的类记录生成第四类列表;
从所述第四类列表中查找包括的类存在于所述第二类列表中的类记录;
基于从所述第四类列表中查找到的类记录生成所述调用类列表;
基于所述第三类列表中除提取的类记录之外的剩余类记录和所述第四类列表中除查找到的类记录之外的剩余类记录生成所述无用类列表。
可选地,所述分析模块包括:
获取子模块,用于获取所述多个段中被调用的多个区域;
第二分析子模块,用于对所述多个区域进行第三正则分析,得到所述可执行文件中的调用函数列表。
可选地,所述第一确定模块包括:
查找子模块,用于从所述调用类列表包括的函数中查找不存在于所述调用函数列表中的函数;
生成子模块,用于基于查找到的函数生成所述无用函数列表。
第三方面,提供一种检测无用代码的装置,所述装置包括:
处理器;
用于存储处理器可执行指令的存储器;
其中,所述处理器被配置为上述第一方面所述的任一项方法的步骤。
第四方面,提供了一种计算机可读存储介质,所述计算机可读存储介质上存储有指令,所述指令被处理器执行时实现上述第一方面所述的任一项方法的步骤。
第五方面,提供了一种计算机程序产品,当其在计算机上运行时,使得计算机执行上述第一方面所述的任一项方法的步骤。
本发明实施例提供的技术方案带来的有益效果是:在本发明实施例中,获取可执行文件中的多个段;通过对多个段进行正则分析以确定可执行文件中的调用类列表和无用类列表,以及通过对多个段进行正则分析以确定可执行文件中的调用函数列表,调用类列表包括被调用的类和被调用的类包括的函数;基于调用类列表和调用函数列表,确定可执行文件中的无用函数列表;基于无用类列表和无用函数列表确定可执行文件中的无用代码。由此可见,在本发明实施例中可以通过对可执行文件中的多个段进行正则分析来确定可执行文件中的无用类列表和无用函数列表,无需人工参与,就可以自动分析出可执行文件中的无用代码,相较于相关技术中人工查找无用代码,省时省力效率高,且可以避免检测发生遗漏的问题。
附图说明
为了更清楚地说明本发明实施例中的技术方案,下面将对实施例描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
图1是本发明实施例提供的检测无用代码的方法的流程图;
图2A是本发明实施例提供的检测无用代码的装置的结构示意图;
图2B是本发明实施例提供的分析模块的结构示意图;
图2C是本发明实施例提供的分析模块的结构示意图;
图2D是本发明实施例提供的用于第一确定模块的结构示意图;
图3是本发明实施例提供的用于检测无用代码的终端的结构示意图。
具体实施方式
为使本发明的目的、技术方案和优点更加清楚,下面将结合附图对本发明实施方式作进一步地详细描述。
在对本发明实施例进行详细的解释说明之前,先对本发明实施例涉及的应用场景予以介绍。
当前,ISO系统或者是OSX系统中的应用程序包均为IPA(iPhone Application,iPhone应用)程序包,其中,IPA程序包中的可执行文件的格式均为Mach-O格式的可执行文件。随着当前项目越做越大,引入的第三方库越来越多,IPA程序包的体积变得越来越大,极大的影响用户体验。其中,由于IPA程序包中的代码量较大或者是由于该IPA程序包的维护时间较长,IPA程序包中会存在大量的无用代码,清除这些无用代码不仅可以减小IPA程序包的体积,降低对系统空间的占用,而且,可以减轻代码编译的负担。基于此,本发明实施例提供了一种检测无用代码的方法,通过该方法,终端可以自动高效的检测IPA程序包中的无用代码,相较于人工检测,耗时短且精确度高。
接下来对本发明实施例提供的检测无用代码的方法进行介绍。
图1是本发明实施例提供的一种检测无用代码的方法的流程图。该方法可以应用于终端中,该终端可以是诸如计算机、笔记本电脑、平板电脑、智能手机等终端。如图1所示,该方法包括以下步骤:
步骤101:获取可执行文件中的多个段。
通常,一个IPA程序包中可以包括至少一个可执行文件,在本发明实施例中,可以检测一个IPA程序包中所有的无用代码,也可以检测一个IPA程序包中的任一可执行文件中的无用代码。当检测IPA程序包中所有的无用代码时,终端可以获取该IPA程序包中所有的可执行文件,并获取所有的可执行文件可中的多个段。
需要说明的是,IPA程序包中的可执行文件均为Mach-O文件。其中,Mach-O文件的文件结构主要包括三个基本区域,分别为头部、加载命令和段。段是Mach-O文件直接被内核和动态链接器映射到虚拟内存中的一系列字符序列,一个Mach-O文件中可以包括多个段,正常的文件包含五段,如下所示:
__PAGEZERO:定位于虚拟地址0,无任何保护权利。此段在文件中不占用空间,访问NULL导致立即崩溃。
__TEXT:包含只读数据和可执行代码。
__DATA:包含可写数据。
__OBJC:包含Objective C语言运行时环境使用的数据。
__LINKEDIT:包含动态链接器用的原始数据。
每个段中包括0或者多个区域,每个区域由指定类型的数据组成,该指定类型的数据可以为可执行代码、常量、C字符串等。
在本发明实施例中,终端可以采用系统中的otool(object file displayingtool,针对目标文件的展示工具)来获取可执行文件中的多个段。其中,otool是ISO系统或者OSX系统提供的反编译工具,可以用于检测系统中的目标文件中使用到了哪些库、调用了其中的哪些方法、使用了哪些对象和属性。通过otool中不同的命令参数可以对可执行文件执行不同的操作。当终端获取可执行文件中的多个段时,可以采用otool-o的命令,从而输出可执行文件中的多个段。
步骤102:通过对多个段进行正则分析以确定可执行文件中的调用类列表和无用类列表,调用类列表包括被调用的类和被调用的类包括的函数。
当获取到可执行文件中的多个段后,终端可以对获取的多个段进行正则分析,从而确定可执行文件中的调用类列表和无用类列表。
其中,终端可以对获取的多个段进行第一正则分析,得到第一类列表,以及对多个段进行第二正则分析,得到第二类列表,其中,第一类列表包括多条类记录,每条类记录包括类、类的父类和类中包括的函数,第二类列表包括可执行文件中被调用过的多个类;基于第一类列表和第二类列表确定可执行文件中的调用类列表和无用类列表。
具体的,终端可以根据第一预设正则表达式,对该多个段进行第一正则分析,也即是,终端可以将该可执行文件中的多个段的代码与第一预设正则表达式进行匹配,从而从该多个段中获取到该可执行文件中包括的所有类。其中,该第一预设正则表达式是根据该可执行文件中所有类共同所具有的类的特征进行设置的。并且,在通过第一预设正则表达式对该可执行文件中的所有类进行查找的过程中,对于每一个查找到的类,终端还可以获取每个类的父类以及每个类所包含的函数。之后,终端可以基于查找到的所有的类以及所有的类中每个类对应的父类以及每个类所包含的函数生成第一类列表。其中,该第一类列表中包括该可执行文件中所有的类的记录,且每一条类记录包括类、该类的父类以及该类中包括的函数。
在终端确定第一类列表之前,或者在终端确定第一类列表之后,或者,在终端确定第一类列表的同时,终端还可以对多个段进行第二正则分析,以得到第二类列表。也就是说,终端确定第一类列表和确定第二类列表的操作可以不分先后的完成。
具体的,终端可以根据第二预设正则表达式,对可执行文件中的多个段进行第二正则分析,也即是,终端可以将该可执行文件中的多个段的代码与第二预设正则表达式进行匹配,从而从该多个段中获取到该可执行文件中被调用过的所有类。其中,第二预设正则表达式可以是根据该可执行文件中被调用过的类共同所具有的类的特征进行设置的。例如,在Mach-O文件中包含有__objc_classrefs这个段,而这个段中列举的就是被调用过的类,终端可以通过“__objc_classrefs”这个字符串进行正则匹配,从而从该多个段中找出被调用过的类,并根据找出的被调用的类生成第二类列表。
当确定第一类列表和第二类列表之后,终端可以通过预设规则过滤第一类列表中包括的第三方库的类的类记录,得到第三类列表;从第三类列表中提取父类被调用的类记录,并基于提取的类记录生成第四类列表;从第四类列表中查找包括的类存在于第二类列表中的类记录;基于从第四类列表中查找到的类记录生成调用类列表;基于第三类列表中除提取的类记录之外的剩余类记录和第四类列表中除查找到的类记录之外的剩余类记录生成无用类列表。
需要说明的是,在本发明实施例中,考虑到第三方库的类并不属于该可执行文件的开发者,对于该可执行文件的开发者而言,并不能进行修改或者是清除,因此,第三方库的类不论是否被调用,终端均不认为其为无用类。基于此,终端可以通过预设规则将第一类列表中的类记录中包括第三方库的类的类记录进行过滤,从而得到第三类列表。其中,该预设规则可以是根据预设的第三方库的标识设置的正则表达式。终端可以将该正则表达式与第一类列表中的类的标识进行匹配,以此来过滤该第一类列表中包括第三方库的类的类记录。
另外,对于任一个类A,如果该类A的父类未被调用,那么,该类A也不会被调用,基于此,终端可以从第三类列表中提取父类被调用的类记录,并基于提取的类记录生成第四类列表,而第三类列表中除提取的类记录之外剩下的类记录则均是父类未被调用的类记录。基于前述描述可知,父类未被调用,该父类对应的类也不会被调用,也就是说,第三类列表中除提取的类记录之外剩下的类记录中的类均不会被调用,均是无用类。
对于第四类列表,该第四类列表中包括的类记录均是父类被调用的类记录,但是,父类被调用并不能说明该父类对应的类也被调用,也就是说,终端并不能确定第四类列表中每条类记录包括的类是否为被调用过的类,在这种情况下,终端可以将第四类列表和包括所有被调用过的类的第二类列表进行比较。具体的,对于第四类列表中每条类记录A,终端可以将该类记录A包括的类与第二类列表中的类进行比对,以此来查找该类记录A包括的类是否存在于第二类列表中。如果存在于第二类列表中,则说明该类记录A包括的类是被调用的类,否则,则可以确定该类记录A包括的类为无用类。对于第四类列表中的每条类记录,终端均可以采用上述方法来确定每条类记录中包括的类是否为无用类,从而找出该第四类列表中包括的类为被调用的类的类记录以及包括的类为无用类的类记录。其中,第四类列表中包括的类为被调用的类的类记录组成了调用类列表,而包括的类为无用类的类记录和之前第三类列表中除提取的类记录之外剩余的类记录共同组成了无用类列表。
步骤103:通过对多个段进行正则分析以确定可执行文件中的调用函数列表。
通过步骤102,终端得到了调用类列表和无用类列表。其中,无用类列表包括了该可执行文件中所有的无用类的类记录。接下来,终端可以通过对多个段进行正则分析以确定可执行文件中的调用函数列表,从而根据该调用函数列表确定无用函数列表。
其中,终端可以获取多个段中被调用的多个区域,并对多个区域进行第三正则分析,从而得到可执行文件中的调用函数列表。
具体的,在本发明实施例中,终端可以通过otool工具中的otool-s__DATA__objc_selrefs命令,从该可执行文件的多个段中获取被调用的多个区域,之后,终端可以根据第三预设正则表达式对获取的多个区域进行第三正则分析,也即是,终端可以将该获取的多个区域的代码与第三预设正则表达式进行匹配,从而从该多个区域中获取到该可执行文件中被调用过的所有函数。其中,第三预设正则表达式可以是根据该可执行文件中被调用过的函数共同所具有的函数的特征进行设置的。例如,在Mach-O文件中包含有__objc_methname这个区域,而这个区域中列举的就是被调用过的函数,终端可以通过“__objc_methname”这个字符串进行正则匹配,从而从该多个区域中找出被调用过的函数,并根据找出的被调用的函数生成调用函数列表。
需要说明的是,在本发明实施例中,步骤103可以和步骤102同时执行,也可以在步骤102之前执行,也即是,步骤103和步骤102的执行顺序可以不分先后。在本发明实施例中,仅以先执行步骤102,后执行步骤103为例进行解释说明,但是并不构成对本发明的限定。
步骤104:基于调用类列表和调用函数列表,确定可执行文件中的无用函数列表。
其中,调用类列表中包括该可执行文件中的所有被调用的类的类记录,也即是,调用类列表中包括该可执行文件中的所有被调用的类以及被调用的类所包含的函数,而调用函数列表中则包括该可执行文件中所有被调用的函数。基于此,终端可以从调用类列表包括的函数中查找不存在于调用函数列表中的函数,并基于查找到的函数生成无用函数列表。
具体的,对于调用类列表中包括的每条类记录M,终端可以将该类记录M所包括的函数与调用函数列表中的函数进行比较,如果该类记录M包括的函数不在调用函数列表中,则说明该类记录M包括的函数未被调用,也即是,该类记录M包括的函数是无用函数。通过上述方法,终端可以查找出调用类列表中所有的无用函数,这些查找到的无用函数共同组成无用函数列表。
可选地,在类未被调用的情况下,类中所包含的的函数也不会被调用,也就是说,无用类列表中每条类记录中所包含的的函数均是未被调用的函数,即无用函数,基于此,终端可以根据前述根据调用类列表和调用函数列表查找到的无用函数以及无用类列表中所有类记录包括的无用函数生成无用函数列表。
步骤105:基于无用类列表和无用函数列表确定可执行文件中的无用代码。
当通过上述步骤生成无用类列表和无用函数列表之后,由于无用类列表中包括可执行文件中所有无用类的类记录,而无用函数列表中则包括可执行文件中所有的无用函数或者包括可执行文件中除无用类中的无用函数之外的所有函数,因此,终端可以根据该无用类列表和无用函数列表确定可执行文件中的无用代码。
具体的,当无用函数列表中包括可执行文件中除无用类中的无用函数之外的所有函数时,终端可以将无用类列表中每条类记录中的类的代码、父类的代码、类所包含的函数的代码以及无用函数列表中所有函数的代码确定为该可执行文件中所有的无用代码。
当无用函数列表中包括可执行文件中所有的无用函数时,终端可以将无用类列表中每条类记录中的类的代码、父类的代码以及无用函数列表中所有函数的代码确定为该可执行文件中所有的无用代码。
在本发明实施例中,终端可以通过otool工具获取可执行文件中的多个段;通过对多个段进行正则分析以确定可执行文件中的调用类列表和无用类列表,以及通过对多个段进行正则分析以确定可执行文件中的调用函数列表,调用类列表包括被调用的类和被调用的类包括的函数;基于调用类列表和调用函数列表,确定可执行文件中的无用函数列表;基于无用类列表和无用函数列表确定可执行文件中的无用代码。由此可见,在本发明实施例中,终端可以自动通过对可执行文件中的多个段进行正则分析来确定可执行文件中的无用类列表和无用函数列表,无需人工参与,就可以自动分析出可执行文件中的无用代码,相较于相关技术中人工查找无用代码,省时省力效率高,且可以避免检测发生遗漏的问题。
接下来对本发明实施例提供的检测无用代码的装置进行介绍。
参见图2A,本发明实施例提供了一种检测无用代码的装置200,该装置200可以集成于终端中,该终端可以是诸如计算机、笔记本电脑、平板电脑、智能手机等终端。该装置200包括:
获取模块201,用于获取可执行文件中的多个段;
分析模块202,用于通过对多个段进行正则分析以确定可执行文件中的调用类列表和无用类列表,以及通过对多个段进行正则分析以确定可执行文件中的调用函数列表,调用类列表包括被调用的类和被调用的类包括的函数;
第一确定模块203,用于基于调用类列表和调用函数列表,确定可执行文件中的无用函数列表;
第二确定模块204,用于基于无用类列表和无用函数列表确定可执行文件中的无用代码。
可选地,参见图2B,分析模块202包括:
第一分析子模块2021,用于对多个段进行第一正则分析,得到第一类列表,以及对多个段进行第二正则分析,得到第二类列表;
其中,第一类列表包括多条类记录,每条类记录包括类、类的父类和类中包括的函数,第二类列表包括可执行文件中被调用过的多个类;
确定子模块2022,用于基于第一类列表和第二类列表确定可执行文件中的调用类列表和无用类列表。
可选地,确定子模块2022具体用于:
通过预设规则过滤第一类列表中包括的第三方库的类的类记录,得到第三类列表;
从第三类列表中提取父类被调用的类记录,并基于提取的类记录生成第四类列表;
从第四类列表中查找包括的类存在于第二类列表中的类记录;
基于从第四类列表中查找到的类记录生成调用类列表;
基于第三类列表中除提取的类记录之外的剩余类记录和第四类列表中除查找到的类记录之外的剩余类记录生成无用类列表。
可选地,参见图2C,分析模块202包括:
获取子模块2023,用于获取多个段中被调用的多个区域;
第二分析子模块2024,用于对多个区域进行第三正则分析,得到可执行文件中的调用函数列表。
可选地,参见图2D,第一确定模块203包括:
查找子模块2031,用于从调用类列表包括的函数中查找不存在于调用函数列表中的函数;
生成子模块2032,用于基于查找到的函数生成无用函数列表。
综上所述,本发明实施例通过otool工具获取可执行文件中的多个段;通过对多个段进行正则分析以确定可执行文件中的调用类列表和无用类列表,以及通过对多个段进行正则分析以确定可执行文件中的调用函数列表,调用类列表包括被调用的类和被调用的类包括的函数;基于调用类列表和调用函数列表,确定可执行文件中的无用函数列表;基于无用类列表和无用函数列表确定可执行文件中的无用代码。由此可见,在本发明实施例中,终端可以自动通过对可执行文件中的多个段进行正则分析来确定可执行文件中的无用类列表和无用函数列表,无需人工参与,就可以自动分析出可执行文件中的无用代码,相较于相关技术中人工查找无用代码,省时省力效率高,且可以避免检测发生遗漏的问题。
需要说明的是:上述实施例提供的检测无用代码的装置在检测无用代码时,仅以上述各功能模块的划分进行举例说明,实际应用中,可以根据需要而将上述功能分配由不同的功能模块完成,即将设备的内部结构划分成不同的功能模块,以完成以上描述的全部或者部分功能。另外,上述实施例提供的检测无用代码的装置与检测无用代码的方法实施例属于同一构思,其具体实现过程详见方法实施例,这里不再赘述。
图3示出了本发明一个示例性实施例提供的用于检测无用代码的终端300的结构框图。上述实施例中的终端的功能可以通过图3中所示的终端来实现。该终端300可以是:智能手机、平板电脑、MP3播放器(Moving Picture Experts Group Audio Layer III,动态影像专家压缩标准音频层面3)、MP4(Moving Picture Experts Group Audio Layer IV,动态影像专家压缩标准音频层面4)播放器、笔记本电脑或台式电脑。终端300还可能被称为用户设备、便携式终端、膝上型终端、台式终端等其他名称。
通常,终端300包括有:处理器301和存储器302。
处理器301可以包括一个或多个处理核心,比如4核心处理器、8核心处理器等。处理器301可以采用DSP(Digital Signal Processing,数字信号处理)、FPGA(Field-Programmable Gate Array,现场可编程门阵列)、PLA(Programmable Logic Array,可编程逻辑阵列)中的至少一种硬件形式来实现。处理器301也可以包括主处理器和协处理器,主处理器是用于对在唤醒状态下的数据进行处理的处理器,也称CPU(Central ProcessingUnit,中央处理器);协处理器是用于对在待机状态下的数据进行处理的低功耗处理器。在一些实施例中,处理器301可以在集成有GPU(Graphics Processing Unit,图像处理器),GPU用于负责显示屏所需要显示的内容的渲染和绘制。一些实施例中,处理器301还可以包括AI(Artificial Intelligence,人工智能)处理器,该AI处理器用于处理有关机器学习的计算操作。
存储器302可以包括一个或多个计算机可读存储介质,该计算机可读存储介质可以是非暂态的。存储器302还可包括高速随机存取存储器,以及非易失性存储器,比如一个或多个磁盘存储设备、闪存存储设备。在一些实施例中,存储器302中的非暂态的计算机可读存储介质用于存储至少一个指令,该至少一个指令用于被处理器301所执行以实现本申请中方法实施例提供的音乐播放方法或音乐识别方法。
在一些实施例中,终端300还可选包括有:外围设备接口303和至少一个外围设备。处理器301、存储器302和外围设备接口303之间可以通过总线或信号线相连。各个外围设备可以通过总线、信号线或电路板与外围设备接口303相连。具体地,外围设备包括:射频电路304、触摸显示屏305、摄像头306、音频电路307、定位组件308和电源309中的至少一种。
外围设备接口303可被用于将I/O(Input/Output,输入/输出)相关的至少一个外围设备连接到处理器301和存储器302。在一些实施例中,处理器301、存储器302和外围设备接口303被集成在同一芯片或电路板上;在一些其他实施例中,处理器301、存储器302和外围设备接口303中的任意一个或两个可以在单独的芯片或电路板上实现,本实施例对此不加以限定。
射频电路304用于接收和发射RF(Radio Frequency,射频)信号,也称电磁信号。射频电路304通过电磁信号与通信网络以及其他通信设备进行通信。射频电路304将电信号转换为电磁信号进行发送,或者,将接收到的电磁信号转换为电信号。可选地,射频电路304包括:天线系统、RF收发器、一个或多个放大器、调谐器、振荡器、数字信号处理器、编解码芯片组、用户身份模块卡等等。射频电路304可以通过至少一种无线通信协议来与其它终端进行通信。该无线通信协议包括但不限于:万维网、城域网、内联网、各代移动通信网络(2G、3G、4G及5G)、无线局域网和/或WiFi(Wireless Fidelity,无线保真)网络。在一些实施例中,射频电路304还可以包括NFC(Near Field Communication,近距离无线通信)有关的电路,本申请对此不加以限定。
显示屏305用于显示UI(User Interface,用户界面)。该UI可以包括图形、文本、图标、视频及其它们的任意组合。当显示屏305是触摸显示屏时,显示屏305还具有采集在显示屏305的表面或表面上方的触摸信号的能力。该触摸信号可以作为控制信号输入至处理器301进行处理。此时,显示屏305还可以用于提供虚拟按钮和/或虚拟键盘,也称软按钮和/或软键盘。在一些实施例中,显示屏305可以为一个,设置终端300的前面板;在另一些实施例中,显示屏305可以为至少两个,分别设置在终端300的不同表面或呈折叠设计;在再一些实施例中,显示屏305可以是柔性显示屏,设置在终端300的弯曲表面上或折叠面上。甚至,显示屏305还可以设置成非矩形的不规则图形,也即异形屏。显示屏305可以采用LCD(LiquidCrystal Display,液晶显示屏)、OLED(Organic Light-Emitting Diode,有机发光二极管)等材质制备。
摄像头组件306用于采集图像或视频。可选地,摄像头组件306包括前置摄像头和后置摄像头。通常,前置摄像头设置在终端的前面板,后置摄像头设置在终端的背面。在一些实施例中,后置摄像头为至少两个,分别为主摄像头、景深摄像头、广角摄像头、长焦摄像头中的任意一种,以实现主摄像头和景深摄像头融合实现背景虚化功能、主摄像头和广角摄像头融合实现全景拍摄以及VR(Virtual Reality,虚拟现实)拍摄功能或者其它融合拍摄功能。在一些实施例中,摄像头组件306还可以包括闪光灯。闪光灯可以是单色温闪光灯,也可以是双色温闪光灯。双色温闪光灯是指暖光闪光灯和冷光闪光灯的组合,可以用于不同色温下的光线补偿。
音频电路307可以包括麦克风和扬声器。麦克风用于采集用户及环境的声波,并将声波转换为电信号输入至处理器301进行处理,或者输入至射频电路304以实现语音通信。出于立体声采集或降噪的目的,麦克风可以为多个,分别设置在终端300的不同部位。麦克风还可以是阵列麦克风或全向采集型麦克风。扬声器则用于将来自处理器301或射频电路304的电信号转换为声波。扬声器可以是传统的薄膜扬声器,也可以是压电陶瓷扬声器。当扬声器是压电陶瓷扬声器时,不仅可以将电信号转换为人类可听见的声波,也可以将电信号转换为人类听不见的声波以进行测距等用途。在一些实施例中,音频电路307还可以包括耳机插孔。
定位组件308用于定位终端300的当前地理位置,以实现导航或LBS(LocationBased Service,基于位置的服务)。定位组件308可以是基于美国的GPS(GlobalPositioning System,全球定位系统)、中国的北斗系统或俄罗斯的伽利略系统的定位组件。
电源309用于为终端300中的各个组件进行供电。电源309可以是交流电、直流电、一次性电池或可充电电池。当电源309包括可充电电池时,该可充电电池可以是有线充电电池或无线充电电池。有线充电电池是通过有线线路充电的电池,无线充电电池是通过无线线圈充电的电池。该可充电电池还可以用于支持快充技术。
在一些实施例中,终端300还包括有一个或多个传感器310。该一个或多个传感器310包括但不限于:加速度传感器311、陀螺仪传感器312、压力传感器313、指纹传感器314、光学传感器315以及接近传感器316。
加速度传感器311可以检测以终端300建立的坐标系的三个坐标轴上的加速度大小。比如,加速度传感器311可以用于检测重力加速度在三个坐标轴上的分量。处理器301可以根据加速度传感器311采集的重力加速度信号,控制触摸显示屏305以横向视图或纵向视图进行用户界面的显示。加速度传感器311还可以用于游戏或者用户的运动数据的采集。
陀螺仪传感器312可以检测终端300的机体方向及转动角度,陀螺仪传感器312可以与加速度传感器311协同采集用户对终端300的3D动作。处理器301根据陀螺仪传感器312采集的数据,可以实现如下功能:动作感应(比如根据用户的倾斜操作来改变UI)、拍摄时的图像稳定、游戏控制以及惯性导航。
压力传感器313可以设置在终端300的侧边框和/或触摸显示屏305的下层。当压力传感器313设置在终端300的侧边框时,可以检测用户对终端300的握持信号,由处理器301根据压力传感器313采集的握持信号进行左右手识别或快捷操作。当压力传感器313设置在触摸显示屏305的下层时,由处理器301根据用户对触摸显示屏305的压力操作,实现对UI界面上的可操作性控件进行控制。可操作性控件包括按钮控件、滚动条控件、图标控件、菜单控件中的至少一种。
指纹传感器314用于采集用户的指纹,由处理器301根据指纹传感器314采集到的指纹识别用户的身份,或者,由指纹传感器314根据采集到的指纹识别用户的身份。在识别出用户的身份为可信身份时,由处理器301授权该用户执行相关的敏感操作,该敏感操作包括解锁屏幕、查看加密信息、下载软件、支付及更改设置等。指纹传感器314可以被设置终端300的正面、背面或侧面。当终端300上设置有物理按键或厂商Logo时,指纹传感器314可以与物理按键或厂商Logo集成在一起。
光学传感器315用于采集环境光强度。在一个实施例中,处理器301可以根据光学传感器315采集的环境光强度,控制触摸显示屏305的显示亮度。具体地,当环境光强度较高时,调高触摸显示屏305的显示亮度;当环境光强度较低时,调低触摸显示屏305的显示亮度。在另一个实施例中,处理器301还可以根据光学传感器315采集的环境光强度,动态调整摄像头组件306的拍摄参数。
接近传感器316,也称距离传感器,通常设置在终端300的前面板。接近传感器316用于采集用户与终端300的正面之间的距离。在一个实施例中,当接近传感器316检测到用户与终端300的正面之间的距离逐渐变小时,由处理器301控制触摸显示屏305从亮屏状态切换为息屏状态;当接近传感器316检测到用户与终端300的正面之间的距离逐渐变大时,由处理器301控制触摸显示屏305从息屏状态切换为亮屏状态。
也即是,本发明实施例不仅提供了一种终端,包括处理器和用于存储处理器可执行指令的存储器,其中,处理器被配置为执行图1和图2所示的实施例中的方法,而且,本发明实施例还提供了一种计算机可读存储介质,该存储介质内存储有计算机程序,该计算机程序被处理器执行时可以实现图1和图2所示的实施例中的方法。
本领域技术人员可以理解,图3中示出的结构并不构成对终端300的限定,可以包括比图示更多或更少的组件,或者组合某些组件,或者采用不同的组件布置。
本领域普通技术人员可以理解实现上述实施例的全部或部分步骤可以通过硬件来完成,也可以通过程序来指令相关的硬件完成,所述的程序可以存储于一种计算机可读存储介质中,上述提到的存储介质可以是只读存储器,磁盘或光盘等。
以上所述仅为本发明的较佳实施例,并不用以限制本发明,凡在本发明的精神和原则之内,所作的任何修改、等同替换、改进等,均应包含在本发明的保护范围之内。

Claims (11)

1.一种检测无用代码的方法,其特征在于,所述方法包括:
获取可执行文件中的多个段;
通过对所述多个段进行正则分析以确定所述可执行文件中的调用类列表和无用类列表,以及通过对所述多个段进行正则分析以确定所述可执行文件中的调用函数列表,所述调用类列表包括被调用的类和所述被调用的类包括的函数;
基于所述调用类列表和所述调用函数列表,确定所述可执行文件中的无用函数列表;
基于所述无用类列表和所述无用函数列表确定所述可执行文件中的无用代码。
2.根据权利要求1所述的方法,其特征在于,所述通过对所述多个段进行正则分析以确定所述可执行文件中的调用类列表和无用类列表,包括:
对所述多个段进行第一正则分析,得到第一类列表,以及对所述多个段进行第二正则分析,得到第二类列表;
其中,所述第一类列表包括多条类记录,每条类记录包括类、所述类的父类和所述类中包括的函数,所述第二类列表包括所述可执行文件中被调用过的多个类;
基于所述第一类列表和所述第二类列表确定所述可执行文件中的所述调用类列表和所述无用类列表。
3.根据权利要求2所述的方法,其特征在于,所述基于所述第一类列表和所述第二类列表确定所述可执行文件中的调用类列表和无用类列表,包括:
通过预设规则过滤所述第一类列表中包括的第三方库的类的类记录,得到第三类列表;
从所述第三类列表中提取父类被调用的类记录,并基于提取的类记录生成第四类列表;
从所述第四类列表中查找包括的类存在于所述第二类列表中的类记录;
基于从所述第四类列表中查找到的类记录生成所述调用类列表;
基于所述第三类列表中除提取的类记录之外的剩余类记录和所述第四类列表中除查找到的类记录之外的剩余类记录生成所述无用类列表。
4.根据权利要求1所述的方法,其特征在于,所述通过对所述多个段进行正则分析以确定所述可执行文件中的调用函数列表,包括:
获取所述多个段中被调用的多个区域;
对所述多个区域进行第三正则分析,得到所述可执行文件中的调用函数列表。
5.根据权利要求1-4任一所述的方法,其特征在于,所述基于所述调用类列表和所述调用函数列表,确定所述可执行文件中的无用函数列表,包括:
从所述调用类列表包括的函数中查找不存在于所述调用函数列表中的函数;
基于查找到的函数生成所述无用函数列表。
6.一种检测无用代码的装置,其特征在于,所述装置包括:
获取模块,用于获取可执行文件中的多个段;
分析模块,用于通过对所述多个段进行正则分析以确定所述可执行文件中的调用类列表和无用类列表,以及通过对所述多个段进行正则分析以确定所述可执行文件中的调用函数列表,所述调用类列表包括被调用的类和所述被调用的类包括的函数;
第一确定模块,用于基于所述调用类列表和所述调用函数列表,确定所述可执行文件中的无用函数列表;
第二确定模块,用于基于所述无用类列表和所述无用函数列表确定所述可执行文件中的无用代码。
7.根据权利要求6所述的装置,其特征在于,所述分析模块包括:
第一分析子模块,用于对所述多个段进行第一正则分析,得到第一类列表,以及对所述多个段进行第二正则分析,得到第二类列表;
其中,所述第一类列表包括多条类记录,每条类记录包括类、所述类的父类和所述类中包括的函数,所述第二类列表包括所述可执行文件中被调用过的多个类;
确定子模块,用于基于所述第一类列表和所述第二类列表确定所述可执行文件中的所述调用类列表和所述无用类列表。
8.根据权利要求7所述的装置,其特征在于,所述确定子模块具体用于:
通过预设规则过滤所述第一类列表中包括的第三方库的类的类记录,得到第三类列表;
从所述第三类列表中提取父类被调用的类记录,并基于提取的类记录生成第四类列表;
从所述第四类列表中查找包括的类存在于所述第二类列表中的类记录;
基于从所述第四类列表中查找到的类记录生成所述调用类列表;
基于所述第三类列表中除提取的类记录之外的剩余类记录和所述第四类列表中除查找到的类记录之外的剩余类记录生成所述无用类列表。
9.根据权利要求6所述的装置,其特征在于,所述分析模块包括:
获取子模块,用于获取所述多个段中被调用的多个区域;
第二分析子模块,用于对所述多个区域进行第三正则分析,得到所述可执行文件中的调用函数列表。
10.根据权利要求6-9任一所述的装置,其特征在于,所述第一确定模块包括:
查找子模块,用于从所述调用类列表包括的函数中查找不存在于所述调用函数列表中的函数;
生成子模块,用于基于查找到的函数生成所述无用函数列表。
11.一种计算机可读存储介质,所述计算机可读存储介质上存储有指令,其特征在于,所述指令被处理器执行时实现权利要求1-5所述的任一项方法的步骤。
CN201711400846.4A 2017-12-22 2017-12-22 检测无用代码的方法、装置及计算机存储介质 Active CN108132790B (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN201711400846.4A CN108132790B (zh) 2017-12-22 2017-12-22 检测无用代码的方法、装置及计算机存储介质

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN201711400846.4A CN108132790B (zh) 2017-12-22 2017-12-22 检测无用代码的方法、装置及计算机存储介质

Publications (2)

Publication Number Publication Date
CN108132790A true CN108132790A (zh) 2018-06-08
CN108132790B CN108132790B (zh) 2020-11-03

Family

ID=62392177

Family Applications (1)

Application Number Title Priority Date Filing Date
CN201711400846.4A Active CN108132790B (zh) 2017-12-22 2017-12-22 检测无用代码的方法、装置及计算机存储介质

Country Status (1)

Country Link
CN (1) CN108132790B (zh)

Cited By (6)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN109710305A (zh) * 2018-11-27 2019-05-03 平安科技(深圳)有限公司 一种开发信息的获取方法、装置、存储介质及终端设备
CN110879709A (zh) * 2019-11-29 2020-03-13 五八有限公司 无用代码的检测方法、装置、终端设备及存储介质
CN111240738A (zh) * 2020-01-20 2020-06-05 北京无限光场科技有限公司 文件处理方法、装置、设备及介质
CN111580824A (zh) * 2020-03-30 2020-08-25 北京达佳互联信息技术有限公司 程序优化方法、装置及存储介质
WO2020259034A1 (zh) * 2019-06-27 2020-12-30 深圳前海微众银行股份有限公司 下线源代码的识别方法、装置、设备及存储介质
CN112596739A (zh) * 2020-12-17 2021-04-02 北京五八信息技术有限公司 一种数据的处理方法和装置

Citations (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN101571798A (zh) * 2008-04-29 2009-11-04 环达电脑(上海)有限公司 自动化测试脚本产生及使用方法
CN104461617A (zh) * 2014-11-24 2015-03-25 北京信息控制研究所 一种实时操作系统VxWorks的剪裁方法
CN106547683A (zh) * 2015-09-22 2017-03-29 阿里巴巴集团控股有限公司 一种冗余代码检测方法及装置

Patent Citations (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN101571798A (zh) * 2008-04-29 2009-11-04 环达电脑(上海)有限公司 自动化测试脚本产生及使用方法
CN104461617A (zh) * 2014-11-24 2015-03-25 北京信息控制研究所 一种实时操作系统VxWorks的剪裁方法
CN106547683A (zh) * 2015-09-22 2017-03-29 阿里巴巴集团控股有限公司 一种冗余代码检测方法及装置

Cited By (9)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN109710305A (zh) * 2018-11-27 2019-05-03 平安科技(深圳)有限公司 一种开发信息的获取方法、装置、存储介质及终端设备
WO2020259034A1 (zh) * 2019-06-27 2020-12-30 深圳前海微众银行股份有限公司 下线源代码的识别方法、装置、设备及存储介质
CN110879709A (zh) * 2019-11-29 2020-03-13 五八有限公司 无用代码的检测方法、装置、终端设备及存储介质
CN111240738A (zh) * 2020-01-20 2020-06-05 北京无限光场科技有限公司 文件处理方法、装置、设备及介质
CN111240738B (zh) * 2020-01-20 2023-11-21 北京有竹居网络技术有限公司 文件处理方法、装置、设备及介质
CN111580824A (zh) * 2020-03-30 2020-08-25 北京达佳互联信息技术有限公司 程序优化方法、装置及存储介质
CN111580824B (zh) * 2020-03-30 2024-05-07 北京达佳互联信息技术有限公司 程序优化方法、装置及存储介质
CN112596739A (zh) * 2020-12-17 2021-04-02 北京五八信息技术有限公司 一种数据的处理方法和装置
CN112596739B (zh) * 2020-12-17 2022-03-04 北京五八信息技术有限公司 一种数据的处理方法和装置

Also Published As

Publication number Publication date
CN108132790B (zh) 2020-11-03

Similar Documents

Publication Publication Date Title
CN108132790A (zh) 检测无用代码的方法、装置及计算机存储介质
US11574009B2 (en) Method, apparatus and computer device for searching audio, and storage medium
CN109976930A (zh) 异常数据的检测方法、系统及存储介质
CN109491924A (zh) 代码检测方法、装置、终端及存储介质
CN110471858A (zh) 应用程序测试方法、装置及存储介质
CN109862412A (zh) 合拍视频的方法、装置及存储介质
CN109117635A (zh) 应用程序的病毒检测方法、装置、计算机设备及存储介质
CN109192218A (zh) 音频处理的方法和装置
CN110059686A (zh) 字符识别方法、装置、设备及可读存储介质
CN108320756A (zh) 一种检测音频是否是纯音乐音频的方法和装置
CN110288689A (zh) 对电子地图进行渲染的方法和装置
CN110189771A (zh) 同源音频的音质检测方法、装置及存储介质
CN109992685A (zh) 一种检索图片的方法及装置
CN109218751A (zh) 推荐音频的方法、装置及系统
CN109102811A (zh) 音频指纹的生成方法、装置及存储介质
CN109254775A (zh) 基于人脸的图像处理方法、终端及存储介质
CN108806670A (zh) 语音识别方法、装置及存储介质
CN108509620A (zh) 歌曲识别方法及装置、存储介质
CN107943484A (zh) 执行业务功能的方法和装置
CN109547847A (zh) 添加视频信息的方法、装置及计算机可读存储介质
CN110109770A (zh) 调试方法、装置、电子设备及介质
CN109308265A (zh) 生成反向测试用例的方法和装置
CN109783176A (zh) 切换页面的方法和装置
CN108495183A (zh) 显示专辑信息的方法和装置
CN107944024A (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