程序代码处理方法及装置与流程



1.本说明书实施例涉及计算机技术领域,具体地,涉及程序代码处理方法及装置。


背景技术:



2.静态程序分析一般是指不运行程序,而是通过分析程序的源代码或者构建产物来发现程序特定性质的技术。按照是否处理跨函数的性质,静态程序分析技术可以分为函数内和函数间,其中函数间静态程序分析需要根据程序调用链路,跟踪数据流和控制流。函数间静态程序分析作为从程序中学习性质的基础能力,有巨大的应用价值,如对于安全领域,它可以追踪隐私信息,防止隐私泄漏,对于技术风向,它可以自动发现程序的可能漏洞等等。
3.目前,很多程序的函数调用链路非常长(如可达上百个节点)且数量庞大(如随着节点数呈指数经增长)。因此,迫切需要一种合理、可靠的方案,可以对待分析的程序代码进行处理,以有助于提升函数间静态程序分析的性能和精度。


技术实现要素:



4.本说明书实施例提供了程序代码处理方法及装置,可以对待分析的程序代码进行处理,以有助于提升函数间静态程序分析的性能和精度。
5.第一方面,本说明书实施例提供了一种程序代码处理方法,包括:针对待分析的程序代码中被调用的第一函数包括的若干程序语句,识别上下文敏感语句和上下文不敏感语句;为从所述若干程序语句中识别出的上下文不敏感语句生成第一语句摘要;生成所述第一函数的第一函数摘要,其中包括所述第一语句摘要,以及从所述若干程序语句中识别出的上下文敏感语句;使用所述第一函数摘要,替换所述程序代码中调用所述第一函数的第一函数调用点。
6.在一些实施例中,在所述替换所述程序代码中调用所述第一函数的第一函数调用点之后,还包括:基于所述第一函数摘要中的上下文敏感语句的上下文信息,确定所述上下文敏感语句是否满足预设的摘要生成条件;当确定结果为是时,基于所述上下文信息为所述上下文敏感语句生成第二语句摘要,并在所述程序代码中,使用所述第二语句摘要替换所述第一函数摘要中的所述上下文敏感语句。
7.在一些实施例中,当所述确定结果为否时,或者在使用所述第二语句摘要替换所述第一函数摘要中的所述上下文敏感语句之后,还包括:基于所述第一函数调用点所在的第二函数当前的函数体,生成所述第二函数的第二函数摘要。
8.在一些实施例中,在所述生成所述第二函数的第二函数摘要之后,还包括:使用所述第二函数摘要,替换所述程序代码中调用所述第二函数的第二函数调用点。
9.在一些实施例中,所述针对待分析的程序代码中被调用的第一函数包括的若干程序语句,识别上下文敏感语句和上下文不敏感语句,包括:对于所述若干程序语句中任意的程序语句,确定所述程序语句是否为多态调用语句;若确定所述程序语句是多态调用语句,
则判定所述程序语句是上下文敏感语句;若确定所述程序语句不是多态调用语句,则判定所述程序语句是上下文不敏感语句。
10.在一些实施例中,在所述替换所述程序代码中调用所述第一函数的第一函数调用点之后,还包括:若所述第一函数调用点的输入参数中存在不同于所述第一函数的输入参数的第一参数,则基于所述第一参数,在所述程序代码中对所述第一函数摘要中的所述第一语句摘要进行更新。
11.第二方面,本说明书实施例提供了一种程序代码处理装置,包括:识别单元,被配置成针对待分析的程序代码中被调用的第一函数包括的若干程序语句,识别上下文敏感语句和上下文不敏感语句;语句摘要生成单元,被配置成为从所述若干程序语句中识别出的上下文不敏感语句生成第一语句摘要;函数摘要生成单元,被配置成生成所述第一函数的第一函数摘要,其中包括所述第一语句摘要,以及从所述若干程序语句中识别出的上下文敏感语句;代码处理单元,被配置成使用所述第一函数摘要,替换所述程序代码中调用所述第一函数的第一函数调用点。
12.在一些实施例中,所述装置还包括:确定单元,被配置成在所述代码处理单元使用所述第一函数摘要替换所述程序代码中的所述第一函数调用点之后,基于所述第一函数摘要中的上下文敏感语句的上下文信息,确定所述上下文敏感语句是否满足预设的摘要生成条件;所述语句摘要生成单元,还被配置成当所述确定单元的确定结果为是时,基于所述上下文信息为所述上下文敏感语句生成第二语句摘要;所述代码处理单元,还被配置成在所述程序代码中,使用所述第二语句摘要替换所述第一函数摘要中的所述上下文敏感语句。
13.第三方面,本说明书实施例提供了一种计算机可读存储介质,其上存储有计算机程序,其中,当该计算机程序在计算机中执行时,令该计算机执行如第一方面中任一实现方式描述的方法。
14.第四方面,本说明书实施例提供了一种计算设备,包括存储器和处理器,其中,该存储器中存储有可执行代码,该处理器执行该可执行代码时,实现如第一方面中任一实现方式描述的方法。
15.第五方面,本说明书实施例提供了一种计算机程序,其中,当该计算机程序在计算机中执行时,令该计算机执行如第一方面中任一实现方式描述的方法。
16.本说明书的上述实施例提供的方案,可以将待分析的程序代码中被调用的第一函数包括的若干程序语句,分为上下文敏感语句和上下文不敏感语句。对于该上下文不敏感语句,无须给予上下文信息就能精确抽象出语句摘要。对于该上下文敏感语句,使其保留在第一函数的第一函数摘要中,通过使用第一函数摘要替换程序代码中调用第一函数的第一函数调用点,能给予该上下文敏感语句上下文信息,从而能够基于上下文信息对该上下文敏感语句进行精确抽象。由此,能确保函数摘要的高精度。另外,通过为待分析的程序代码中的函数生成函数摘要,能实现基于函数摘要的函数间静态程序分析,相较于现有的基于路径遍历的函数间静态程序分析技术,能提升函数间静态程序分析的性能。因此,该方案有助于提升函数间静态程序分析的性能和精度。
附图说明
17.为了更清楚地说明本说明书披露的多个实施例的技术方案,下面将对实施例描述
中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本说明书披露的多个实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其它的附图。
18.图1是本说明书实施例可以应用于其中的一个应用场景的示意图;
19.图2是程序代码处理方法的一个实施例的流程图;
20.图3是更新后的程序代码的展示效果的一个示意图;
21.图4是程序代码处理方法的一个实施例的流程图;
22.图5是更新后的程序代码的展示效果的一个示意图;
23.图6是更新后的程序代码的展示效果的一个示意图;
24.图7是程序代码处理装置的一个结构示意图。
具体实施方式
25.下面结合附图和实施例对本说明书作进一步的详细说明。可以理解的是,此处所描述的具体实施例仅仅用于解释相关发明,而非对该发明的限定。所描述的实施例仅仅是本说明书一部分实施例,而不是全部的实施例。基于本说明书中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本技术保护的范围。
26.需要说明的是,为了便于描述,附图中仅示出了与有关发明相关的部分。在不冲突的情况下,本说明书中的实施例及实施例中的特征可以相互组合。
27.如前所述,很多程序的函数调用链路非常长(如可达上百个节点)且数量庞大(如随着节点数呈指数经增长)。为了有助于提升函数间静态程序分析的性能和精度,本说明书的一些实施例提供了程序代码处理方法。
28.图1为本说明书实施例可以应用于其中的一个应用场景的示意图。如图1所示,该应用场景涉及待分析的程序代码,该程序代码可以包括多个函数,该多个函数各自包括若干程序语句。另外,该多个函数中的部分函数中存在函数调用点。需要指出,图1中示出的程序代码仅是示例性代码。应该理解,本说明书实施例提供的方案可以针对各种程序代码进行处理。
29.以图1示出的程序代码中第28行的程序语句“return foo(x,obj)”为例,该程序语句中的“foo(x,obj)”为函数调用点,该函数调用点用于调用该程序代码中第22行示出的foo函数。对该函数调用点来说,foo函数为被调用函数,该函数调用点所在的mid函数为调用函数。再以该程序代码中第31行的程序语句“return mid(new y(),obj)”为例,该程序语句中的“mid(new y(),obj)”为函数调用点,该函数调用点用于调用该程序代码中第27行示出的mid函数。对该函数调用点来说,mid函数为被调用函数,该函数调用点所在的bar1函数为调用函数。
30.在该应用场景中,对于待分析的程序代码中被调用的函数,例如第22行示出的foo函数,可以为该foo函数生成函数摘要。为了提升函数摘要的精度,在生成函数摘要之前,可以将foo函数的各程序语句分为上下文敏感语句和上下文不敏感语句。
31.其中,上下文可以理解为语句执行的前序状态,通常包括函数的输入参数的取值。上下文敏感语句,对不同的上下文,此语句的抽象是不同的。上下文不敏感语句,对不同的上下文,此语句的抽象是相同的。如对于指针分析,简单赋值语句是上下文不敏感语句,而
多态调用语句是上下文敏感语句。
32.具体地,对于foo函数中位于第24行的程序语句“x tx=id(x)”,由于id函数是非多态函数,无论foo函数的输入参数(x和obj)的取值如何,在执行该程序语句时,都调用在类facadeimpl(第17行示出的类)中定义的id函数。因此,该程序语句是上下文不敏感语句,可以直接为该程序语句生成语句摘要。
33.对于foo函数中位于第25行的程序语句“return tx.poly(obj)”,该程序语句中的被调用函数poly是多态函数,函数调用点“tx.poly(obj)”具体是调用类y中poly函数(参看第7行),还是调用类z中的poly函数(参看第13行),取决于参数x的取值。因此,该程序语句是多态调用语句,属于上下文敏感语句。
34.在将foo函数中的各程序语句分为上下文敏感语句和上下文不敏感语句,并且为上下文不敏感语句生成语句摘要后,可以生成foo函数的函数摘要,该函数摘要包括该语句摘要,以及该各程序语句中的上下文敏感语句。需要指出,通过将上下文敏感语句原封不动的保留在函数摘要中,能确保函数摘要的高精度。
35.在生成foo函数的函数摘要后,可以使用该函数摘要,替换程序代码中调用foo函数的函数调用点,如第28行中的函数调用点“foo(x,obj)”。由此,可以针对该函数摘要中的上下文敏感语句给予上下文信息,从而能够基于给予的上下文信息对上下文敏感语句进行精确抽象。
36.下面,结合具体的实施例,描述上述方法的具体实施步骤。
37.参看图2,其示出了程序代码处理方法的一个实施例的流程200。该方法的执行主体可以为任何具有计算、处理能力的装置、设备、平台或设备集等。该方法包括以下步骤:
38.步骤202,针对待分析的程序代码中被调用的第一函数包括的若干程序语句,识别上下文敏感语句和上下文不敏感语句;
39.步骤204,为从上述若干程序语句中识别出的上下文不敏感语句生成第一语句摘要;
40.步骤206,生成第一函数的第一函数摘要,其中包括第一语句摘要,以及从上述若干程序语句中识别出的上下文敏感语句;
41.步骤208,使用第一函数摘要,替换程序代码中调用第一函数的第一函数调用点。
42.下面,对以上各步骤做进一步说明。
43.在步骤202中,可以针对待分析的程序代码中被调用的第一函数包括的若干程序语句,识别上下文敏感语句和上下文不敏感语句。
44.其中,可以采用各种识别方式,识别程序语句是上下文敏感语句还是上下文不敏感语句。
45.具体地,在一个例子中,可以预设有上下文敏感语句识别服务,可以将待分析的程序代码提供给该识别服务,由该识别服务针对该程序代码中的函数所包括的程序语句,识别上下文敏感语句和上下文不敏感语句,并返回识别结果。由此,可以基于该识别结果,确定第一函数包括的若干程序语句中的上下文敏感语句和上下文不敏感语句。
46.在另一个例子中,对于上述若干程序语句中任意的程序语句,可以确定该程序语句是否为多态调用语句。若确定该程序语句是多态调用语句,则可以判定该程序语句是上下文敏感语句。若确定该程序语句不是多态调用语句,则可以判定该程序语句是上下文不
敏感语句。
47.接着,在步骤204中,可以为从上述若干程序语句中识别出的上下文不敏感语句生成语句摘要(可称为第一语句摘要)。需要指出,摘要的形式根据具体分析的不同而不同,具体的摘要形式可根据实际需求设定,在此不做具体限定。
48.接着,在步骤206中,可以生成第一函数的函数摘要(可称为第一函数摘要)。其中,第一函数摘要可以包括第一语句摘要,以及从上述若干程序语句中识别出的上下文敏感语句。
49.接着,在步骤208中,可以使用第一语句摘要,替换程序代码中调用第一函数的每个函数调用点(可称为第一函数调用点)。
50.以图1中示出的程序代码中的foo函数为例,根据前文中的描述,可以获知foo函数中位于第24行的程序语句“x tx=id(x)”是上下文不敏感语句,位于第25行的程序语句“return tx.poly(obj)”是上下文敏感语句。在对第24行的程序语句进行抽象时,可以将输入参数x与返回值tx的传递关系(该传递关系可基于第24、18-20行的程序语句看出)压缩为即tx的指向集包含了x。由此,第24行的程序语句的语句摘要可以为为foo函数生成的函数摘要例如可以为之后,可以使用该函数摘要替换该程序代码中位于第28行的函数调用点“foo(x,obj)”。更新后的该程序代码的展示效果可以如图3所示。其中,图3是更新后的程序代码的展示效果的一个示意图。
51.图2对应的实施例提供的方案,可以将待分析的程序代码中被调用的第一函数包括的若干程序语句,分为上下文敏感语句和上下文不敏感语句。对于该上下文不敏感语句,无须给予上下文信息就能精确抽象出语句摘要。对于该上下文敏感语句,使其保留在第一函数的第一函数摘要中,通过使用第一函数摘要替换程序代码中调用第一函数的第一函数调用点,能给予该上下文敏感语句上下文信息,从而能够基于上下文信息对该上下文敏感语句进行精确抽象。由此,能确保函数摘要的高精度。另外,通过为待分析的程序代码中的函数生成函数摘要,能实现基于函数摘要的函数间静态程序分析,相较于现有的基于路径遍历的函数间静态程序分析技术,能提升函数间静态程序分析的性能。因此,该方案有助于提升函数间静态程序分析的性能和精度。应该理解,该方案有助于提升用于进行函数间静态程序分析的设备的性能,以及该设备在分析过程中产出的数据的精度。
52.在一个实施例中,在使用第一函数摘要替换程序代码中调用第一函数的第一函数调用点之后,可以在上下文敏感语句的上下文信息足够时,及时抽象上下文敏感语句。在传播上下文敏感语句时,并不总是将其传递到根函数。
53.具体地,参看图4,其示出了程序代码处理方法的一个实施例的流程400。该方法的执行主体可以为任何具有计算、处理能力的装置、设备、平台或设备集等。该方法包括以下步骤:
54.步骤402,针对待分析的程序代码中被调用的第一函数包括的若干程序语句,识别上下文敏感语句和上下文不敏感语句;
55.步骤404,为从上述若干程序语句中识别出的上下文不敏感语句生成第一语句摘要;
56.步骤406,生成第一函数的第一函数摘要,其中包括第一语句摘要,以及从上述若干程序语句中识别出的上下文敏感语句;
57.步骤408,使用第一函数摘要,替换程序代码中调用第一函数的第一函数调用点;
58.步骤410,基于第一函数摘要中的上下文敏感语句的上下文信息,确定上下文敏感语句是否满足预设的摘要生成条件;
59.步骤412,当确定结果为是时,基于上下文信息为上下文敏感语句生成第二语句摘要,并在程序代码中,使用第二语句摘要替换第一函数摘要中的上下文敏感语句;
60.步骤414,基于第一函数调用点所在的第二函数当前的函数体,生成第二函数的第二函数摘要;
61.步骤416,使用第二函数摘要,替换程序代码中调用第二函数的第二函数调用点。
62.其中,步骤402-408对应于图2对应实施例中的步骤202-208,具体实现细节和技术效果可参考图2对应实施例中的相关说明,在此不再赘述。
63.在步骤410中,可以基于第一函数摘要中的上下文敏感语句的上下文信息,确定上下文敏感语句是否满足预设的摘要生成条件。该摘要生成条件可根据实际需求设定,在此不做具体限定。在一个例子中,该摘要生成条件例如可以为,上下文敏感语句中的被调用函数所归属的类能基于上下文信息确定出。当步骤410的确定结果为是时,可以执行步骤412。当步骤410的确定结果为否时,可以执行步骤414。
64.在步骤412中,可以响应于步骤410的确定结果为是,基于上下文信息为上下文敏感语句生成第二语句摘要,并在程序代码中,使用第二语句摘要替换第一函数摘要中的上下文敏感语句。之后,可以执行步骤414。
65.当步骤410的确定结果为否时,或者在执行完步骤412后,可以通过执行步骤414,基于第一函数调用点所在的第二函数当前的函数体,生成第二函数的第二函数摘要。其中,当步骤410的确定结果为否时,第二函数摘要至少包括第一函数摘要。
66.需要说明,在依次执行完步骤412、414之后,若程序代码中不存在调用第二函数的函数调用点,也即若第二函数为根函数,则可以结束对流程400的执行。若程序代码中存在调用第二函数的函数调用点,则可以接着执行步骤416。
67.另外,当步骤410的确定结果为否时,可以表示第一函数摘要中的上下文敏感语句的上下文信息,不足以用于该上下文敏感语句的精确抽象,需要继续将该上下文敏感语句传播至调用第二函数的函数中。基于此,在依次执行完步骤410、414之后,可以接着执行步骤416。
68.在步骤416中,可以使用第二函数摘要,替换程序代码中调用第二函数的第二函数调用点。之后的执行流程,可以基于前文中与第一函数有关的内容类推得到,在此不再赘述。
69.在一个实施例中,在执行完步骤408之后,例如具体在执行完步骤408之后,并且在执行步骤410之前,若第一函数调用点的输入参数中存在不同于第一函数的输入参数的第一参数,则可以基于第一参数,在程序代码中对第一函数摘要中的第一语句摘要进行更新。
70.下面,以图3示出的程序代码为例,对在步骤408之后执行的步骤进行举例说明。参看图3,第28行中的是foo函数的函数摘要。第27行中的输入参数x的取值,可以视为该函数摘要中的上下文敏感语句“return tx.poly(obj)”的上下文。在此例中,tx来源于mid函数的输入参数x,因此依然无法确定该上下文敏感语句中的poly函数是来自类y还是类z。因此,可以认为该上下文不足以用于该上下文敏感语句的精确抽
象,从而可以判定该上下文敏感语句不满足摘要生成条件。
71.接着,可以基于mid函数当前的函数体,生成mid函数的函数摘要。其中,mid函数的函数摘要与foo函数的函数摘要相同,为之后,可以使用mid函数的函数摘要,替换程序代码中调用mid函数的函数调用点,例如第31行的函数调用点“mid(new y(),obj)”。此时,更新后的程序代码的展示效果可以如图5所示。其中,图5是更新后的程序代码的展示效果的一个示意图。
72.接着,根据该函数调用点的输入参数new y(),可以获知tx来自于一个类y的对象,因此,可以在图5所示的程序代码中,将第31行中的语句摘要更新为更新为之后,基于第31行中的上下文敏感语句“return tx.poly(obj)”的上下文信息,可以获知该上下文敏感语句中的poly函数来自类y,此时可以认为该上下文信息是足够的,可以对该上下文敏感语句进行精确抽象。具体地,可以将类y中的poly函数的函数摘要,例如作为该上下文敏感语句的语句摘要,并使用该语句摘要替换第31行中的上下文敏感语句。此时,第31行中的函数摘要可以具体为更新后的程序代码可以如图6所示。其中,图6是更新后的程序代码的展示效果的一个示意图。
73.接着,可以基于bar1函数当前的函数体生成bar1的函数摘要,该函数摘要例如可以为
74.图4对应的实施例提供的方案,可以将函数中的程序语句分为上下文敏感语句和上下文不敏感语句,前者需要上下文信息才能精确抽象,后者不需要上下文信息就能精确抽象,既不损失精度,又保持了高性能。另外,在传播上下文敏感语句时,并不总是将其传递到根函数,而是在传播过程中,若上下文信息足够,则直接将其抽象。
75.进一步参考图7,本说明书提供了一种程序代码处理装置的一个实施例,该装置实施例与图2所示的方法实施例相对应,该装置可以应用于任何具有计算、处理能力的设备、平台或设备集等。
76.如图7所示,本实施例的程序代码处理装置700包括:识别单元701、语句摘要生成单元702、函数摘要生成单元703和代码处理单元704。其中,识别单元701被配置成针对待分析的程序代码中被调用的第一函数包括的若干程序语句,识别上下文敏感语句和上下文不敏感语句;语句摘要生成单元702被配置成为从该若干程序语句中识别出的上下文不敏感语句生成第一语句摘要;函数摘要生成单元703被配置成生成第一函数的第一函数摘要,其中包括第一语句摘要,以及从该若干程序语句中识别出的上下文敏感语句;代码处理单元704被配置成使用第一函数摘要,替换程序代码中调用第一函数的第一函数调用点。
77.在一些实施例中,上述装置700还可以包括:确定单元,被配置成在代码处理单元704使用第一函数摘要替换程序代码中的第一函数调用点之后,基于第一函数摘要中的上下文敏感语句的上下文信息,确定该上下文敏感语句是否满足预设的摘要生成条件。另外,语句摘要生成单元702,还可以被配置成当确定单元的确定结果为是时,基于该上下文信息为该上下文敏感语句生成第二语句摘要。代码处理单元704,还可以被配置成在程序代码中,使用第二语句摘要替换第一函数摘要中的该上下文敏感语句。
78.在一些实施例中,函数摘要生成单元703还可以被配置成:在确定单元的确定结果为否时,或者在代码处理单元704使用第二语句摘要替换第一函数摘要中的上下文敏感语
句之后,基于第一函数调用点所在的第二函数当前的函数体,生成第二函数的第二函数摘要。
79.在一些实施例中,当确定单元的确定结果为否时,第二函数摘要至少包括第一函数摘要,并且代码处理单元704还可以被配置成:在函数摘要生成单元703生成第二函数的第二函数摘要之后,使用第二函数摘要,替换程序代码中调用第二函数的第二函数调用点。
80.在一些实施例中,识别单元701可以进一步被配置成:对于上述若干程序语句中任意的程序语句,确定该程序语句是否为多态调用语句;若确定该程序语句是多态调用语句,则判定该程序语句是上下文敏感语句;若确定该程序语句不是多态调用语句,则判定该程序语句是上下文不敏感语句。
81.在一些实施例中,代码处理单元704还可以被配置成:若第一函数调用点的输入参数中存在不同于第一函数的输入参数的第一参数,则基于第一参数,在程序代码中对第一函数摘要中的第一语句摘要进行更新。
82.在图7对应的装置实施例中,各单元的具体处理及其带来的技术效果可参考前文中方法实施例的相关说明,在此不再赘述。
83.本说明书实施例还提供了一种计算机可读存储介质,其上存储有计算机程序,其中,当该计算机程序在计算机中执行时,令计算机执行以上各方法实施例分别描述的程序代码处理方法。
84.本说明书实施例还提供了一种计算设备,包括存储器和处理器,其中,该存储器中存储有可执行代码,该处理器执行该可执行代码时,实现以上各方法实施例分别描述的程序代码处理方法。
85.本说明书实施例还提供了一种计算机程序,其中,当该计算机程序在计算机中执行时,令计算机执行以上各方法实施例分别描述的程序代码处理方法。
86.本领域技术人员应该可以意识到,在上述一个或多个示例中,本说明书披露的多个实施例所描述的功能可以用硬件、软件、固件或它们的任意组合来实现。当使用软件实现时,可以将这些功能存储在计算机可读介质中或者作为计算机可读介质上的一个或多个指令或代码进行传输。
87.在一些情况下,在权利要求书中记载的动作或步骤可以按照不同于实施例中的顺序来执行并且仍然可以实现期望的结果。另外,在附图中描绘的过程不一定要求示出的特定顺序或者连续顺序才能实现期望的结果。在某些实施方式中,多任务处理和并行处理也是可以的或者可能是有利的。
88.以上所述的具体实施方式,对本说明书披露的多个实施例的目的、技术方案和有益效果进行了进一步详细说明,所应理解的是,以上所述仅为本说明书披露的多个实施例的具体实施方式而已,并不用于限定本说明书披露的多个实施例的保护范围,凡在本说明书披露的多个实施例的技术方案的基础之上,所做的任何修改、等同替换、改进等,均应包括在本说明书披露的多个实施例的保护范围之内。

