CN106598828B - 一种源代码中的无效类确定方法及装置 - Google Patents

一种源代码中的无效类确定方法及装置 Download PDF

Info

Publication number
CN106598828B
CN106598828B CN201510660690.8A CN201510660690A CN106598828B CN 106598828 B CN106598828 B CN 106598828B CN 201510660690 A CN201510660690 A CN 201510660690A CN 106598828 B CN106598828 B CN 106598828B
Authority
CN
China
Prior art keywords
class
source code
parameter
file
executable file
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.)
Expired - Fee Related
Application number
CN201510660690.8A
Other languages
English (en)
Other versions
CN106598828A (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.)
Alibaba Group Holding Ltd
Original Assignee
Alibaba Group Holding 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 Alibaba Group Holding Ltd filed Critical Alibaba Group Holding Ltd
Priority to CN201510660690.8A priority Critical patent/CN106598828B/zh
Publication of CN106598828A publication Critical patent/CN106598828A/zh
Application granted granted Critical
Publication of CN106598828B publication Critical patent/CN106598828B/zh
Expired - Fee Related legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Landscapes

  • Stored Programmes (AREA)

Abstract

本申请公开了一种源代码中的无效类确定方法及装置,该方法包括:利用链接器中的第一参数将目标文件与库文件链接生成第一可执行文件,其中,第一可执行文件中包含目标文件对应的源代码中全部的类;利用链接器中的第二参数将目标文件与库文件链接生成第二可执行文件,其中,第二可执行文件中不包含源代码中的无效类;分别提取第一可执行文件中包含的类,以及第二可执行文件中包含的类;根据第一可执行文件中包含的类和第二可执行文件中包含的类,确定源代码中的无效类。通过上述方法,对于iOS源代码,虽然未在编译阶段检测数据类型,但是可以在编译阶段和链接阶段之后,根据上述两种可执行文件,确定iOS源代码中的无效类,而且确定难度较低。

Description

