CN115437685A - 一种函数定位方法、装置和电子设备 - Google Patents

一种函数定位方法、装置和电子设备 Download PDF

Info

Publication number
CN115437685A
CN115437685A CN202210908155.XA CN202210908155A CN115437685A CN 115437685 A CN115437685 A CN 115437685A CN 202210908155 A CN202210908155 A CN 202210908155A CN 115437685 A CN115437685 A CN 115437685A
Authority
CN
China
Prior art keywords
line number
function
target
functions
candidate
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
Application number
CN202210908155.XA
Other languages
English (en)
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.)
Xi'an Xinxin Information Technology Co ltd
Original Assignee
Xi'an Xinxin Information 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 Xi'an Xinxin Information Technology Co ltd filed Critical Xi'an Xinxin Information Technology Co ltd
Priority to CN202210908155.XA priority Critical patent/CN115437685A/zh
Publication of CN115437685A publication Critical patent/CN115437685A/zh
Pending legal-status Critical Current

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/70Software maintenance or management
    • G06F8/75Structural analysis for program understanding
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F21/00Security arrangements for protecting computers, components thereof, programs or data against unauthorised activity
    • G06F21/50Monitoring users, programs or devices to maintain the integrity of platforms, e.g. of processors, firmware or operating systems
    • G06F21/57Certifying or maintaining trusted computer platforms, e.g. secure boots or power-downs, version controls, system software checks, secure updates or assessing vulnerabilities
    • G06F21/577Assessing vulnerabilities and evaluating computer system security
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F2221/00Indexing scheme relating to security arrangements for protecting computers, components thereof, programs or data against unauthorised activity
    • G06F2221/03Indexing scheme relating to G06F21/50, monitoring users, programs or devices to maintain the integrity of platforms
    • G06F2221/033Test or assess software

Landscapes

  • Engineering & Computer Science (AREA)
  • General Engineering & Computer Science (AREA)
  • Software Systems (AREA)
  • Theoretical Computer Science (AREA)
  • Computer Hardware Design (AREA)
  • Computer Security & Cryptography (AREA)
  • Physics & Mathematics (AREA)
  • General Physics & Mathematics (AREA)
  • Computing Systems (AREA)
  • Stored Programmes (AREA)

Abstract

本申请提出一种函数定位方法、装置和电子设备,函数定位方法包括获取目标代码文件和目标行号;其中,目标代码文件为经补丁修改后的代码文件,目标行号为补丁所修改的代码对应的行号;确定目标代码文件中的所有函数以及所有函数的特征行号;当特征行号为起始行号时,从目标代码文件的所有函数中,筛选出特征行号不大于目标行号并且与目标行号的差值的绝对值最小的函数,得到目标函数,目标函数包括补丁所修改的代码行。本申请能够自动准确定位补丁影响的函数,无需人工寻找补丁影响的函数,从而有效降低人工成本,且相对于人工寻找更不易出错。

Description

