CN116340942A - 一种基于对象传播图和指针分析的函数调用图构建方法 - Google Patents

一种基于对象传播图和指针分析的函数调用图构建方法 Download PDF

Info

Publication number
CN116340942A
CN116340942A CN202310185670.4A CN202310185670A CN116340942A CN 116340942 A CN116340942 A CN 116340942A CN 202310185670 A CN202310185670 A CN 202310185670A CN 116340942 A CN116340942 A CN 116340942A
Authority
CN
China
Prior art keywords
pointer
function
propagation
graph
analysis
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
CN202310185670.4A
Other languages
English (en)
Other versions
CN116340942B (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.)
Ruan'an Technology Co ltd
Original Assignee
Ruan'an 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 Ruan'an Technology Co ltd filed Critical Ruan'an Technology Co ltd
Priority to CN202310185670.4A priority Critical patent/CN116340942B/zh
Publication of CN116340942A publication Critical patent/CN116340942A/zh
Application granted granted Critical
Publication of CN116340942B publication Critical patent/CN116340942B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Classifications

    • 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/55Detecting local intrusion or implementing counter-measures
    • G06F21/56Computer malware detection or handling, e.g. anti-virus arrangements
    • G06F21/562Static detection
    • G06F21/563Static detection by source code analysis
    • YGENERAL 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
    • Y02TECHNOLOGIES OR APPLICATIONS FOR MITIGATION OR ADAPTATION AGAINST CLIMATE CHANGE
    • Y02DCLIMATE 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/00Energy efficient computing, e.g. low power processors, power management or thermal management

Landscapes

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

Abstract

本发明涉及一种基于对象传播图的指针分析的函数调用图构建方法,其一边建立值传播图一边在值传播图上传播对象的流动信息,循环地处理值的流动过程。最后通过每个函数调用指针的对象指向信息,就能建立相对准确的函数调用关系图。本发明基于待分析代码的特性,折中选择处理C++虚函数调用、堆使用(malloc,new等系统调用)、域对象较多使用的情况,减少传统指针分析的计算处理规模,提升分析效率。对重点分析的堆使用采用代码分配点方法建模,域对象采用域敏感的方法建模,提升关键部分的分析精度。此方法为精度和效率的折中,根据待分析代码的特性,部分采用指针分析方法和对关键分析内容进行建模产生较为精确的函数调用关系图。

Description