一种源代码中的无效类确定方法及装置
技术领域
本申请涉及计算机技术领域,尤其涉及一种源代码中的无效类确定方法及装置。
背景技术
目前,随着智能终端的普及,智能终端上的各种应用(Application,APP)也得到了广泛的应用。
对于一款APP,随着版本迭代、功能变更、业务增加,该APP的源代码不断地增加、修改以及删除,特别是多人开发、长期开发的大型项目,APP的源代码中非常容易出现无效类,所述无效类指在对该源代码进行编译、链接,以及运行过程中,均未引用的类,所述无效类是源代码中的冗余部分,会导致APP安装包不必要地增大,因此,为了解决这个问题,可以在源代码中查找确定这些无效类,并将其从源代码中清除。
在现有技术中,对于采用C或C++等语言编写的源代码,可以在对源代码的编译阶段通过检测数据类型,确定源代码中的类,进而查找确定无效类。
但是对于采用Objective-C语言编写的iOS源代码,由于Objective-C语言是动态类型语言,运行时才检测数据类型,而编译时并不检测,因此,难以确定iOS源代码中的无效类。
发明内容
本申请实施例提供一种源代码中的无效类确定方法及装置,用以解决现有技术中难以确定iOS源代码中的无效类的问题。
本申请实施例提供的一种源代码中的无效类确定方法,包括:
利用链接器中的第一参数将目标文件与库文件链接生成第一可执行文件,其中,所述第一可执行文件中包含所述目标文件对应的源代码中全部的类;
利用所述链接器中的第二参数将所述目标文件与所述库文件链接生成第二可执行文件,其中,所述第二可执行文件中不包含所述源代码中的无效类;
分别提取所述第一可执行文件中包含的类,以及所述第二可执行文件中包含的类;
根据所述第一可执行文件中包含的类和所述第二可执行文件中包含的类,确定所述源代码中的无效类。
本申请实施例提供的一种源代码中的无效类确定装置,包括:
第一生成模块,用于利用链接器中的第一参数将目标文件与库文件链接生成第一可执行文件,其中,所述第一可执行文件中包含所述目标文件对应的源代码中全部的类;
第二生成模块,用于利用所述链接器中的第二参数将所述目标文件与所述库文件链接生成第二可执行文件,其中,所述第二可执行文件中不包含所述源代码中的无效类;
提取模块,用于分别提取所述第一可执行文件中包含的类,以及所述第二可执行文件包含的类;
确定模块,用于根据所述第一可执行文件中包含的类和所述第二可执行文件包含的类,确定所述源代码中的无效类。
本申请实施例通过上述至少一种技术方案,对于iOS源代码,虽然未在编译阶段检测数据类型,但是可以在编译阶段和链接阶段之后,根据上述两种可执行文件,确定iOS源代码中的无效类,而且确定难度较低。因此,可以解决现有技术中难以确定iOS源代码中的无效类的问题。
附图说明
此处所说明的附图用来提供对本申请的进一步理解,构成本申请的一部分,本申请的示意性实施例及其说明用于解释本申请,并不构成对本申请的不当限定。在附图中:
图1为本申请实施例提供的源代码中的无效类确定方法的过程;
图2为在实际应用中,本申请提供的源代码中的无效类确定方法的一种详细实施过程;
图3为本申请实施例提供的源代码中的无效类确定装置结构示意图。
具体实施方式
为使本申请的目的、技术方案和优点更加清楚,下面将结合本申请具体实施例及相应的附图对本申请技术方案进行清楚、完整地描述。显然,所描述的实施例仅是本申请一部分实施例,而不是全部的实施例。基于本申请中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本申请保护的范围。
为了便于理解,首先对在本申请实施例中要提及的部分概念进行说明。
Objective-C语言,是用于开发iOS应用的一种编程语言;iOS,是美国苹果公司开发的一种移动终端操作系统;iOS源代码,是采用Objective-C语言编写的代码;类别(Category),是Objective-C的一项功能,可以用于对类进行扩展,而无需对类进行子类化,扩展出的部分可以称为一个Category。
ld链接器,是GNU二进制工具集(binutils)中的一个工具,其基本功能是将目标文件与对应的库文件链接起来,并重定向他们的数据,完成符号解析,进而生成可执行文件;ldx链接器,是在ld链接器的基础上进行优化后开发出的一款链接器,已在github上开源,可以在网址“https://github.com/Yonsm/LDX”处获得,ldx链接器相比于ld链接器,可以过滤Category的类混淆干扰;Xcode,美国苹果公司开发的一种编辑器,常用与编辑iOS源代码。
基于以上说明,下面对本申请实施例提供的方法进行说明。
图1为本申请实施例提供的源代码中的无效类确定方法的过程,具体包括以下步骤:
S101:利用链接器中的第一参数将目标文件与库文件链接生成第一可执行文件,其中,所述第一可执行文件中包含所述目标文件对应的源代码中全部的类。
S102:利用所述链接器中的第二参数将所述目标文件与所述库文件链接生成第二可执行文件,其中,所述第二可执行文件中不包含所述源代码中的无效类。
本申请实施例提供的源代码中的无效类确定方法的执行主体可以是终端或服务器,所述终端包括但不限于:手机、个人计算机、平板电脑等;所述服务器包括但不限于:大中型计算机、计算机集群等。所述的执行主体并不构成对本申请的限定。
在本申请实施例中,所述源代码可以是在编译阶段不会被检测数据类型的源代码,包括但不限于iOS源代码。为了便于描述,本申请实施例以所述源代码是iOS源代码为例进行说明。
所述链接器可以是ld链接器,或在ld链接器的基础上进行优化后开发出链接器(如ldx链接器等),或其他与ld链接器功能相似的链接器,等等。目前,在iOS开发工作中,一般使用Xcode等编辑器编辑iOS源代码,使用ld链接器生成可执行文件。
在本申请实施例中,当利用的链接器的参数不同时,该链接器向目标文件链接的类所需满足的条件也可以不同,所述条件包括但不限于:是否是所述源代码中包含的类、是否在所述源代码中被显式引用的类、是否在所述源代码中被隐式引用的类,等等。在这种情况下,对于步骤S101,所述第一参数可以包括用于指示所述链接器链接所述源代码中全部的类的参数;对于步骤S102,所述第二参数可以包括用于过滤白名单的参数,且不包括用于指示所述链接器链接所述源代码中全部的类的参数;所述白名单中至少包含所述源代码中以隐式方式引用的类。
需要说明的是,本申请对S101和S102这两个步骤的执行顺序并不做限定,可以一前一后依次执行,也可以同时执行。
S103:分别提取所述第一可执行文件中包含的类,以及所述第二可执行文件中包含的类。
在本申请实施例中,提取某个类既可以指提取该类的全部相关信息,也可以指提取可以用于确定该类、该类的一部分相关信息。所述相关信息可以是诸如类名称、类中的变量名称、类中的方法名称、实现类中的方法的代码段等相关信息种类中的至少一种。
进一步的,提取的第一可执行文件包含的类的相关信息,与提取第二可执行文件包含的类的相关信息所属的相关信息类型可以相同,以便于提高后续步骤的执行效率。例如,对于步骤S102,可以提取第一可执行文件包含的类名称,以及提取第二可执行文件包含的类名称;或者,可以提取第一可执行文件包含的类的全部的变量名称,以及提取第二可执行文件包含的类的全部的变量名称;等等。
S104:根据所述第一可执行文件中包含的类和所述第二可执行文件中包含的类,确定所述源代码中的无效类。
在本申请实施例中,根据对所述第一参数和所述第二参数的说明可知,所述第一可执行文件中可以包含所述源代码中全部的类,所述第二可执行文件中可以包含所述源代码中被引用的类(所述被引用的类可以包括:以显式方式引用的类和以显式方式引用的类)。
通过上述方法,对于iOS源代码,虽然未在编译阶段检测数据类型,但是可以在编译阶段和链接阶段之后,根据上述两种可执行文件,确定iOS源代码中的无效类,而且确定难度较低,从而可以解决现有技术中难以确定iOS源代码中的无效类的问题。进一步的,确定出无效类后,进而将无效类从iOS源代码中清除,然后再对清除掉无效类后的iOS源代码进行编译和链接,生成可执行文件(可以是APP),此时生成的APP相比于现有技术中在未清除iOS源代码中的无效类的情况生成的APP的数据量小,因此,可以减少APP中包含的冗余数据,减轻终端和服务器使用该APP时的负担。
下面对所述无效类确定方法进一步地详细说明。
在本申请实施例中,以上只提及了与本申请提供的方法相关的两个关键参数(所述第一参数和所述第二参数),除了这两个关键的参数,链接器还可以使用其他参数,在这种情况下,链接器在生成第一可执行文件时使用的其他参数,与在生成第二可执行文件时使用的其他参数均可以是相同的,从而可以使得链接后生成的可执行文件中包含的类取决于第一参数和/或第二参数。
在本申请实施例中,所述第二参数包括用于过滤白名单的参数,且不包括用于指示所述链接器链接所述源代码中全部的类的参数;所述白名单中至少包含所述源代码中以隐式方式引用的类。对于步骤S102,利用所述链接器中的第二参数将所述目标文件与所述库文件链接生成第二可执行文件,具体可以包括:在所述第二参数包括所述用于过滤白名单的参数时,利用所述链接器中的第二参数将所述目标文件与所述库文件链接生成包含所述源代码中以隐式方式引用的类的第二可执行文件;在所述第二参数不包括用于指示所述链接器链接所述源代码中全部的类的参数时,利用所述链接器中的第二参数将所述目标文件与所述库文件链接生成包含所述源代码中以显式方式引用的类的第二可执行文件。
为了便于理解,下面举例进一步地对上述方法进行说明。
例如,当所述链接器是ld链接器或ldx链接器时,所述第一参数具体可以是-ObjC参数,所述第二参数具体可以是-export_symbols_list参数。
在链接器使用了-ObjC参数的情况下,-ObjC参数可以指示链接器在链接目标文件与对应的库文件时,加载源代码中全部的类(所述全部的类包括:在源代码中定义以及实现的类、在源代码中定义在库文件中实现的类等),以及Category,进而可以生成包含源代码中全部的类的第一可执行文件;而不使用-ObjC参数时,则链接器只加载后续执行生成的可执行文件时需要引用的类,进而可以生成不包含无效类的第二可执行文件。需要说明的是,在实际应用中,当采用除了ld链接器或ldx链接器以外的其他链接器时,相应地可能会采用其他参数指示链接器加载源代码中全部的类,而所述其他参数的名称不一定为“-ObjC”,在这种情况下,在实施本申请提供的方法时,可以将-ObjC参数替换为所述其他参数。
进一步的,Objective-C语言具有类名字符串实例化、反式映射实例化这两个特征,而这两个特征使得可以在iOS源代码中以隐式方式引用类(以隐式方式引用的类可以包括类名字符串实例化的类,反式映射实例化的类)。
在这种情况下,步骤S102中,假定不使用所述第二参数,则可能会出现以下问题:以隐式方式引用的类虽然被加载进了第一可执行文件中,但是未被加载进第二可执行文件中,进而导致在后续步骤中,以隐式方式引用的类被误判为无效类。因此,在本申请实施例中,可以利用所述第二参数,采用对以隐式引用的类进行白名单过滤的方式,解决上述问题。
继续沿用上例进行说明。对于步骤S102中使用的-export_symbols_list参数所过滤的白名单,当所述链接器是ld链接器时,过滤的白名单中可以包含所述源代码中的反式映射实例化的类、类名称字符串实例化的类、Category;当所述链接器是ldx链接器时,过滤的白名单中可以包含所述源代码中的反式映射实例化的类、类名称字符串实例化的类。
在此,对于白名单中是否需要包含Category进行说明。虽然Category并不是类,但是目前有些iOS相关的工具(如ld链接器)会把Category误判为类,因此,本申请实施例提供的方法也考虑到了Category的影响,从而可以提高所述方法。
具体的,当ld链接器不使用所述用于过滤白名单的参数,但使用-ObjC参数时生成的可执行文件中可以包含所述源代码中的Category,当ld链接器不使用-ObjC参数时生成的可执行文件中不会包含所述Category,从而导致所述Category被误判为无效类,因此,为了解决这个问题,对于步骤S101,若使用ld链接器且使用所述用于过滤白名单的参数,则所述Category可以包含在所述白名单中,进而,生成的第二可执行文件中可以包含所述Category。而对于ldx链接器,在本申请实施例中提及了:ldx链接器相比于ld链接器,可以过滤所述Category的类混淆干扰。则当采用ldx链接器时,无论是否使用-ObjC参数,生成的可执行文件中均可以包含所述Category,因此,对于步骤S101,若使用ldx链接器且使用所述用于过滤白名单的参数,则所述Category可以不包含在所述白名单中。
需要说明的是,本申请实施例对获得所述白名单的方法并不做限定。一般的,可以通过人工检测方法或机器检测方法,在源代码中查找确定反式映射实例化的类、类名称字符串实例化的类、Category,进而将确定出的数据添加进预定格式的文件中,将添加后的文件作为所述白名单。
当然,在实际应用中,在生成第一可执行文件时也可以使用所述用于过滤白名单的参数。
在本申请实施例中,对于步骤S103,由于在一份源代码中类名称可以唯一标识一个类,而且类名称相比于其他的类信息,数据量较小,因此,为了提高步骤S103的执行速度,对于步骤S103,分别提取所述第一可执行文件中包含的类,以及所述第二可执行文件中包含的类,具体可以包括:分别提取所述第一可执行文件中包含的类的类名称,以及提取所述第二可执行文件中包含的类的类名称。
在实际应用中,可以采用预定工具实现步骤S103,本申请对所述预订工具并不做限定,所述预定工具可以是Otool等工具。其中,所述Otool是Mac OSX下的一个分析工具,可以用于并显示iOS下的目标文件和可执行文件的相关信息,所述目标文件和可执行文件的相关信息包括但不限于:类信息、头文件、加载命令、段信息、共享库、动态库,等等。
进一步的,对于步骤S104,根据所述第一可执行文件中包含的类和所述第二可执行文件中包含的类,确定所述源代码中的无效类,具体可以包括:通过对所述第一可执行文件中包含的类名称,与所述第二可执行文件中包含的类名称进行比较,查找出所述第一可执行文件中包含、且所述第二可执行文件中不包含的类名称,将查找出的类名称对应的类确定为所述源代码中的无效类。所述比较可以通过用于对文本进行比较的命令行、工具等实现,如comm命令行、Notepad++工具、UltraCompare工具,等等。
以上对本申请实施例提供的源代码中的无效类确定方法的过程进行了说明。为了便于理解,下面举例对所述方法的详细过程进行说明。对举例的场景假定如下:所述源代码为iOS源代码,使用的链接器为ldx链接器,提取类信息使用Otool工具,提取的类具体为该类的类名称;第一可执行文件命名为“PortalObjC”,第二可执行文件命名为“PortalLite”;提取出的第一可执行文件包含的类名称保存在名为“PortalObjC.txt”的文件中,提取出的第二可执行文件包含的类名称保存在名为“PortalLite.txt”的文件中,确定出的无效类保存在名为“PortalNoRef.txt”的文件中。
基于以上场景假定,图2示出了在实际应用中,本申请提供的源代码中的无效类确定方法的一种详细实施过程。具体可以包括以下步骤:
S201:通过对源代码进行编译生成目标文件。
S202a:采用使用-Objc参数的ldx链接器,将该目标文件与对应的库文件进行链接,生成可执行文件PortalObjC;其中,所述白名单中包含该源代码中的反式映射实例化的类、类名称字符串实例化的类。
需要说明的是,在实际应用中,ldx链接器同时也可以使用用于过滤白名单的参数,本申请对步骤S202a中是否使用过滤白名单的参数并不做限定。以下以ldx链接器使用了用于过滤白名单的参数的场景为例进行说明,假定白名单为“exported_symbols”的文件,为了便于后续提取,白名单中保存的每个类名称可以加上前缀“_OBJC_CLASS_$_”。在这种情况下,可以通过运行以下命令(称为命令1),执行步骤S202a:
“./ldx–ObjC–o./PortalObjC-export_symbols_list exported_symbolsxxxxxxxxx”。
可以看到,命令1中使用了–ObjC参数和-export_symbols_list参数。
S202b:采用不使用-Objc参数、且使用用于过滤白名单的参数的ldx链接器,将该目标文件与对应的库文件进行链接,生成可执行文件PortalLite;其中,所述白名单中包含该源代码中的反式映射实例化的类、类名称字符串实例化的类。
与步骤S202a类似,可以通过运行以下命令(称为命令2),执行步骤S202a:
“./ldx–o./PortalLite-export_symbols_list exported_symbols xxxxxxxxx”。
可以看到,命令1使用了-export_symbols_list参数,但是未使用–ObjC参数。
在上述命令1和命令2中,“xxxxxxxxx”表示目标文件、对应的库文件及其它参数,且上述命令1和命令2中的“xxxxxxxxx”内容相同。
S203a:采用Otool工具,提取PortalObjC包含的类名称,并保存在文件PortalObjC.txt中。
可以通过运行以下命令(称为命令3),执行步骤S203a:
“otool–o–V./PortalObjC|grep“_OBJC_CLASS”|cut–d“”–f3|sort|uniq>./PortalObjC.text”。
S203b:采用Otool工具,提取PortalLite包含的类名称,并保存在文件PortalLite.txt中。
可以通过运行以下命令(称为命令4),执行步骤S203b:
“otool–o–V./PortalLite|grep“_OBJC_CLASS”|cut–d“”–f3|sort|uniq>./PortalLite.text”。
在上述命令3和命令4中,是采用了Otool工具提供的otool命令,分别提取了PortalObjC、PortalLite中包含的类信息,同时采用grep命令进行关键字“_OBJC_CLASS”过滤,进一步地提取出类名称并保存。
S204:采用comm命令对PortalObjC.txt和PortalLite.txt进行比较,查找出PortalObjC.txt中包含、且PortalLite.txt中不包含的类名称。
S205:将查找出的类名称输出保存在PortalNoRef.txt中,并将查找出的类名称对应的类确定为该源代码中的无效类。
可以通过运行以下命令(称为命令5),执行步骤S204和S205:
“comm-23./PortalObjC.txt./PortalLite.txt>./PortalNoRef.txt”。
需要说明的是,本申请对步骤S202a和S202b的执行顺序、步骤S203a和S203b的执行顺序并不做限定。
类似的,也可以用ld链接器代替ldx链接器实现上例,在这种情况下,可以将源代码中包含的Category加入所述白名单中。
以上为本申请实施例提供的源代码中的无效类确定方法,基于同样的思路,本申请实施例还提供相应的源代码中的无效类确定装置,如图3所示。
图3为本申请实施例提供的源代码中的无效类确定装置结构示意图,具体包括:
第一生成模块301,用于利用链接器中的第一参数将目标文件与库文件链接生成第一可执行文件,其中,所述第一可执行文件中包含所述目标文件对应的源代码中全部的类;
第二生成模块302,用于利用所述链接器中的第二参数将所述目标文件与所述库文件链接生成第二可执行文件,其中,所述第二可执行文件中不包含所述源代码中的无效类;
提取模块303,用于分别提取所述第一可执行文件中包含的类,以及所述第二可执行文件包含的类;
确定模块304,用于根据所述第一可执行文件中包含的类和所述第二可执行文件包含的类,确定所述源代码中的无效类。
所述第一参数包括用于指示所述链接器链接所述源代码中全部的类的参数。
所述第二参数包括用于过滤白名单的参数,且不包括用于指示所述链接器链接所述源代码中全部的类的参数;所述白名单中至少包含所述源代码中以隐式方式引用的类;
所述第二生成模块302具体用于:在所述第二参数包括所述用于过滤白名单的参数时,利用所述链接器中的所述第二参数将所述目标文件与所述库文件链接生成包含所述源代码中以隐式方式引用的类的第二可执行文件;在所述第二参数不包括用于指示所述链接器链接所述源代码中全部的类的参数时,利用所述链接器中的所述第二参数将所述目标文件与所述库文件链接生成包含所述源代码中以显式方式引用的类的第二可执行文件。
所述提取模块303具体用于:分别提取所述第一可执行文件中包含的类的类名称,以及提取所述第二可执行文件中包含的类的类名称。
所述确定模块304具体用于:通过对所述第一可执行文件中包含的类名称,与所述第二可执行文件中包含的类名称进行比较,查找出所述第一可执行文件中包含、且所述第二可执行文件中不包含的类名称,将查找出的类名称对应的类确定为所述源代码中的无效类。
具体的上述如图3所示的装置可以位于终端、服务器上。
本申请实施例提供一种源代码中的无效类确定方法及装置,该方法包括:利用链接器中的第一参数将目标文件与库文件链接生成第一可执行文件,其中,所述第一可执行文件中包含所述目标文件对应的源代码中全部的类;利用所述链接器中的第二参数将所述目标文件与所述库文件链接生成第二可执行文件,其中,所述第二可执行文件中不包含所述源代码中的无效类;分别提取所述第一可执行文件中包含的类,以及所述第二可执行文件中包含的类。通过上述方法,对于iOS源代码,虽然未在编译阶段检测数据类型,但是可以在编译阶段和链接阶段之后,根据上述两种可执行文件,确定iOS源代码中的无效类,而且确定难度较低。
本领域内的技术人员应明白,本发明的实施例可提供为方法、系统、或计算机程序产品。因此,本发明可采用完全硬件实施例、完全软件实施例、或结合软件和硬件方面的实施例的形式。而且,本发明可采用在一个或多个其中包含有计算机可用程序代码的计算机可用存储介质(包括但不限于磁盘存储器、CD-ROM、光学存储器等)上实施的计算机程序产品的形式。
本发明是参照根据本发明实施例的方法、设备(系统)、和计算机程序产品的流程图和/或方框图来描述的。应理解可由计算机程序指令实现流程图和/或方框图中的每一流程和/或方框、以及流程图和/或方框图中的流程和/或方框的结合。可提供这些计算机程序指令到通用计算机、专用计算机、嵌入式处理机或其他可编程数据处理设备的处理器以产生一个机器,使得通过计算机或其他可编程数据处理设备的处理器执行的指令产生用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的装置。
这些计算机程序指令也可存储在能引导计算机或其他可编程数据处理设备以特定方式工作的计算机可读存储器中,使得存储在该计算机可读存储器中的指令产生包括指令装置的制造品,该指令装置实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能。
这些计算机程序指令也可装载到计算机或其他可编程数据处理设备上,使得在计算机或其他可编程设备上执行一系列操作步骤以产生计算机实现的处理,从而在计算机或其他可编程设备上执行的指令提供用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的步骤。
在一个典型的配置中,计算设备包括一个或多个处理器(CPU)、输入/输出接口、网络接口和内存。
内存可能包括计算机可读介质中的非永久性存储器,随机存取存储器(RAM)和/或非易失性内存等形式,如只读存储器(ROM)或闪存(flash RAM)。内存是计算机可读介质的示例。
计算机可读介质包括永久性和非永久性、可移动和非可移动媒体可以由任何方法或技术来实现信息存储。信息可以是计算机可读指令、数据结构、程序的模块或其他数据。计算机的存储介质的例子包括,但不限于相变内存(PRAM)、静态随机存取存储器(SRAM)、动态随机存取存储器(DRAM)、其他类型的随机存取存储器(RAM)、只读存储器(ROM)、电可擦除可编程只读存储器(EEPROM)、快闪记忆体或其他内存技术、只读光盘只读存储器(CD-ROM)、数字多功能光盘(DVD)或其他光学存储、磁盒式磁带,磁带磁磁盘存储或其他磁性存储设备或任何其他非传输介质,可用于存储可以被计算设备访问的信息。按照本文中的界定,计算机可读介质不包括暂存电脑可读媒体(transitory media),如调制的数据信号和载波。
还需要说明的是,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、商品或者设备不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、商品或者设备所固有的要素。在没有更多限制的情况下,由语句“包括一个……”限定的要素,并不排除在包括所述要素的过程、方法、商品或者设备中还存在另外的相同要素。
本领域技术人员应明白,本申请的实施例可提供为方法、系统或计算机程序产品。因此,本申请可采用完全硬件实施例、完全软件实施例或结合软件和硬件方面的实施例的形式。而且,本申请可采用在一个或多个其中包含有计算机可用程序代码的计算机可用存储介质(包括但不限于磁盘存储器、CD-ROM、光学存储器等)上实施的计算机程序产品的形式。
以上所述仅为本申请的实施例而已,并不用于限制本申请。对于本领域技术人员来说,本申请可以有各种更改和变化。凡在本申请的精神和原理之内所作的任何修改、等同替换、改进等,均应包含在本申请的权利要求范围之内。