一种函数定位方法、装置和电子设备
技术领域
本申请涉及人工智能技术领域,尤其涉及一种函数定位方法、装置和电子设备。
背景技术
目前,智能网联汽车的操作系统,智能终端的操作系统,以及智能家居产品用的操作系统等等发布后,可能发现有些计算机程序中存在软件错误、安全漏洞以及兼容性等问题。为了解决这些问题或漏洞,需要通过代码补丁对代码进行修改。补丁是系统发布后用来修订应用程序中存在的软件错误、安全漏洞以及兼容性等问题和缺陷的一些应用程序集合。补丁的作用包括修补安全漏洞、修复软件错误、增强系统兼容性、提升系统的可用性和性能等。
而在对代码进行修改后的补丁分析、漏洞存在性测试过程中,通常是通过人工寻找补丁所影响的函数,进而便于对补丁进行存在性测试,这种方式需要较高的人工成本。
发明内容
基于上述需求,本申请提出一种函数定位方法、装置和电子设备,该方法能够自动定位补丁所影响的函数,从而克服目前寻找补丁影响的函数时人工成本较高的问题。
本申请提出的技术方案具体如下:
第一方面,本申请提供一种函数定位方法,包括:
获取目标代码文件和目标行号;其中,所述目标代码文件为经补丁修改后的代码文件,所述目标行号为补丁所修改的代码对应的行号;
确定所述目标代码文件中的所有函数以及所有函数的特征行号;
当所述特征行号为起始行号时,从所述目标代码文件的所有函数中,筛选出特征行号不大于所述目标行号并且与所述目标行号的差值的绝对值最小的函数,得到目标函数,所述目标函数包括所述补丁所修改的代码行。
可选地,所述方法还包括:
当所述特征行号为末尾行号时,从所述目标代码文件的所有函数中,筛选出特征行号不小于所述目标行号并且与所述目标行号的差值的绝对值最小的函数,得到目标函数,所述目标函数包括所述补丁所修改的代码行。
可选地,确定所述目标代码文件中的所有函数以及所有函数的特征行号,包括:
对所述目标代码文件进行解析处理,生成所述目标代码文件的抽象语法树;
从所述抽象语法树中选出节点类型为函数定义的所有节点,确定所述目标代码文件的所有函数;
根据所述抽象语法树中的节点类型为函数定义的各个节点的节点信息,确定所述目标代码文件的所有函数的起始行号。
可选地,所述方法还包括:
从所述抽象语法树中的节点类型为函数定义的各个节点的节点信息中,获取函数长度信息;
根据函数起始行号和函数长度信息,计算确定所述目标代码文件的所有函数的末尾行号。
可选地,从所述目标代码文件的所有函数中,筛选出特征行号不大于所述目标行号并且与所述目标行号的差值的绝对值最小的函数,得到目标函数,包括:
通过将所述目标代码文件中的各个函数的特征行号与所述目标行号进行对比,从所述目标代码文件中选出候选函数,所述候选函数的特征行号小于或等于所述目标行号;
从所述候选函数中,确定出特征行号与所述目标行号的差值的绝对值最小的候选函数,得到目标函数。
可选地,从所述候选函数中,确定出特征行号与所述目标行号的差值的绝对值最小的候选函数,得到目标函数,包括:
计算第一候选函数的特征行号与所述目标行号的差值的绝对值作为第一差值,以及,计算第二候选函数的特征行号与所述目标行号的差值的绝对值作为第二差值;
通过对比所述第一差值和所述第二差值的大小关系,从所述第一候选函数和所述第二候选函数中,选出特征行号与所述目标行号的差值的绝对值最小的函数,作为候选目标函数。
可选地,从所述目标代码文件的所有函数中,筛选出特征行号不小于所述目标行号并且与所述目标行号的差值的绝对值最小的函数,得到目标函数,包括:
通过将所述目标代码文件中的各个函数的特征行号与所述目标行号进行对比,从所述目标代码文件中选出候选函数,所述候选函数的特征行号大于或等于所述目标行号;
从所述候选函数中,确定出特征行号与所述目标行号的差值的绝对值最小的候选函数,得到目标函数。
可选地,从所述候选函数中,确定出特征行号与所述目标行号的差值的绝对值最小的候选函数,得到目标函数,包括:
计算第三候选函数的特征行号与所述目标行号的差值的绝对值作为第三差值,以及,计算第四候选函数的特征行号与所述目标行号的差值的绝对值作为第四差值;
通过对比所述第三差值和所述第四差值的大小关系,从所述第三候选函数和所述第四候选函数中,选出特征行号与所述目标行号的差值的绝对值最小的函数,作为候选目标函数。
第二方面,本申请提供一种函数定位装置,其包括:
获取模块,用于获取目标代码文件和目标行号;其中,所述目标代码文件为经补丁修改后的代码文件,所述目标行号为补丁所修改的代码对应的行号;
确定模块,用于确定所述目标代码文件中的所有函数以及所有函数的特征行号;
筛选模块,用于当所述特征行号为起始行号时,从所述目标代码文件的所有函数中,筛选出特征行号不大于所述目标行号并且与所述目标行号的差值的绝对值最小的函数,得到目标函数,所述目标函数包括所述补丁所修改的代码行。
第三方面,本申请提供一种电子设备,其包括:
存储器和处理器;
其中,所述存储器用于存储程序;
所述处理器,用于通过运行所述存储器中的程序,实现如第一方面任意一项所述的函数定位方法。
第四方面,本申请提供一种存储介质,所述存储介质上存储有计算机程序,所述计算机程序被处理器执行时,实现如第一方面任意一项所述的函数定位方法的各个步骤。
本申请的函数定位方法、装置和电子设备,通过获取经补丁修改后的目标代码文件和补丁所修改的代码对应的目标行号;确定目标代码文件中的所有函数以及所有函数的特征行号;当特征行号为起始行号时,从目标代码文件的所有函数中,筛选出特征行号不大于目标行号并且与目标行号的差值的绝对值最小的函数,得到包括补丁所修改的代码行的目标函数。可见,本申请的方案中,通过获取经补丁修改后的代码文件以及补丁所修改的代码对应的行号,并根据代码文件中各个函数的行号与补丁所修改的代码行号之间的关系,从而能够自动准确地定位到补丁影响的函数所在的位置(行号),无需人工寻找,从而有效降低人工成本,且相对于人工寻找更不易出错。而在定位到对应的函数所在的位置后,可以快速确定该函数的名称,以便在后续应用,比如可以在补丁的存在性测试中应用。
附图说明
为了更清楚地说明本申请实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本申请的实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据提供的附图获得其他的附图。
图1是本申请实施例提供的一种函数定位方法的流程示意图;
图2是图1所示函数定位方法的步骤S102的具体实现方法的流程示意图;
图3是图1所示函数定位方法的步骤S104的具体实现方法的流程示意图;
图4是图1所示函数定位方法的步骤S1042的另一种具体实现方法的流程示意图;
图5是图1所示函数定位方法的步骤S105的具体实现方法的流程示意图;
图6是本申请实施例提供的一种函数定位装置的结构示意图;
图7是本申请实施例提供的一种电子设备的结构示意图。
具体实施方式
为使本发明的目的、技术方案和优点更加清楚,下面将结合本发明的实施例,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。在不冲突的情况下,下述的实施例及实施例中的特征可以相互组合。
申请概述
如背景技术部分所述,为了解决各种操作系统的计算机程序存在的问题或漏洞,需要通过代码补丁对代码进行修改,也即俗称的“打补丁”。
而在之后对补丁进行存在性测试时,需要确定补丁所影响的函数,以便确定系统程序是否存在对应的漏洞。
目前通常是人工寻找补丁影响的函数,这种方式需要大量的人工成本,且容易出错。尤其是在海量的补丁中,如果针对每个补丁进行对应漏洞的存在性测试,则人工寻找补丁影响的函数时,将耗费大量的人力。
针对上述问题,本发明提出一种能够利用计算机类设备,自动进行函数定位的方案,从而既能够降低时间和人工成本,又不易出错。以下通过多个实施例或示例对具体实现方案进行非限制性说明。
示例性方法
参照图1,本实施例提出一种函数定位方法,如图1所示,该方法至少包括以下步骤:
步骤S101:获取目标代码文件和目标行号。其中,目标代码文件为经补丁修改后的代码文件,目标行号为补丁所修改的代码对应的行号。
一些实施例中,可以直接获取补丁文件并从补丁文件中获取目标行号。
具体地,实际应用中,通常是利用补丁文件对存在漏洞的代码文件进行更新处理,从而对代码文件中的某一行或者某些行进行修改,因此,在能够获取到补丁文件的场景中,可以直接获取补丁文件,并从补丁文件中直接查找得到补丁中每一行代码的行号,也即直接查找得到目标行号。
另一些实施例中,可以通过网络爬虫(web crawler)技术从目标代码文件对应的网页中获取补丁信息,并从补丁信息识别得到目标行号。
具体地,一些场景中,可能无法直接获取到补丁文件,因此可以通过网络爬虫技术从网页中获取补丁信息(补丁详情),再从补丁信息中获取到目标行号。
需要说明的是,在本发明的各实施例中,对于修改的代码的内容相同,但修改的代码的行号不同的补丁,被视为两个不同的补丁。
步骤S102:确定目标代码文件中的所有函数以及所有函数的特征行号。
具体地,由于目标代码文件的多行代码中,除了包括函数外,还包括具有其他含义的代码行,比如变量和表达式等等。因此,为了定位到特定的函数,本步骤中,首先从目标代码文件中确定出所有的函数,再确定各个函数的特征行号,以便在后续步骤中使用。其中,函数的特征行号是函数的多行代码中能够较好地代表该函数的其中一行代码的行号。
比如,一些实施例中,特征行号可以是函数的起始行号或者末尾行号等等。
更具体地,为了从目标代码文件中确定出所有函数,当特征行号为起始行号时,一些实施例中,如图2所示,步骤S102的具体实现方案可以包括:
步骤S1021:对目标代码文件进行解析处理,生成目标代码文件的抽象语法树。
具体地,抽象语法树(Abstract Syntax Tree,AST),是源代码语法结构的一种抽象表示。它以树状的形式表现编程语言的语法结构,树上的每个节点都表示源代码中的一种结构。
其中,对于不同编程语言的代码,可以使用对应的代码编译工具解析代码文件,从而生成代码的AST,具体过程不再详述。例如,对于C/C++语言的代码,可以使用Clang工具;对于Java语言的代码,可以使用JavaParser工具;对于Python语言的代码,可以使用AST模块,等等。
步骤S1022:从抽象语法树中选出节点类型为函数定义的所有节点,确定目标代码文件的所有函数。
具体地,抽象语法树的各个节点都包含对应的节点信息,节点信息包括节点类型(type)信息,节点类型例如包括函数定义和变量定义等等。因此,通过查看每个节点的节点信息中的节点类型是否为函数定义,即可以快速确定该节点是否为函数,最终对每个节点进行确认后,即能够得到目标代码文件的所有函数。
步骤S1023:根据抽象语法树中的节点类型为函数定义的各个节点的节点信息,确定目标代码文件的所有函数的起始行号。
具体地,抽象语法树中每个节点的节点信息中除了包括对应的节点类型外,还包括起始行号信息。
因此,可以通过查看各个节点的节点信息的方式,确定各个函数的起始行号。
相对于目标代码文件,生成的抽象语法树能够在保留所需的有效信息(节点类型和起始行号)的基础上,可以省略其他不需要的信息,减少信息冗余,从而减少后续处理的处理数据量,加快处理速度。
此外,当特征行号为末尾行号时,步骤S102的具体实现方案还可以包括:
步骤S1024:从抽象语法树中的节点类型为函数定义的各个节点的节点信息中,获取函数长度信息。
步骤S1025:根据函数起始行号和函数长度信息,计算确定目标代码文件的所有函数的末尾行号。
具体地,抽象语法树中每个节点的节点信息不包括末尾行号,但是包括节点长度信息,也即节点包含的所有代码的总行数。对于函数定义的节点,节点长度信息也即函数长度信息,也即函数包含的总行数信息。因此,通过函数起始行号和函数长度信息,将二者相加,即得到函数的末尾行号。
当然,另一些实施例中,也可以通过其他方式确定函数的起始行号和末尾行号,具体不进行限制。比如,可以通过预先配置的预设处理策略确定各个函数的起始行号和末尾行号,预设处理策略比如可以是预先编写并配置的程序代码等等,其可以通过识别不同编程语言下的不同函数的起始行信息和末尾行信息来识别各个函数。
步骤S103:确定特征行号为起始行号或末尾行号。当特征行号为起始行号时,执行步骤S104;当特征行号为末尾行号时,执行步骤S105。
步骤S104:从目标代码文件的所有函数中,筛选出特征行号不大于目标行号并且与目标行号的差值的绝对值最小的函数,得到目标函数。其中,目标函数包括补丁所修改的代码行。
具体地,由于单个补丁修改的代码位于某个函数中,且每个函数均由位于起始行(第一行)代码和末尾行(最后一行)代码之间的多行代码组成,因此,通过获取所有函数各自对应的起始行号,并与补丁修改的代码对应的目标行号进行对比,则可以确定补丁代码包含在哪一个函数中,也即定位到特定的函数。
更具体地,如图3所示,一些实施例中,步骤S104具体可以包括:
步骤S1041:通过将目标代码文件中的各个函数的特征行号与目标行号进行对比,从目标代码文件中选出候选函数。其中,本步骤中的候选函数指的是特征行号小于或等于目标行号的函数。
也即,可首先对比每个函数的起始行号与目标行号的大小关系,由于每个函数由多行代码组成,因此如果某个函数的起始行号大于目标行号,则表明该函数在目标行号之后才“出现”,因此该函数必然不会受到补丁的影响;而相反地,如果某个函数的起始行号不大于目标行号,则该函数可能受到补丁的影响,也即属于候选函数。因此,本步骤中,目的在于找到起始行号小于或等于目标行号的所有函数,也即找到所有候选函数。
步骤S1042:从候选函数中,确定出特征行号与目标行号的差值的绝对值最小的候选函数,得到目标函数。
具体地,在步骤S1041的基础上,对于某一个补丁来说,候选函数,也即特征行号(本步骤中,特征行号为起始行号)小于或等于目标行号的函数,可能会有多个,但是一个补丁仅会包含在一个函数中,因此需要进一步确定该补丁具体包含在哪一个候选函数中。针对该目的,由于不同候选函数包括的代码的行数不会出现重复,因此从代码行数的角度考虑,在候选函数之间横向对比时,补丁会包含在特征行号(起始行号)与目标行号的差值的绝对值最小的候选函数中。因此,在所有候选函数中,对应的特征行号(起始行号)与目标行号的差值的绝对值最小的候选函数,即为目标函数,也即受到补丁影响的函数。
更具体地,在一些实施例中,步骤S1042具体可以包括:
计算第一候选函数的特征行号与目标行号的差值的绝对值作为第一差值,以及,计算第二候选函数的特征行号与目标行号的差值的绝对值作为第二差值;
通过对比第一差值和第二差值的大小关系,从第一候选函数和第二候选函数中,选出特征行号与目标行号的差值的绝对值最小的函数,作为候选目标函数。
其中,第一候选函数和第二候选函数均为步骤S1041确定的所有候选函数中的一个,也即,可以遍历所有候选函数,计算候选函数的特征行号与目标行号的差值的绝对值,选择计算结果最小的那一个候选函数,即为目标函数。
而另一个实施例中,如图4所示,步骤S1042的具体实现方案包括:
遍历抽象语法树AST包含的节点类型为函数定义的各个节点,每遍历到一个节点时,执行如下处理:
确定当前节点的函数的起始行号与目标行号的大小关系;
若当前节点的函数的起始行号小于或等于目标行号,且当前不存在候选函数,则将当前节点的函数作为候选函数,并遍历下一个节点类型为函数定义的节点;
若当前节点的函数对应的起始行号小于或等于目标行号,且当前存在候选函数,则计算第一差值和第二差值,并比较第一差值和第二差值的大小;其中,第一差值为目标行号与当前节点的函数的起始行号的差值,第二差值为目标行号与候选函数的起始行号的差值;
若第一差值小于第二差值,则将当前节点的函数作为候选函数,并遍历下一个节点类型为函数定义的节点;
若第一差值大于或等于第二差值,则遍历下一个节点类型为函数定义的节点;
确定遍历结束后得到的候选函数为补丁影响的函数。
本实施例中,也即,遍历抽象语法树包含的节点类型为函数定义的各个节点,并在每遍历到一个节点时,确定当前节点的函数的起始行号小于或等于目标行号,如果当前不存在候选函数,则直接将当前节点的函数作为候选函数;而如果当前存在候选函数,则分别获取第一差值和第二差值,并在第一差值小于第二差值的情况下,将当前节点的函数作为候选函数,在第一差值大于第二差值的情况下,不改变候选函数;从而最终确定遍历结束后得到的候选函数为补丁影响的函数。如此,本实施例中,通过遍历所有节点类型为函数定义的节点的方式,依次对每一个节点进行处理,设定符合要求的函数为候选函数,从而最终得到补丁影响的函数。通过遍历的方式,便于实际执行,且能够保证不会遗漏函数节点。
通过上述方案,即利用函数的起始行号和目标行号的相对大小关系,定位到补丁影响的目标函数。
步骤S105:从目标代码文件的所有函数中,筛选出特征行号不小于目标行号并且与目标行号的差值的绝对值最小的函数,得到目标函数。其中,目标函数包括补丁所修改的代码行。
具体地,与起始行号类似,由于单个补丁修改的代码位于某个函数中,且每个函数均由位于起始行(第一行)代码和末尾行(最后一行)代码之间的多行代码组成,因此,通过获取所有函数各自对应的末尾行号,并与补丁修改的代码对应的目标行号进行对比,也可以确定补丁代码包含在哪一个函数中。
更具体地,如图5所示,一些实施例中,步骤S105具体可以包括:
步骤S1051:通过将目标代码文件中的各个函数的特征行号与目标行号进行对比,从目标代码文件中选出候选函数。其中,与步骤S1041不同的是,本步骤中的候选函数指的是特征行号(本步骤中,特征行号为末尾行号)大于或等于目标行号的函数。
也即,可首先对比每个函数的末尾行号与目标行号的大小关系,由于每个函数由多行代码组成,因此如果某个函数的末尾行号小于目标行号,则表明目标行号在该函数“结束”之后才“出现”,因此该函数必然不会受到补丁的影响;而相反地,如果某个函数的末尾行号不小于目标行号,则该函数可能受到补丁的影响,也即属于候选函数。因此,本步骤中,目的在于找到末尾行号大于或等于目标行号的所有函数,也即找到所有候选函数。
步骤S1052:从候选函数中,确定出特征行号与目标行号的差值的绝对值最小的候选函数,得到目标函数。
具体地,在步骤S1051的基础上,对于某一个补丁来说,候选函数,也即特征行号(本步骤中,特征行号为末尾行号)大于或等于目标行号的函数,可能会有多个,但是一个补丁仅会包含在一个函数中,因此需要进一步确定该补丁具体包含在哪一个候选函数中。针对该目的,由于不同候选函数包括的代码的行数不会出现重复,因此从代码行数的角度考虑,在候选函数之间横向对比时,补丁会包含在特征行号(末尾行号)与目标行号的差值的绝对值最小的候选函数中。因此,在所有候选函数中,对应的特征行号(末尾行号)与目标行号的差值的绝对值最小的候选函数,即为目标函数,也即受到补丁影响的函数。
更具体地,在一些实施例中,步骤S1052具体可以包括:
计算第三候选函数的特征行号与目标行号的差值的绝对值作为第三差值,以及,计算第四候选函数的特征行号与目标行号的差值的绝对值作为第四差值;
通过对比第三差值和第四差值的大小关系,从第三候选函数和第四候选函数中,选出特征行号与目标行号的差值的绝对值最小的函数,作为候选目标函数。
其中,第三候选函数和第四候选函数均为步骤S1051确定的所有候选函数中的一个,也即,可以遍历所有候选函数,计算候选函数的特征行号与目标行号的差值的绝对值,选择计算结果最小的那一个候选函数,即为目标函数。
而另一个实施例中,与起始行号的处理方式类似,也可以采用依次遍历的方式确定目标函数,此处不再赘述。
可见,上述方案中,通过获取经补丁修改后的代码文件以及补丁所修改的代码对应的行号,并根据代码文件中各个函数的行号与补丁所修改的代码行号之间的关系,从而能够自动准确地定位到补丁影响的函数所在的位置(行号),无需人工寻找,从而有效降低人工成本,且相对于人工寻找更不易出错。而在定位到对应的函数所在的位置后,可以快速确定该函数的名称,以便在后续应用。
比如可以应用于补丁的存在性测试中,具体地,对于没有开放源代码的系统,为了确定其是否存在某个或某些漏洞,只能通过补丁存在性测试实现,也即通过检测代码中是否存在某个补丁,进而确定原先的代码中是否存在对应的漏洞。补丁存在性测试的一种方式是静态检测,其是通过分析程序中的代码文件和生成的目标文件等来检测是否打了某个补丁。其中,补丁通常用于增删代码中某些指定的行,而被修改(增删)的代码行通常位于某个函数中,也即代码补丁修改的内容通常都是函数。因此,为了知道被检测的对象(系统程序代码)是否打了某个或某些补丁(或称是否存在某个或某些漏洞),获取补丁修改的函数是必要步骤。也即,需要确定补丁修改的代码行包含在哪个函数中。
实际中,代码被编译过后,代码中的函数被编译成了一段连续的字节码存在于二进制目标文件的某个位置,我们需要分析这一段字节码来判断其是否存在漏洞,所以首要目标就是要找到该函数的位置。不同类型的二进制文件有不同的寻址方法,但是共同点是都可以通过函数名称来定位到该函数在二进制文件中的那一部分。因此需要首先获取函数的名称。
如果采用传统方案通过人工获取函数的名称,则需要较高人工成本,且可能出错,而如果采用本申请的方案,则可以自动定位到补丁影响的目标函数,从而无需人工获取,因此可以有效节省人工成本。同时相对于人工获取,也更不容易出错。
其中需要说明的是,实际应用中,单个补丁所修改的代码可能包括多行,因此,以上各实施例中所述的目标行号指的是单个补丁所修改的代码中的其中一行,当依次将补丁所修改的代码中的每一行的行号作为目标行号,并按照以上实施例的方法进行处理,即可定位到所有受到补丁影响的函数。
当然,通过函数的行号和某些指定行号,也可以在其他场景中定位其他函数,以便在后续处理中应用,具体不再一一详述。
示例性装置
与上述函数定位方法相对应地,本申请实施例还公开了一种函数定位装置,参见图6所示,该装置包括:获取模块100、确定模块110和筛选模块120;其中,
获取模块100用于,获取目标代码文件和目标行号;其中,目标代码文件为经补丁修改后的代码文件,目标行号为补丁所修改的代码对应的行号;
确定模块110用于,确定目标代码文件中的所有函数以及所有函数的特征行号;
筛选模块120用于,当特征行号为起始行号时,从目标代码文件的所有函数中,筛选出特征行号不大于目标行号并且与目标行号的差值的绝对值最小的函数,得到目标函数,目标函数包括补丁所修改的代码行。
本实施例的函数定位装置,通过获取模块100获取经补丁修改后的目标代码文件和补丁所修改的代码对应的目标行号;通过确定模块110确定目标代码文件中的所有函数以及所有函数的特征行号;以及,当特征行号为起始行号时,通过筛选模块120从目标代码文件的所有函数中,筛选出特征行号不大于目标行号并且与目标行号的差值的绝对值最小的函数,得到包括补丁所修改的代码行目标函数。如此设置,通过获取经补丁修改后的代码文件以及补丁所修改的代码对应的行号,并根据代码文件中各个函数的行号与补丁所修改的代码行号之间的关系,从而能够自动准确定位补丁影响的函数,无需人工寻找补丁影响的函数,从而有效降低人工成本,且相对于人工寻找更不易出错。
一些实施例中,筛选模块120还用于:
当特征行号为末尾行号时,从目标代码文件的所有函数中,筛选出特征行号不小于目标行号并且与目标行号的差值的绝对值最小的函数,得到目标函数,目标函数包括补丁所修改的代码行。
一些实施例中,确定模块110在确定目标代码文件中的所有函数以及所有函数的特征行号时,具体用于:
对目标代码文件进行解析处理,生成目标代码文件的抽象语法树;
从抽象语法树中选出节点类型为函数定义的所有节点,确定目标代码文件的所有函数;
根据抽象语法树中的节点类型为函数定义的各个节点的节点信息,确定目标代码文件的所有函数的起始行号。
一些实施例中,确定模块110还用于:
从抽象语法树中的节点类型为函数定义的各个节点的节点信息中,获取函数长度信息;
根据函数起始行号和函数长度信息,计算确定目标代码文件的所有函数的末尾行号。
一些实施例中,筛选模块120在从目标代码文件的所有函数中,筛选出特征行号不大于目标行号并且与目标行号的差值的绝对值最小的函数,得到目标函数时,具体用于:
通过将目标代码文件中的各个函数的特征行号与目标行号进行对比,从目标代码文件中选出候选函数,候选函数的特征行号小于或等于目标行号;
从候选函数中,确定出特征行号与目标行号的差值的绝对值最小的候选函数,得到目标函数。
一些实施例中,筛选模块120在从候选函数中,确定出特征行号与目标行号的差值的绝对值最小的候选函数,得到目标函数时,具体用于:
计算第一候选函数的特征行号与目标行号的差值的绝对值作为第一差值,以及,计算第二候选函数的特征行号与目标行号的差值的绝对值作为第二差值;
通过对比第一差值和第二差值的大小关系,从第一候选函数和第二候选函数中,选出特征行号与目标行号的差值的绝对值最小的函数,作为候选目标函数。
一些实施例中,筛选模块120在从目标代码文件的所有函数中,筛选出特征行号不小于目标行号并且与目标行号的差值的绝对值最小的函数,得到目标函数时,具体用于:
通过将目标代码文件中的各个函数的特征行号与目标行号进行对比,从目标代码文件中选出候选函数,候选函数的特征行号大于或等于目标行号;
从候选函数中,确定出特征行号与目标行号的差值的绝对值最小的候选函数,得到目标函数。
一些实施例中,筛选模块120在从候选函数中,确定出特征行号与目标行号的差值的绝对值最小的候选函数,得到目标函数时,具体用于:
计算第三候选函数的特征行号与目标行号的差值的绝对值作为第三差值,以及,计算第四候选函数的特征行号与目标行号的差值的绝对值作为第四差值;
通过对比第三差值和第四差值的大小关系,从第三候选函数和第四候选函数中,选出特征行号与目标行号的差值的绝对值最小的函数,作为候选目标函数。
具体地,上述的函数定位装置的各个模块的用途的具体实现方式,请参见上述方法实施例的内容,此处不再赘述。
示例性电子设备及存储介质
本申请一个实施例还提出一种电子设备,参见图7所示,该电子设备包括:
存储器200和处理器210;
其中,存储器200与处理器210连接,用于存储程序;
处理器210,用于通过运行存储器200中存储的程序,实现上述任一实施例公开的函数定位方法。
具体地,上述电子设备还可以包括:总线、通信接口220、输入设备230和输出设备240。
处理器210、存储器200、通信接口220、输入设备230和输出设备240通过总线相互连接。其中:
总线可包括一通路,在计算机系统各个部件之间传送信息。
处理器210可以是通用处理器,例如通用中央处理器(CPU)、微处理器等,也可以是特定应用集成电路(application-specific integrated circuit,ASIC),或一个或多个用于控制本申请方案程序执行的集成电路。还可以是数字信号处理器(DSP)、专用集成电路(ASIC)、现成可编程门阵列(FPGA)或者其他可编程逻辑器件、分立门或者晶体管逻辑器件、分立硬件组件。
处理器210可包括主处理器,还可包括基带芯片、调制解调器等。
存储器200中保存有执行本申请技术方案的程序,还可以保存有操作系统和其他关键业务。具体地,程序可以包括程序代码,程序代码包括计算机操作指令。更具体的,存储器200可以包括只读存储器(read-only memory,ROM)、可存储静态信息和指令的其他类型的静态存储设备、随机存取存储器(random access memory,RAM)、可存储信息和指令的其他类型的动态存储设备、磁盘存储器、flash等等。
输入设备230可包括接收用户输入的数据和信息的装置,例如键盘、鼠标、摄像头、扫描仪、光笔、语音输入装置、触摸屏、计步器或重力感应器等。
输出设备240可包括允许输出信息给用户的装置,例如显示屏、打印机、扬声器等。
通信接口220可包括使用任何收发器一类的装置,以便与其他设备或通信网络通信,如以太网,无线接入网(RAN),无线局域网(WLAN)等。
处理器210执行存储器200中所存放的程序,以及调用其他设备,可用于实现本申请上述实施例所提供的函数定位方法的各个步骤。
本申请另一实施例还提供了一种存储介质,该存储介质上存储有计算机程序,该计算机程序被处理器运行时,实现上述任一实施例提供的函数定位方法的各个步骤。
具体地,上述的电子设备以及上述的存储介质上的计算机程序被处理器运行时的具体处理内容,均可以参见上述的函数定位方法的各个实施例的内容,此处不再赘述。
对于前述的各方法实施例,为了简单描述,故将其都表述为一系列的动作组合,但是本领域技术人员应该知悉,本申请并不受所描述的动作顺序的限制,因为依据本申请,某些步骤可以采用其他顺序或者同时进行。其次,本领域技术人员也应该知悉,说明书中所描述的实施例均属于优选实施例,所涉及的动作和模块并不一定是本申请所必须的。
需要说明的是,本说明书中的各个实施例均采用递进的方式描述,每个实施例重点说明的都是与其他实施例的不同之处,各个实施例之间相同相似的部分互相参见即可。对于装置类实施例而言,由于其与方法实施例基本相似,所以描述的比较简单,相关之处参见方法实施例的部分说明即可。
本申请各实施例方法中的步骤可以根据实际需要进行顺序调整、合并和删减,各实施例中记载的技术特征可以进行替换或者组合。
本申请各实施例种装置及终端中的模块和子模块可以根据实际需要进行合并、划分和删减。
本申请所提供的几个实施例中,应该理解到,所揭露的终端,装置和方法,可以通过其它的方式实现。例如,以上所描述的终端实施例仅仅是示意性的,例如,模块或子模块的划分,仅仅为一种逻辑功能划分,实际实现时可以有另外的划分方式,例如多个子模块或模块可以结合或者可以集成到另一个模块,或一些特征可以忽略,或不执行。另一点,所显示或讨论的相互之间的耦合或直接耦合或通信连接可以是通过一些接口,装置或模块的间接耦合或通信连接,可以是电性,机械或其它的形式。
作为分离部件说明的模块或子模块可以是或者也可以不是物理上分开的,作为模块或子模块的部件可以是或者也可以不是物理模块或子模块,即可以位于一个地方,或者也可以分布到多个网络模块或子模块上。可以根据实际的需要选择其中的部分或者全部模块或子模块来实现本实施例方案的目的。
另外,在本申请各个实施例中的各功能模块或子模块可以集成在一个处理模块中,也可以是各个模块或子模块单独物理存在,也可以两个或两个以上模块或子模块集成在一个模块中。上述集成的模块或子模块既可以采用硬件的形式实现,也可以采用软件功能模块或子模块的形式实现。
专业人员还可以进一步意识到,结合本文中所公开的实施例描述的各示例的单元及算法步骤,能够以电子硬件、计算机软件或者二者的结合来实现,为了清楚地说明硬件和软件的可互换性,在上述说明中已经按照功能一般性地描述了各示例的组成及步骤。这些功能究竟以硬件还是软件方式来执行,取决于技术方案的特定应用和设计约束条件。专业技术人员可以对每个特定的应用来使用不同方法来实现所描述的功能,但是这种实现不应认为超出本申请的范围。
结合本文中所公开的实施例描述的方法或算法的步骤可以直接用硬件、处理器执行的软件单元,或者二者的结合来实施。软件单元可以置于随机存储器(RAM)、内存、只读存储器(ROM)、电可编程ROM、电可擦除可编程ROM、寄存器、硬盘、可移动磁盘、CD-ROM、或技术领域内所公知的任意其它形式的存储介质中。
最后,还需要说明的是,在本文中,诸如第一和第二等之类的关系术语仅仅用来将一个实体或者操作与另一个实体或操作区分开来,而不一定要求或者暗示这些实体或操作之间存在任何这种实际的关系或者顺序。而且,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、物品或者设备不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、物品或者设备所固有的要素。在没有更多限制的情况下,由语句“包括一个……”限定的要素,并不排除在包括所述要素的过程、方法、物品或者设备中还存在另外的相同要素。
对所公开的实施例的上述说明,使本领域专业技术人员能够实现或使用本申请。对这些实施例的多种修改对本领域的专业技术人员来说将是显而易见的,本文中所定义的一般原理可以在不脱离本申请的精神或范围的情况下,在其它实施例中实现。因此,本申请将不会被限制于本文所示的这些实施例,而是要符合与本文所公开的原理和新颖特点相一致的最宽的范围。