一种基于对象传播图和指针分析的函数调用图构建方法
技术领域
本发明涉及软件分析技术领域,尤其涉及一种基于对象传播图和指针分析的函数调用图构建方法。
背景技术
在C++语言中,因为有面向对象多态技术,通过代码静态分析建立函数调用关系图有困难,即需要先知道指针的指向对象类型才能确定真正调用到的方法;指针分析即通过静态分析手段,分析代码程序动态运行过程中指针可能的指向关系的方法,指向关系包括指针所指的对象类型,所指的对象是否同一等信息;此信息对静态分析方法中的很多技术都有影响,更准确的指针分析结果能提升其他依赖指针信息的分析的精度与效率。因为指针指向的对象信息是程序运行期的信息,但静态分析技术是不运行代码的,其通过分析代码静态文本找到代码的相关特征,这意味着指针分析需要一定程度上模拟代码的运行过程,对运行期的动态特征进行一定程度的抽象建模,才能获取和描述指针信息。
传统的构造函数调用图处理虚函数调用第一种方法是倾向于简单分析,即简单认为所有的虚函数调用都可达,或者所有的虚函数调用都不可达,但真实的运行情况是只有一个虚函数可达,这会让生成的函数调用图在所以的虚函数调用点都丢失精度;第二种方法是利用传统的指针分析技术进行较精确分析,例如Anderson指针分析方法,把全部的指针指向关系转换为约束关系,利用约束求解方法得出指向结果。此方法的时间复杂度为O{n3},在被分析代码量很大的情况下计算量大,耗时较长。
需要说明的是,在上述背景技术部分公开的信息只用于加强对本公开的背景的理解,因此可以包括不构成对本领域普通技术人员已知的现有技术的信息。
发明内容
本发明的目的在于克服现有技术的缺点,提供了一种基于对象传播图和指针分析的函数调用图构建方法,解决了传统的构造函数调用图方法存在的不足。
本发明的目的通过以下技术方案来实现:一种基于对象传播图和指针分析的函数调用图构建方法,所述函数调用图构建方法包括:
S1、分析程序的源代码,得到从主函数开始的输出为函数间的调用关系图,并对此函数进行分析;
S2、获取此函数中的所有创建对象语句,记录为最初始创建的指向关系列表;
S3、从上到下依次获取此函数中的赋值语句,描述指针对象的传播关系,构建对象传播图,为赋值的来源方和接收方建立一个有向边,且来源方指向接收方,取出来源方的指向关系表,把来源方的指向关系沿着对象传播图向后传播,直到传播到所有路径上;
S4、从上到下依次处理此函数中的对象域为左值的赋值语句,以及对象域为右值的赋值语句,并构建对象传播图,并考虑对象域的指向关系;
S5、从上到下依次获取此函数中所有函数调用语句,对于虚函数调用,根据得到调用函数的对象信息,以及面向对象特性取出对应函数,建立调用边,对于非虚函数调用,则直接建立调用边,并把被调函数加入待分析函数列表;
S6、此函数分析完毕后,从待分析函数列表中取出第一个函数,并重复步骤S2-S5,直到待分析函数列表中所有函数都分析完毕。
所述对象传播图中的节点为C++程序代码中的指针变量名,有向边为指针变量间的赋值关系,每个节点的值为一个对象集合,表明指针变量持有的所有对应集合,且根据赋值语句语义这个对象集合会沿着对象传播图中的边传播。
所述构建对象传播图具体包括以下内容:
A1、找出代码中所有的指针变量名集合;
A2、找出代码中所有的指针变量名赋值语句,并在两个指针变量名之间构建一条对象传播边;
A3、把每个指针变量名持有的对象集合沿两个指针变量名之间的传播边进行传播,直到所有路径都被覆盖;
A4、当两个指针变量名之间传播存在域指针时,在后向指针变量名指向的对象集合确定后,在分析域指针,每次后向指针变量名指向的对象集合更新后,再创建更新了的对象集合的域指针的传播边,再沿更新的传播边传播对象集合,如果后续传播后存在更新的域指针传播边建立,则继续循环传播,直到没有更新的域指针传播边建立后则停止。
在步骤S3到步骤S4的传播过程中,需要把指向信息不断传播知道所有可达传播边传播完毕,同时在传播过程中如果多个指针变量名之间的传播形成传播闭环时,仅把新增的指向关系传播下去即可。
在步骤S1中只分析真正可达的函数,因此分析C++程序中通过main函数可达的所有函数列表;为了降低代码运行过程中函数每次被调用时生成的对象不同而增加的计算量,在步骤S2中通过创建对象语句作为所有对象的来源,在代码同一位置用同一对象表示,以快速分析对象之间的传播关系。
在步骤S5中处理虚函数调用时,在得到指针指向信息后根据所指对象的类型信息得到真正调用到的虚函数,即可得到指针指向的对象的类型,进而确定真正调用的函数;步骤S6中在待分析函数列表中加入去重逻辑,对已经分析过的同一函数不再进行分析,列表分析完毕后,即所有通过main函数可达的函数完成分析,进而完成代码程序分析。
本发明具有以下优点:一种基于对象传播图和指针分析的函数调用图构建方法,基于待分析代码的特性,折中选择处理C++虚函数调用、堆使用(malloc,new等系统调用)、域对象较多使用的情况,减少传统指针分析的计算处理规模,提升分析效率。对重点分析的堆使用采用代码分配点方法建模,域对象采用域敏感的方法建模,提升关键部分的分析精度。此方法为精度和效率的折中,根据待分析代码的特性,部分采用指针分析方法和对关键分析内容进行建模产生较为精确的函数调用关系图。
附图说明
图1为本发明的流程示意图;
图2为采用示例中的面向对象类继承关系示意图。
具体实施方式
为使本申请实施例的目的、技术方案和优点更加清楚,下面将结合本申请实施例中附图,对本申请实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本申请一部分实施例,而不是全部的实施例。通常在此处附图中描述和示出的本申请实施例的组件可以以各种不同的配置来布置和设计。因此,以下结合附图中提供的本申请的实施例的详细描述并非旨在限制要求保护的本申请的保护范围,而是仅仅表示本申请的选定实施例。基于本申请的实施例,本领域技术人员在没有做出创造性劳动的前提下所获得的所有其他实施例,都属于本申请保护的范围。下面结合附图对本发明做进一步的描述。
本发明具体涉及一种基于对象传播图和指针分析方法在C++代码中构建函数调用图的方法,其一边建立值传播图一边在值传播图上传播对象的流动信息,循环地处理值的流动过程。最后通过每个函数调用指针的对象指向信息,就能建立相对准确的函数调用关系图。
如图1所示,具体方法包括以下内容:
S1、需要分析的内容是程序的源代码,得到的输出是函数间的调用关系图从主函数开始,对此函数进行分析;该步骤中只分析真正可达的函数,因为C++中程序都以main函数开始,我们就分析通过main函数可达的所有函数列表。
S2、取出此函数中的所有创建对象语句,此为所有对象的来源,记录此信息为最初始创建的指向关系列表;
S3、从上到下依次取出此函数中的赋值语句,此描述了一个指针对象的传播关系,构建对象传播图,为赋值的来源方和接收方建立一个有向边,来源方指向接收方。取出来源方的指向关系列表,把来源方的指向关系沿着对象传播图往后传播,直到传播到所有可能的路径上;
S4、从上到下依次处理此函数中的对象域为左值的赋值语句,以及对象域为右值的赋值语句,同样构建对象传播图,此处需要考虑对象域的指向关系;
S5、从上到下依次取出此函数中所有函数调用语句,对于虚函数调用此时我们已得到调用函数的对象信息,根据面向对象特性取出对应函数,建立调用边、对于非虚函数调用,直接建立调用边即可,并且把被调函数加入待分析函数列表;
S6、此函数分析完毕后,从待分析函数列表中取出第一个函数,重复S2开始的步骤,直到待分析函数列表中所有函数都已经分析完毕,分析结束。
对象传播图中的节点为C++代码中的指针变量名,有向边为指针变量间的赋值关系,每个节点的值为一个对象集合,表明这个指针变量可能持有的所有对象集合,并且根据赋值语句语义这个对象集合会沿着对象传播图中的边传播,所以构建的步骤包括:
A1、找出代码中所有的指针变量名集合,比如第一行代码Base*a=new(Derived1),a即为一个指针,把它所有可能指向的对象当成一个集合,此语句即把new(Derived1)对象加入集合中;
A2、找出代码中所有的指针变量名赋值操作,构建图中的边,比如代码b=a为例,a到b构建一条对象传播边;
A3、把每个节点(指针变量名)持有的对象集合沿边传播出去,直到所有路径都覆盖到,比如上例中把a指向的对象传播给b;
A4、针对域指针的情况,比如代码c->f=b,需注意f域是属于c这个指针变量名所指的对象的,即需在c这个指针变量名指向的对象集合确定后,才能分析f这个域指针。所以每次c指向的对象集合更新后,再创建这些更新了的对象集合的f域的传播边,再沿新边传播对象集合,这次传播之后可能又有新的域边可建立,继续循环传播,直到没有新边可建立才完全停止,所以这是一个循环建立图,沿图传播对象集合,直到所有可能的边和对象集合都更新完成的过程。
进一步地,在步骤S2处理创建对象语句,作为所有对象的来源,目的是分析这些对象的传播关系,因为代码真正运行过程中函数可能会被多次调用,每次调用生成的对象不同,这会增加我们的计算成本。因此进行一个抽象表示,即在代码同一位置我们只以同一个对象表示,比如:main函数中第3行是一个创建对象语句:Base*a=new(Derived1),将此对象描述为:<main:3,Derived1(类型信息)>,并记录在指向关系列表中:
指针 对象
main:a <main:3,Derived1(类型信息)>
步骤S3为处理最简单的赋值语句,例如:b=a,此为对象的传播语句,表明a指针指向的对象传播到b指针的指向关系中,此例分析完毕后的指向关系列表中数据为:
指针 对象
main:a <main:3,Derived1(类型信息)>
main:b <main:3,Derived1(类型信息)>
main:c <main:5,Derived2(类型信息)>
步骤S4对象域为左值的赋值语句形如c->f=b;此跟S3步骤的不同在于此指针为另一个对象的一个域,在此例中就是c->f这个域依赖于c指针的指向关系。要先得到c指针的指向关系,才能建立c->f的传播图和指向关系列表。这也是此步骤排在S3之后的原因。此指向关系不能由上表描述,而要加入新的域关系,描述为:
对象 对象
<main:5,Derived2(类型信息)> f <main:3,Derived1(类型信息)>
表示:main:5这个对象的域f指向另一个对象main:3。
步骤S4的下半部分为对象域为右值的赋值语句;例如:Base*e=c->f,根据上两表可查得指针c指向对象main:5,根据下表查得main:5的f域指向main:3这个对象,所以我们把这个对象加到e(c++代码示例)这个指针的指向关系表中:
指针 对象
main:a <main:3,Derived1(类型信息)>
main:b <main:3,Derived1(类型信息)>
main:c <main:5,Derived2(类型信息)>
main:e <main:3,Derived1(类型信息)>
步骤S5处理虚函数调用,在上述步骤得到指针指向信息之后,我们能根据所指对象的类型信息得到真正调用到的虚函数,此为面向对象语言多态的特性,即知道指针指向的对象的类型就能确定真正调用的函数。
步骤S6函数列表要加入去重逻辑,即已经分析过的同一函数不用再次分析。列表分析完毕后,即所有通过main函数可达的函数都分析完毕了,完成了全代码的分析。
如图2所示,以一个例子来说明具体的实施方式,比如要分析的代码如下:
Figure BDA0004103707300000081
先分析main函数,执行S2步骤得到最初始的对象指向关系,以列表展示为:
Figure BDA0004103707300000082
Figure BDA0004103707300000091
根据步骤S3,再分析全部的赋值语句,以第4行代码A*a3=a1为例,其传播关系为a1指向a3;再把上游的对象指向关系沿边传播到下游,直到所有路径都传播完毕,并且把这些指向关系都加入对象指向关系列表中。
根据步骤S4,再处理所有域为左值的情况,比如第6行d1->f=a1,注意此处的指针为一个域,是d1指向对象main:5的域,而不是d1的域。所以要先找到d1指向的对象信息,根据表关系可查到为<main:5,D>,建立传播图并把域指向关系保存到域对象关系表中:
对象 对象
<main:5,D> f <main:2,B>
然后就可以处理域为右值的情况,用S5步骤处理第7行代码A*a4=d1->f;根据对象指向表可以查询到,d1指向的对象为main5,把此传播边加上,再把对象沿此路径传播。
最后以步骤S5处理虚函数调用的情况,查询生成的对象指向表和域指向表,可知道所有的指针可能的指向对象情况,根据面向对象语言的虚函数调用特性,能得到更为准确的函数调用图;在指针分析之前只能加上指针所有可能的指向关系,增加不准确的函数调用关系,在指针分析后,更准确的指针指向关系能生成更准确的函数调用关系。
然后按S6步骤继续依次处理被调用到的函数,也就是B::func和C::func,此时的分析过程跟分析main函数是一致的。加上被分析函数去重逻辑,所以函数分析完毕后,整个分析过程完毕,此时得到了完整的函数调用关系图。
存在一种场景是11行a5->f=a1,上一个场景是传播边建立完成,只需要把所有后续可达边全部非重复值传播完毕。这种场景是a5->f的边建立依赖a5的指向关系,在指向关系完成前没有办法添加域的指向边。所以每次域的对象指向关系更新后,意味着有新的域边建立,如a5的指向关系a5--><main:2,B>更新后,<其他1>--><main:2,B>->f--><其他2>的指向关系能被添加上。需要把这些域相关的新边都添加上,并且持续传播直到没有新的域边建立,并且完整传播完毕。
本发明通过模拟建模的方式表征程序运行期的状态等信息,即并不是完整地模拟了程序动态运行期的所有指针可能情况。程序真实运行内存中每一个函数调用都会开辟不同的栈帧,并且会访问公共的堆区和全局静态区。所以每一个函数调用的内存情况都不尽相同,本发明把这全部的状态信息称为一个函数调用的上下文信息。此处考虑精度跟效率的权衡并没有区分每个函数调用的上下文,为了更高的精度我们也能在现有的实现上考虑上上下文信息,比如基于克隆的上下文敏感分析,在每一个函数调用点都新复制一份上下文信息,比如之前的内存建模为<函数名:代码行号>,现在加上上下文信息为<调用点上下文:函数名:代码行号>,然后增加根据之前的函数调用的上下文信息选择后续函数调用上下文选择的方法。即可基于此实现上下文敏感的分析。这会显著提升分析的空间跟时间资源消耗,此为精度跟效率的取舍,在有更高精度要求时可以考虑加上上下文敏感信息。本发明不会区分语句执行的先后顺序,大大简化了分析的实现,在C++中也大量采用了此分析方式。
以上所述仅是本发明的优选实施方式,应当理解本发明并非局限于本文所披露的形式,不应看作是对其他实施例的排除,而可用于各种其他组合、修改和环境,并能够在本文所述构想范围内,通过上述教导或相关领域的技术或知识进行改动。而本领域人员所进行的改动和变化不脱离本发明的精神和范围,则都应在本发明所附权利要求的保护范围内。