技术特征:


1.一种程序代码处理方法,包括:针对待分析的程序代码中被调用的第一函数包括的若干程序语句,识别上下文敏感语句和上下文不敏感语句;为从所述若干程序语句中识别出的上下文不敏感语句生成第一语句摘要;生成所述第一函数的第一函数摘要,其中包括所述第一语句摘要,以及从所述若干程序语句中识别出的上下文敏感语句;使用所述第一函数摘要,替换所述程序代码中调用所述第一函数的第一函数调用点。2.根据权利要求1所述的方法,其中,在所述替换所述程序代码中调用所述第一函数的第一函数调用点之后,还包括:基于所述第一函数摘要中的上下文敏感语句的上下文信息,确定所述上下文敏感语句是否满足预设的摘要生成条件;当确定结果为是时,基于所述上下文信息为所述上下文敏感语句生成第二语句摘要,并在所述程序代码中,使用所述第二语句摘要替换所述第一函数摘要中的所述上下文敏感语句。3.根据权利要求2所述的方法,其中,当所述确定结果为否时,或者在使用所述第二语句摘要替换所述第一函数摘要中的所述上下文敏感语句之后,还包括:基于所述第一函数调用点所在的第二函数当前的函数体,生成所述第二函数的第二函数摘要。4.根据权利要求3所述的方法,其中,在所述生成所述第二函数的第二函数摘要之后,还包括:使用所述第二函数摘要,替换所述程序代码中调用所述第二函数的第二函数调用点。5.根据权利要求1所述的方法,其中,所述针对待分析的程序代码中被调用的第一函数包括的若干程序语句,识别上下文敏感语句和上下文不敏感语句,包括:对于所述若干程序语句中任意的程序语句,确定所述程序语句是否为多态调用语句;若确定所述程序语句是多态调用语句,则判定所述程序语句是上下文敏感语句;若确定所述程序语句不是多态调用语句,则判定所述程序语句是上下文不敏感语句。6.根据权利要求1所述的方法,其中,在所述替换所述程序代码中调用所述第一函数的第一函数调用点之后,还包括:若所述第一函数调用点的输入参数中存在不同于所述第一函数的输入参数的第一参数,则基于所述第一参数,在所述程序代码中对所述第一函数摘要中的所述第一语句摘要进行更新。7.一种程序代码处理装置,包括:识别单元,被配置成针对待分析的程序代码中被调用的第一函数包括的若干程序语句,识别上下文敏感语句和上下文不敏感语句;语句摘要生成单元,被配置成为从所述若干程序语句中识别出的上下文不敏感语句生成第一语句摘要;函数摘要生成单元,被配置成生成所述第一函数的第一函数摘要,其中包括所述第一语句摘要,以及从所述若干程序语句中识别出的上下文敏感语句;代码处理单元,被配置成使用所述第一函数摘要,替换所述程序代码中调用所述第一
函数的第一函数调用点。8.根据权利要求7所述的装置,还包括:确定单元,被配置成在所述代码处理单元使用所述第一函数摘要替换所述程序代码中的所述第一函数调用点之后,基于所述第一函数摘要中的上下文敏感语句的上下文信息,确定所述上下文敏感语句是否满足预设的摘要生成条件;所述语句摘要生成单元,还被配置成当所述确定单元的确定结果为是时,基于所述上下文信息为所述上下文敏感语句生成第二语句摘要;所述代码处理单元,还被配置成在所述程序代码中,使用所述第二语句摘要替换所述第一函数摘要中的所述上下文敏感语句。9.一种计算机可读存储介质,其上存储有计算机程序,其中,当所述计算机程序在计算机中执行时,令计算机执行权利要求1-6中任一项所述的方法。10.一种计算设备,包括存储器和处理器,其中,所述存储器中存储有可执行代码,所述处理器执行所述可执行代码时,实现权利要求1-6中任一项所述的方法。

技术总结


本说明书实施例提供了程序代码处理方法及装置,该方法的一具体实施方式包括:针对待分析的程序代码中被调用的第一函数包括的若干程序语句,识别上下文敏感语句和上下文不敏感语句;为从该若干程序语句中识别出的上下文不敏感语句生成第一语句摘要;生成第一函数的第一函数摘要,其中包括第一语句摘要,以及从该若干程序语句中识别出的上下文敏感语句;使用第一函数摘要,替换该程序代码中调用第一函数的第一函数调用点。数的第一函数调用点。数的第一函数调用点。


技术研发人员:

刘江潮 刘洁瑞 狄鹏 吴迪宇 郑恒杰

受保护的技术使用者:

支付宝(杭州)信息技术有限公司

技术研发日:

2022.11.22

技术公布日:

2023/3/3

本文发布于:2024-09-20 22:25:32,感谢您对本站的认可!

本文链接:https://www.17tex.com/tex/2/66818.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

标签:语句   函数   上下文   所述
留言与评论(共有 0 条评论)
   
验证码:
Copyright ©2019-2024 Comsenz Inc.Powered by © 易纺专利技术学习网 豫ICP备2022007602号 豫公网安备41160202000603 站长QQ:729038198 关于我们 投诉建议