Claims (10)

1.一种函数定位方法,其特征在于,包括:
获取目标代码文件和目标行号;其中,所述目标代码文件为经补丁修改后的代码文件,所述目标行号为补丁所修改的代码对应的行号;
确定所述目标代码文件中的所有函数以及所有函数的特征行号;
当所述特征行号为起始行号时,从所述目标代码文件的所有函数中,筛选出特征行号不大于所述目标行号并且与所述目标行号的差值的绝对值最小的函数,得到目标函数,所述目标函数包括所述补丁所修改的代码行。
2.根据权利要求1所述的方法,其特征在于,所述方法还包括:
当所述特征行号为末尾行号时,从所述目标代码文件的所有函数中,筛选出特征行号不小于所述目标行号并且与所述目标行号的差值的绝对值最小的函数,得到目标函数,所述目标函数包括所述补丁所修改的代码行。
3.根据权利要求1所述的方法,其特征在于,确定所述目标代码文件中的所有函数以及所有函数的特征行号,包括:
对所述目标代码文件进行解析处理,生成所述目标代码文件的抽象语法树;
从所述抽象语法树中选出节点类型为函数定义的所有节点,确定所述目标代码文件的所有函数;
根据所述抽象语法树中的节点类型为函数定义的各个节点的节点信息,确定所述目标代码文件的所有函数的起始行号。
4.根据权利要求3所述的方法,其特征在于,所述方法还包括:
从所述抽象语法树中的节点类型为函数定义的各个节点的节点信息中,获取函数长度信息;
根据函数起始行号和函数长度信息,计算确定所述目标代码文件的所有函数的末尾行号。
5.根据权利要求1所述的方法,其特征在于,从所述目标代码文件的所有函数中,筛选出特征行号不大于所述目标行号并且与所述目标行号的差值的绝对值最小的函数,得到目标函数,包括:
通过将所述目标代码文件中的各个函数的特征行号与所述目标行号进行对比,从所述目标代码文件中选出候选函数,所述候选函数的特征行号小于或等于所述目标行号;
从所述候选函数中,确定出特征行号与所述目标行号的差值的绝对值最小的候选函数,得到目标函数。
6.根据权利要求5所述的方法,其特征在于,从所述候选函数中,确定出特征行号与所述目标行号的差值的绝对值最小的候选函数,得到目标函数,包括:
计算第一候选函数的特征行号与所述目标行号的差值的绝对值作为第一差值,以及,计算第二候选函数的特征行号与所述目标行号的差值的绝对值作为第二差值;
通过对比所述第一差值和所述第二差值的大小关系,从所述第一候选函数和所述第二候选函数中,选出特征行号与所述目标行号的差值的绝对值最小的函数,作为候选目标函数。
7.根据权利要求2所述的方法,其特征在于,从所述目标代码文件的所有函数中,筛选出特征行号不小于所述目标行号并且与所述目标行号的差值的绝对值最小的函数,得到目标函数,包括:
通过将所述目标代码文件中的各个函数的特征行号与所述目标行号进行对比,从所述目标代码文件中选出候选函数,所述候选函数的特征行号大于或等于所述目标行号;
从所述候选函数中,确定出特征行号与所述目标行号的差值的绝对值最小的候选函数,得到目标函数。
8.根据权利要求7所述的方法,其特征在于,从所述候选函数中,确定出特征行号与所述目标行号的差值的绝对值最小的候选函数,得到目标函数,包括:
计算第三候选函数的特征行号与所述目标行号的差值的绝对值作为第三差值,以及,计算第四候选函数的特征行号与所述目标行号的差值的绝对值作为第四差值;
通过对比所述第三差值和所述第四差值的大小关系,从所述第三候选函数和所述第四候选函数中,选出特征行号与所述目标行号的差值的绝对值最小的函数,作为候选目标函数。
9.一种函数定位装置,其特征在于,包括:
获取模块,用于获取目标代码文件和目标行号;其中,所述目标代码文件为经补丁修改后的代码文件,所述目标行号为补丁所修改的代码对应的行号;
确定模块,用于确定所述目标代码文件中的所有函数以及所有函数的特征行号;
筛选模块,用于当所述特征行号为起始行号时,从所述目标代码文件的所有函数中,筛选出特征行号不大于所述目标行号并且与所述目标行号的差值的绝对值最小的函数,得到目标函数,所述目标函数包括所述补丁所修改的代码行。
10.一种电子设备,其特征在于,包括:
存储器和处理器;
其中,所述存储器用于存储程序;
所述处理器,用于通过运行所述存储器中的程序,实现如权利要求1至8中任意一项所述的函数定位方法。
CN202210908155.XA 2022-07-29 2022-07-29 一种函数定位方法、装置和电子设备 Pending CN115437685A (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN202210908155.XA CN115437685A (zh) 2022-07-29 2022-07-29 一种函数定位方法、装置和电子设备

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN202210908155.XA CN115437685A (zh) 2022-07-29 2022-07-29 一种函数定位方法、装置和电子设备

Publications (1)

Publication Number Publication Date
CN115437685A true CN115437685A (zh) 2022-12-06

Family

ID=84242193

Family Applications (1)

Application Number Title Priority Date Filing Date
CN202210908155.XA Pending CN115437685A (zh) 2022-07-29 2022-07-29 一种函数定位方法、装置和电子设备

Country Status (1)

Country Link
CN (1) CN115437685A (zh)

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN117806832A (zh) * 2024-02-26 2024-04-02 北京搜狐新媒体信息技术有限公司 一种提升模型训练速度的方法、系统、设备及存储介质

Cited By (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN117806832A (zh) * 2024-02-26 2024-04-02 北京搜狐新媒体信息技术有限公司 一种提升模型训练速度的方法、系统、设备及存储介质
CN117806832B (zh) * 2024-02-26 2024-06-04 北京搜狐新媒体信息技术有限公司 一种提升模型训练速度的方法、系统、设备及存储介质

Similar Documents

Publication Publication Date Title
US11048798B2 (en) Method for detecting libraries in program binaries
CN106815135B (zh) 漏洞检测方法及装置
CN114491566B (zh) 一种基于代码相似性的模糊测试方法、装置及存储介质
CN113835713B (zh) 源码包下载方法、装置、计算机设备和存储介质
CN113946546B (zh) 异常检测方法、计算机存储介质及程序产品
CN111338622B (zh) 供应链代码识别方法、装置、服务器及可读存储介质
CN115437685A (zh) 一种函数定位方法、装置和电子设备
CN113268439A (zh) 内存地址的查找方法和装置、电子设备和存储介质
CN111124480A (zh) 应用程序包的生成方法、装置、电子设备及存储介质
CN113515464B (zh) 基于linux系统的蜜罐测试方法及装置
CN115729555A (zh) 软件成分分析方法、装置、终端设备以及存储介质
CN112463596B (zh) 测试用例数据的处理方法、装置、设备以及处理设备
CA3138761A1 (en) Method, device, computer equipment and storage medium for verifying inter-system data admission
CN111191235B (zh) 可疑文件分析方法、装置和计算机可读存储介质
CN110442353B (zh) 一种安装包管理的方法、装置及电子设备
CN110244954B (zh) 一种应用程序的编译方法及设备
JP7318704B2 (ja) テスト装置、テスト方法及びプログラム
CN109560964B (zh) 一种设备合规检查方法及装置
CN112711419A (zh) 一种数据比对方法及装置
CN111736848B (zh) 包冲突定位方法、装置、电子设备及可读存储介质
US9069892B2 (en) Reducing false-positive errors in a software change-impact analysis
CN113486359B (zh) 软件漏洞的检测方法、装置、电子装置和存储介质
CN114417347A (zh) 应用程序的漏洞检测方法、装置、设备、存储介质和程序
CN113946516A (zh) 代码覆盖率确定方法、装置及存储介质
CN112748945B (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