Claims (6)

1.一种基于对象传播图和指针分析的函数调用图构建方法,其特征在于:所述函数调用图构建方法包括:
S1、分析程序的源代码,得到从主函数开始的输出为函数间的调用关系图,并对此函数进行分析;
S2、获取此函数中的所有创建对象语句,记录为最初始创建的指向关系列表;
S3、从上到下依次获取此函数中的赋值语句,描述指针对象的传播关系,构建对象传播图,为赋值的来源方和接收方建立一个有向边,且来源方指向接收方,取出来源方的指向关系表,把来源方的指向关系沿着对象传播图向后传播,直到传播到所有路径上;
S4、从上到下依次处理此函数中的对象域为左值的赋值语句,以及对象域为右值的赋值语句,并构建对象传播图,并考虑对象域的指向关系;
S5、从上到下依次获取此函数中所有函数调用语句,对于虚函数调用,根据得到调用函数的对象信息,以及面向对象特性取出对应函数,建立调用边,对于非虚函数调用,则直接建立调用边,并把被调函数加入待分析函数列表;
S6、此函数分析完毕后,从待分析函数列表中取出第一个函数,并重复步骤S2-S5,直到待分析函数列表中所有函数都分析完毕。
2.根据权利要求1所述的一种基于对象传播图和指针分析的函数调用图构建方法,其特征在于:所述对象传播图中的节点为C++程序代码中的指针变量名,有向边为指针变量间的赋值关系,每个节点的值为一个对象集合,表明指针变量持有的所有对应集合,且根据赋值语句语义这个对象集合会沿着对象传播图中的边传播。
3.根据权利要求2所述的一种基于对象传播图和指针分析的函数调用图构建方法,其特征在于:所述构建对象传播图具体包括以下内容:
A1、找出代码中所有的指针变量名集合;
A2、找出代码中所有的指针变量名赋值语句,并在两个指针变量名之间构建一条对象传播边;
A3、把每个指针变量名持有的对象集合沿两个指针变量名之间的传播边进行传播,直到所有路径都被覆盖;
A4、当两个指针变量名之间传播存在域指针时,在后向指针变量名指向的对象集合确定后,在分析域指针,每次后向指针变量名指向的对象集合更新后,再创建更新了的对象集合的域指针的传播边,再沿更新的传播边传播对象集合,如果后续传播后存在更新的域指针传播边建立,则继续循环传播,直到没有更新的域指针传播边建立后则停止。
4.根据权利要求3所述的一种基于对象传播图和指针分析的函数调用图构建方法,其特征在于:在步骤S3到步骤S4的传播过程中,需要把指向信息不断传播知道所有可达传播边传播完毕,同时在传播过程中如果多个指针变量名之间的传播形成传播闭环时,仅把新增的指向关系传播下去即可。
5.根据权利要求1所述的一种基于对象传播图和指针分析的函数调用图构建方法,其特征在于:在步骤S1中只分析真正可达的函数,因此分析C++程序中通过main函数可达的所有函数列表;为了降低代码运行过程中函数每次被调用时生成的对象不同而增加的计算量,在步骤S2中通过创建对象语句作为所有对象的来源,在代码同一位置用同一对象表示,以快速分析对象之间的传播关系。
6.根据权利要求1所述的一种基于对象传播图和指针分析的函数调用图构建方法,其特征在于:在步骤S5中处理虚函数调用时,在得到指针指向信息后根据所指对象的类型信息得到真正调用到的虚函数,即可得到指针指向的对象的类型,进而确定真正调用的函数;步骤S6中在待分析函数列表中加入去重逻辑,对已经分析过的同一函数不再进行分析,列表分析完毕后,即所有通过main函数可达的函数完成分析,进而完成代码程序分析。
CN202310185670.4A 2023-03-01 2023-03-01 一种基于对象传播图和指针分析的函数调用图构建方法 Active CN116340942B (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN202310185670.4A CN116340942B (zh) 2023-03-01 2023-03-01 一种基于对象传播图和指针分析的函数调用图构建方法

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN202310185670.4A CN116340942B (zh) 2023-03-01 2023-03-01 一种基于对象传播图和指针分析的函数调用图构建方法

Publications (2)

Publication Number Publication Date
CN116340942A true CN116340942A (zh) 2023-06-27
CN116340942B CN116340942B (zh) 2024-04-30

Family

ID=86883138

Family Applications (1)

Application Number Title Priority Date Filing Date
CN202310185670.4A Active CN116340942B (zh) 2023-03-01 2023-03-01 一种基于对象传播图和指针分析的函数调用图构建方法

Country Status (1)

Country Link
CN (1) CN116340942B (zh)

Citations (9)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US6044224A (en) * 1996-06-26 2000-03-28 Sun Microsystems, Inc. Mechanism for dynamically associating a service dependent representation with objects at run time
CN101377806A (zh) * 2008-07-24 2009-03-04 江苏大学 一种基于系统源代码搜索隐通道的信息流分析方法
CN103473400A (zh) * 2013-08-27 2013-12-25 北京航空航天大学 基于层次依赖建模的软件fmea方法
CN104331368A (zh) * 2014-11-18 2015-02-04 合肥康捷信息科技有限公司 一种基于cfg文件静态分析C++虚函数调用的方法
CN106933645A (zh) * 2017-01-17 2017-07-07 深圳市能信安科技股份有限公司 一种Apk安全风险自动化静态审计系统以及方法
CN107368742A (zh) * 2017-08-16 2017-11-21 南京大学 基于gcc的细粒度虚函数表劫持攻击防御方法
CN110187988A (zh) * 2019-06-06 2019-08-30 中国科学技术大学 适用于虚函数和函数指针的静态函数调用图构建方法
CN114527963A (zh) * 2020-11-23 2022-05-24 中国科学院信息工程研究所 C++二进制文件中的类继承关系识别方法及电子装置
CN115510430A (zh) * 2022-09-15 2022-12-23 武汉大学 一种函数指针及其数据依赖的识别与保护方法、装置

Patent Citations (9)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US6044224A (en) * 1996-06-26 2000-03-28 Sun Microsystems, Inc. Mechanism for dynamically associating a service dependent representation with objects at run time
CN101377806A (zh) * 2008-07-24 2009-03-04 江苏大学 一种基于系统源代码搜索隐通道的信息流分析方法
CN103473400A (zh) * 2013-08-27 2013-12-25 北京航空航天大学 基于层次依赖建模的软件fmea方法
CN104331368A (zh) * 2014-11-18 2015-02-04 合肥康捷信息科技有限公司 一种基于cfg文件静态分析C++虚函数调用的方法
CN106933645A (zh) * 2017-01-17 2017-07-07 深圳市能信安科技股份有限公司 一种Apk安全风险自动化静态审计系统以及方法
CN107368742A (zh) * 2017-08-16 2017-11-21 南京大学 基于gcc的细粒度虚函数表劫持攻击防御方法
CN110187988A (zh) * 2019-06-06 2019-08-30 中国科学技术大学 适用于虚函数和函数指针的静态函数调用图构建方法
CN114527963A (zh) * 2020-11-23 2022-05-24 中国科学院信息工程研究所 C++二进制文件中的类继承关系识别方法及电子装置
CN115510430A (zh) * 2022-09-15 2022-12-23 武汉大学 一种函数指针及其数据依赖的识别与保护方法、装置

Non-Patent Citations (1)

* Cited by examiner, † Cited by third party
Title
衷璐洁 等: "基于传播引擎的指针引用错误检测", 计算机学报, vol. 36, no. 02, 15 February 2013 (2013-02-15), pages 432 - 444 *

Also Published As

Publication number Publication date
CN116340942B (zh) 2024-04-30

Similar Documents

Publication Publication Date Title
Khakabimamaghani et al. QuateXelero: an accelerated exact network motif detection algorithm
CN107729227B (zh) 应用程序测试范围确定方法、系统、服务器和存储介质
CN111104335B (zh) 一种基于多层次分析的c语言缺陷检测方法及装置
CN111124379B (zh) 页面生成方法、装置、电子设备及存储介质
CN108469955B (zh) 一种基于注解的Android注入框架实现方法
CN116028025A (zh) 一种汽车服务化模型框架生成方法、装置、设备及介质
CN110784507B (zh) 人口信息数据的融合方法及系统
US8996922B2 (en) Mixed numeric and string constraint analysis
CN112860264B (zh) 一种抽象语法树重构方法及装置
CN113791768A (zh) 代码生成方法及装置、存储介质、终端
CN116340942B (zh) 一种基于对象传播图和指针分析的函数调用图构建方法
CN110941655A (zh) 一种数据格式转换方法及装置
US20090064092A1 (en) Visual programming language optimization
CN115270731A (zh) 混合文档的协同编辑方法及装置
EP4290365A2 (en) A streaming compiler for automatic adjoint differentiation
CN113806205A (zh) 软件性能测试方法、装置、电子设备及可读存储介质
CN111796806B (zh) 生成对象的方法、装置、电子设备及可读存储介质
CN115291889B (zh) 一种数据血缘关系建立方法、装置及电子设备
CN117112847B (zh) 一种基于社区模型的图数据库的数据生成方法及装置
JP3166699B2 (ja) オブジェクト指向プログラム設計支援装置、方法および記録媒体
CN112925564B (zh) 一种源代码的冗余导入类清理方法及装置
Abi-Antoun et al. Are Object Graphs Extracted Using Abstract Interpretation Significantly Different from the Code?
WO2022156056A1 (zh) 基于程序源码切片重组的软件动态更新热补丁合成方法
US10241904B2 (en) Test components factorization in a build system
CN105550285A (zh) 构建poi词典的方法及装置

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