Claims (8)

1.一种源代码中的无效类确定方法,其特征在于,包括:
利用链接器中的第一参数将目标文件与库文件链接生成第一可执行文件,其中,所述第一可执行文件中包含所述目标文件对应的源代码中全部的类,所述第一参数包括用于指示所述链接器链接所述源代码中全部的类的参数;
利用所述链接器中的第二参数将所述目标文件与所述库文件链接生成第二可执行文件,其中,所述第二可执行文件中不包含所述源代码中的无效类,所述第二参数包括用于指示所述链接器链接所述源代码中被引用的类的参数;
分别提取所述第一可执行文件中包含的类,以及所述第二可执行文件中包含的类;
根据所述第一可执行文件中包含的类和所述第二可执行文件中包含的类,确定所述源代码中的无效类。
2.如权利要求1所述的方法,其特征在于,所述第二参数包括用于过滤白名单的参数,且不包括用于指示所述链接器链接所述源代码中全部的类的参数;所述白名单中至少包含所述源代码中以隐式方式引用的类;
利用所述链接器中的第二参数将所述目标文件与所述库文件链接生成第二可执行文件,具体包括:
在所述第二参数包括所述用于过滤白名单的参数时,利用所述链接器中的第二参数将所述目标文件与所述库文件链接生成包含所述源代码中以隐式方式引用的类的第二可执行文件;
在所述第二参数不包括用于指示所述链接器链接所述源代码中全部的类的参数时,利用所述链接器中的第二参数将所述目标文件与所述库文件链接生成包含所述源代码中以显式方式引用的类的第二可执行文件。
3.如权利要求1所述的方法,其特征在于,分别提取所述第一可执行文件中包含的类,以及所述第二可执行文件中包含的类,具体包括:
分别提取所述第一可执行文件中包含的类的类名称,以及提取所述第二可执行文件中包含的类的类名称。
4.如权利要求3所述的方法,其特征在于,根据所述第一可执行文件中包含的类和所述第二可执行文件中包含的类,确定所述源代码中的无效类,具体包括:
通过对所述第一可执行文件中包含的类名称,与所述第二可执行文件中包含的类名称进行比较,查找出所述第一可执行文件中包含、且所述第二可执行文件中不包含的类名称,将查找出的类名称对应的类确定为所述源代码中的无效类。
5.一种源代码中的无效类确定装置,其特征在于,包括:
第一生成模块,用于利用链接器中的第一参数将目标文件与库文件链接生成第一可执行文件,其中,所述第一可执行文件中包含所述目标文件对应的源代码中全部的类,所述第一参数包括用于指示所述链接器链接所述源代码中全部的类的参数;
第二生成模块,用于利用所述链接器中的第二参数将所述目标文件与所述库文件链接生成第二可执行文件,其中,所述第二可执行文件中不包含所述源代码中的无效类,所述第二参数包括用于指示所述链接器链接所述源代码中被引用的类的参数;
提取模块,用于分别提取所述第一可执行文件中包含的类,以及所述第二可执行文件包含的类;
确定模块,用于根据所述第一可执行文件中包含的类和所述第二可执行文件包含的类,确定所述源代码中的无效类。
6.如权利要求5所述的装置,其特征在于,所述第二参数包括用于过滤白名单的参数,且不包括用于指示所述链接器链接所述源代码中全部的类的参数;所述白名单中至少包含所述源代码中以隐式方式引用的类;
所述第二生成模块具体用于:在所述第二参数包括所述用于过滤白名单的参数时,利用所述链接器中的所述第二参数将所述目标文件与所述库文件链接生成包含所述源代码中以隐式方式引用的类的第二可执行文件;在所述第二参数不包括用于指示所述链接器链接所述源代码中全部的类的参数时,利用所述链接器中的所述第二参数将所述目标文件与所述库文件链接生成包含所述源代码中以显式方式引用的类的第二可执行文件。
7.如权利要求5所述的装置,其特征在于,所述提取模块具体用于:分别提取所述第一可执行文件中包含的类的类名称,以及提取所述第二可执行文件中包含的类的类名称。
8.如权利要求7所述的装置,其特征在于,所述确定模块具体用于:通过对所述第一可执行文件中包含的类名称,与所述第二可执行文件中包含的类名称进行比较,查找出所述第一可执行文件中包含、且所述第二可执行文件中不包含的类名称,将查找出的类名称对应的类确定为所述源代码中的无效类。
CN201510660690.8A 2015-10-14 2015-10-14 一种源代码中的无效类确定方法及装置 Expired - Fee Related CN106598828B (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN201510660690.8A CN106598828B (zh) 2015-10-14 2015-10-14 一种源代码中的无效类确定方法及装置

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN201510660690.8A CN106598828B (zh) 2015-10-14 2015-10-14 一种源代码中的无效类确定方法及装置

Publications (2)

Publication Number Publication Date
CN106598828A CN106598828A (zh) 2017-04-26
CN106598828B true CN106598828B (zh) 2018-11-30

Family

ID=58552069

Family Applications (1)

Application Number Title Priority Date Filing Date
CN201510660690.8A Expired - Fee Related CN106598828B (zh) 2015-10-14 2015-10-14 一种源代码中的无效类确定方法及装置

Country Status (1)

Country Link
CN (1) CN106598828B (zh)

Families Citing this family (6)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN107766048B (zh) * 2017-10-23 2020-09-15 浪潮通用软件有限公司 一种页面编译方法及装置
CN108897569A (zh) * 2018-05-30 2018-11-27 福建天晴在线互动科技有限公司 iOS工程无用文件的清理方法及计算机可读存储介质
CN109460234B (zh) * 2018-09-04 2023-04-11 中国平安人寿保险股份有限公司 应用程序瘦身方法、装置、终端及存储介质
CN110399132B (zh) * 2019-06-18 2023-12-22 平安科技(深圳)有限公司 项目代码的维护方法、装置、计算机设备和存储介质
CN111580824B (zh) * 2020-03-30 2024-05-07 北京达佳互联信息技术有限公司 程序优化方法、装置及存储介质
CN111881059B (zh) * 2020-08-10 2023-10-27 网易(杭州)网络有限公司 代码文件的检测方法、装置和电子设备

Family Cites Families (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US8806427B2 (en) * 2012-05-11 2014-08-12 Bank Of America Corporation Service plug-in and service base for an integrated service framework
CN103093155B (zh) * 2012-12-07 2016-04-27 中北大学 基于源码修改的信息隐藏方法
CN104881274B (zh) * 2014-02-28 2018-02-13 上海斐讯数据通信技术有限公司 识别无用代码的方法

Also Published As

Publication number Publication date
CN106598828A (zh) 2017-04-26

Similar Documents

Publication Publication Date Title
CN106598828B (zh) 一种源代码中的无效类确定方法及装置
CN108154211B (zh) 二维码生成、业务处理方法、装置和设备以及二维码
CN109558479B (zh) 一种规则匹配方法、装置、设备及存储介质
CN107992307B (zh) 一种函数编译方法及装置
CN111090433B (zh) 一种数据处理的方法、装置和存储介质
CN111885000B (zh) 一种基于图神经网络的网络攻击检测方法、系统及装置
CN105868166B (zh) 一种正则表达式的生成方法及系统
CN111124487B (zh) 代码克隆检测方法、装置以及电子设备
CN108563685B (zh) 一种银行标识代码的查询方法、装置及设备
CN104881611A (zh) 保护软件产品中的敏感数据的方法和装置
CN110569428A (zh) 一种推荐模型的构建方法、装置及设备
CN108874379B (zh) 页面的处理方法及装置
CN112199416A (zh) 数据规则生成方法及装置
WO2015003452A1 (en) Methods and systems for file processing
CN113849781A (zh) Go语言源代码混淆方法、系统、终端及存储介质
CN109658094A (zh) 随机游走、基于集群的随机游走方法、装置以及设备
CN109409037B (zh) 一种数据混淆规则的生成方法、装置及设备
CN117032719A (zh) 针对TypeScript的静态编译方法及装置
CN106202523A (zh) 网页编辑方法及装置
CN109960497A (zh) 一种脚本文件间的调用方法及装置
CN110968500A (zh) 一种测试用例的执行方法及装置
CN114819106A (zh) 计算图优化方法及装置、电子设备、计算机可读介质
CN109558580A (zh) 一种文本分析方法及装置
CN114625372A (zh) 组件自动编译方法、装置、计算机设备及存储介质
CN111143203B (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
CF01 Termination of patent right due to non-payment of annual fee

Granted publication date: 20181130