WO2022036783A1 - 一种c语言的指针类型分析方法 - Google Patents

一种c语言的指针类型分析方法 Download PDF

Info

Publication number
WO2022036783A1
WO2022036783A1 PCT/CN2020/114972 CN2020114972W WO2022036783A1 WO 2022036783 A1 WO2022036783 A1 WO 2022036783A1 CN 2020114972 W CN2020114972 W CN 2020114972W WO 2022036783 A1 WO2022036783 A1 WO 2022036783A1
Authority
WO
WIPO (PCT)
Prior art keywords
pointer
type
mapping
field
init
Prior art date
Application number
PCT/CN2020/114972
Other languages
English (en)
French (fr)
Inventor
杨昱天
申文博
周亚金
任奎
Original Assignee
浙江大学
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 浙江大学 filed Critical 浙江大学
Publication of WO2022036783A1 publication Critical patent/WO2022036783A1/zh

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/36Preventing errors by testing or debugging software
    • G06F11/3604Software analysis for verifying properties of programs

Definitions

  • the invention relates to the field of computer program analysis, in particular to a C language pointer type analysis method.
  • C language is widely used because of its fast running speed and rich program library.
  • Many high-performance software are written in C language, such as Linux/Windows operating system kernel, compiler, database and embedded system applications. These software provide the basic environment and basic functions for other applications, and constitute the infrastructure of the computer system, so they have a very wide deployment range and high importance.
  • Linux/Windows operating system kernel such as Linux/Windows operating system kernel, compiler, database and embedded system applications.
  • These software provide the basic environment and basic functions for other applications, and constitute the infrastructure of the computer system, so they have a very wide deployment range and high importance.
  • the Android operating system one of the applications of the Linux kernel, as an example, as of May 2019, Google issued a statement saying that the number of global users of the Android system has reached 2.5 billion. With such a wide range of deployments, it is increasingly important to ensure the correctness and stability of C language programs.
  • the static analysis technology of the program can effectively make up for the insufficiency of dynamic testing.
  • Static analysis techniques read program code as input and analyze program code semantics automatically. Since static analysis does not need to run the program or provide valid input, it is faster and covers all conditional branches of the program.
  • the results of different static analysis methods are also different. The results can be the correctness and stability of the program, or the targeted information about the program, which provides a reference for instrumentation or dynamic testing.
  • the existing static analysis technology defaults that the declared type of the pointer (declared type for short) and the pointer type of the instance pointed to by the pointer (the actual type for short) are the same.
  • this assumption is not fully established in the C language, mainly for two reasons: (1) There are general pointers of types such as char* or void* in the C language, and the declared type cannot reflect the actual type. (2)
  • the coercion type conversion in C language may convert the pointer variable to another pointer type, or an integer type, resulting in inconsistency between the declared type and the actual type. This inconsistency leads to the fact that the declared type cannot fully reflect the actual type of the pointer, which makes the static analysis no longer have soundness, which seriously affects the accuracy of the static analysis and even leads to erroneous results.
  • the purpose of the embodiments of the present invention is to provide a pointer type analysis method in C language, so as to solve the problem of incompleteness and inaccuracy of the existing type analysis technology.
  • An embodiment of the present invention provides a C language pointer type analysis method, including:
  • the structure type information includes the type information of the structure pointer field.
  • the structure pointer field is set to the type set
  • the mapping ⁇ ( ⁇ ) is initialized to obtain the initial mapping ⁇ init ( ⁇ ), where the mapping ⁇ ( ⁇ ) takes the pointer field of the structure as input, and outputs all the actual types pointed to by the field;
  • convert and integrate all C language source codes of the input program into LLVM IR bit codes including:
  • mapping ⁇ init ( ⁇ ) of the structure pointer field set to the type set, including:
  • each different instruction defines a different state transition function Trans Inst ( ), including:
  • FARG represents the formal parameter of the function
  • AARG represents the actual parameter of the function
  • n represents the number of parameters
  • OP 1 and OP 2 represent two operands respectively, and RES represents the result of instruction execution;
  • ⁇ [x 0 ⁇ a] represents a new mapping ⁇ ′ obtained by mapping ⁇
  • x is the independent variable of the function ⁇
  • x 0 represents any value in the domain of definition
  • a represents any value in the range of values.
  • the beneficial effect of the present invention is that the present invention can identify the actual type of the general pointer according to the program semantics, and can also correctly handle the forced conversion semantics, which makes up for the deficiencies of the existing type analysis technology;
  • the parameters are also analyzed, and the static analysis across the process is realized to ensure the soundness of the analysis results.
  • FIG. 1 is a flowchart of a C language pointer type analysis method according to an embodiment of the present invention.
  • Fig. 1 is the flow chart of the pointer type analysis method of a kind of C language provided by the embodiment of the present invention.
  • the present embodiment provides the pointer type analysis method of a kind of C language, the present embodiment analyzes the pointer type in the kernel of Android Linux operating system As an example to illustrate, the method includes the following steps:
  • Step S101 converts and integrates all C language source codes of the input program into LLVM IR bit codes
  • the IR bit code contains the complete type information and semantics of the entire program information, and provides a complete and concise analysis interface, which is convenient for subsequent cross-process static analysis.
  • Step S102 analyze the structure type information it contains, the structure type information includes the type information of the structure pointer field, and according to the type information of the structure pointer field, the structure pointer field is collected to
  • the mapping ⁇ ( ⁇ ) of the type set is initialized to obtain the initial mapping ⁇ init ( ⁇ ), where the mapping ⁇ ( ⁇ ) takes the pointer field of the structure as input, and outputs all the actual types pointed to by the field;
  • a depth-first search strategy (DFS) is used for nested structures;
  • DFS depth-first search strategy
  • the mapping of variables to structure fields is denoted as field( ).
  • the target state ⁇ includes the mapping ⁇ and the mapping ⁇ , and is the target of analyzing the program in the present invention.
  • FARG represents the formal parameter of the function
  • AARG represents the actual parameter of the function
  • n represents the number of parameters
  • ⁇ [x 0 ⁇ a] represents a new mapping ⁇ ′ obtained by mapping ⁇
  • x is the independent variable of the function ⁇
  • x 0 represents any value in the domain of definition
  • a represents any value in the range of values.
  • the container_of in line 516 is actually a forced type conversion instruction, that is, the timer pointer points to both the struct timerqueue_node type and the struct hrtimer type. Only according to the declared type of the timer pointer can only get the pointer to point to the struct hrtimer type; this method passes Modeling the semantics of the cast instruction, we can successfully analyze that the pointer points to two types at the same time.
  • Step S105 output ⁇ , that is, the possible actual types of all pointer variables in the program.

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Software Systems (AREA)
  • Computer Hardware Design (AREA)
  • Quality & Reliability (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Devices For Executing Special Programs (AREA)

Abstract

本发明公开了一种C语言的指针类型分析方法,能快速分析大规模C代码中指针变量所有可能指向的类型。本方法先将输入程序的所有C语言源代码转换并整合为LLVM IR比特码,并根据比特码中包含的类型信息初始化目标状态函数;随后遍历IR比特码中的每一条指令,根据不同的指令类型对当前的目标状态函数进行更新;本方法反复分析IR比特码中的指令直到目标状态函数不再变化为止;分析完成后,即得到完整的目标状态。

Description

一种C语言的指针类型分析方法 技术领域
本发明涉及计算机程序分析领域,尤其涉及一种C语言的指针类型分析方法。
背景技术
C语言因其较快的运行速度和丰富的程序库而得到广泛的使用。众多高性能的软件均由C语言编写,如Linux/Windows操作系统内核、编译器、数据库以及嵌入式系统应用等。这些软件为其他应用提供了基础环境以及基础功能,构成了计算机系统的基础设施,因而具有极广的部署范围和极高的重要性。单以Linux内核的应用之一Android操作系统为例,截至2019年5月,谷歌发布声明称Android系统的全球用户数量已高达25亿。在如此广泛的部署数量下,确保C语言程序的正确性和稳定性显得愈发重要。
然而越来越大的代码规模对传统软件测试提出了挑战。传统的软件测试一般使用动态测试,即运行程序后输入测试样例观察程序的运行状态。测试样例需要人工编写或是由程序动态生成。对于小型应用人工编写的测试样例往往足够覆盖程序所有的执行路径,然而对操作系统级规模的代码进行手工测试则会消耗大量的人力和时间。Linux 5.6版本的内核已包含了超过3千万行代码,通过手工编写的样例来覆盖所有执行路径不具备可行性。另一方面,采用模糊测试(fuzzing)技术自动化生成的样例不具备针对性,生成的测试样例往往无法通过输入合法性判断,或是无法组成有效的语义,使其无法测试到程序内部大量的条件分支。
程序的静态分析技术能够有效的弥补动态测试的不足之处。静态分析技术读取程序代码作为输入并自动化地分析程序代码语义。由于静态分析无需运行程序或是提供合法输入,因此它的速度更快且能覆盖程序的所有条件分支。不同静态分析方法的结果也不同,其结果可以是程序的正确性和稳定性,也可以是关于程序的针对性信息,为插桩或是动态测试提供参考。
已有的静态分析技术默认指针声明的类型(简称声明类型)和指针所指向实例的指针类型(简称实际类型)是一致的。然而这一假设在C语言中不完全成立,主要有两点原因:(1)C语言中存在char*或是void*等类型的通用指针,其声明类型无法反映实际类型。(2)C语言中存在的强制类型转换可能将指针变量转换为另一指针类型,或是整型,造成声明类型和实际类型不一致。这种不一致导致声明类型不能完全反映指针的实际类型,使得静态分析不再具备健全性(soundness),严重影响静态分析的精确性甚至导致错误的结果。
发明内容
本发明实施例的目的是提供一种C语言的指针类型分析方法,以解决现有类型分析技术不完整、不准确的问题。
为了达到上述目的,本发明实施例所采用的技术方案如下:
本发明实施例提供一种C语言的指针类型分析方法,包括:
将输入程序的所有C语言源代码转换并整合为LLVM IR比特码;
根据LLVM IR比特码,分析其包含的结构体类型信息,所述结构体类型信息包含结构体指针域的类型信息,根据结构体指针域的类型信息,对结构体指针域集合到类型集合的映射μ(·)进行初始化,得到初始映射μ init(·),其中映射μ(·)以结构体的指针域作为输入,输出该域所有指向的实际类型;
根据μ init(·),对指针变量到类型集合的映射ε(·)进行初始化,得到ε init(·),对目标状态σ=(ε,μ)进行初始化,得到σ init=(ε init,μ init),其中ε为指针变量到类型集合的映射,μ为结构体指针域集合到类型集合的映射;
从初始化的目标状态σ init出发,遍历程序中的所有函数,对每一个函数,遍历函数中的每一条指令,其中每种不同的指令定义了一个不同的状态转移函数Trans Inst(·),遍历过程中访问一条指令后,目标状态发生相应的状态转移:σ′=Trans Inst(σ);重复这一步骤直到σ不再变化为止;
输出ε,即程序中所有指针变量可能的实际类型。
进一步地,将输入程序的所有C语言源代码转换并整合为LLVM IR比特码,包括:
使用LLVM提供的LTO编译模式对目标程序的C语言源代码进行编译,得到该程序完整的LLVM IR比特码,其中目标程序的C语言源代码包含一个或多个C语言源文件。
进一步地,初始化结构体指针域集合到类型集合的映射μ init(·),包括:
对于每个结构体类型,递归地遍历它的所有域;在此过程中,若访问的域是指针域,则初始化该域的实际类型为它的声明类型,即μ init(fd)=typeof(fd),其中结构体的域到类型集合的映射记为μ(·),域记为fd,typeof(·)表示指针域或者指针变量的声明类型。
进一步地,初始化指针变量到类型集合的映射ε init(·),包括:
对于程序中的每一个指针变量v,初始化映射ε(·)为ε init(v)=μ init(field(v))∪typeof(v),其中变量到结构体域的映射记为field(·)。
进一步地,每种不同的指令定义了一个不同的状态转移函数Trans Inst(·),包括:
(5-1)对于类型转换指令
Figure PCTCN2020114972-appb-000001
Figure PCTCN2020114972-appb-000002
Figure PCTCN2020114972-appb-000003
其中RES为类型转换指令的结果,OP为类型转换的输入;
(5-2)对于取结构体域指针指令
Figure PCTCN2020114972-appb-000004
Figure PCTCN2020114972-appb-000005
(5-3)对于函数调用指令
Figure PCTCN2020114972-appb-000006
Figure PCTCN2020114972-appb-000007
其中FARG表示函数的形参,AARG表示函数的实参,n表示参数的个数;
(5-4)对于比较指令
Figure PCTCN2020114972-appb-000008
Figure PCTCN2020114972-appb-000009
其中OP 1表示第一个比较数,OP 2表示第二个比较数;
(5-5)对于
Figure PCTCN2020114972-appb-000010
指令
Figure PCTCN2020114972-appb-000011
Figure PCTCN2020114972-appb-000012
其中OP i表示第i个操作数,n表示操作数的数量;
(5-6)对于选择指令
Figure PCTCN2020114972-appb-000013
其中OP 1和OP 2分别表示两个操作数,RES表示指令执行的结果;
其中,ε[x 0→a]表示由映射ε所得到的一个新映射ε′,
Figure PCTCN2020114972-appb-000014
x是函数ε的自变量,x 0表示定义域中的任一值,a表示值域中的任一值。
根据以上技术方案,本发明的有益效果是,本发明能根据程序语义识别通用指针的实际类型,也能正确地处理强制转换语义,弥补了现有类型分析技术的不足;本发明对函数的形参也进行了分析,实现了跨过程的静态分析,确保了分析结果的健全性。
附图说明
此处所说明的附图用来提供对本发明的进一步理解,构成本发明的一部分,本发明的示意性实施例及其说明用于解释本发明,并不构成对本发明的不当限定。在附图中:
图1为本发明实施例提供的一种C语言的指针类型分析方法的流程图。
具体实施方式
为使本申请的目的、技术方案和优点更加清楚,下面将结合本申请具体实施例及相应的附图对本申请技术方案进行清楚、完整地描述。显然,所描述的实施例仅是本申请一部分实施例,而不是全部的实施例。基于本申请中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本申请保护的范围。
图1为本发明实施例提供的一种C语言的指针类型分析方法的流程图;本实施例提供一种C语言的指针类型分析方法,本实施例以Android Linux操作系统内核中的指针类型分析为例来进行说明,该方法包括以下步骤:
步骤S101,将输入程序的所有C语言源代码转换并整合为LLVM IR比特码;
具体地,开启Android Linux操作系统内核编译的LTO选项,使用LLVM提供的LTO模式编译内核,得到Android Linux操作系统完整的LLVM IR比特码;IR比特码包含了整个程序完整的类型信息和语义信息,且提供了完整简洁的分析接口,便于后续的跨过程静态分析。
步骤S102,根据LLVM IR比特码,分析其包含的结构体类型信息,所述结构体类型信息包含结构体指针域的类型信息,根据结构体指针域的类型信息,对结构体指针域集合到类型集合的映射μ(·)进行初始化,得到初始映射μ init(·),其中映射μ(·)以结构体的指针域作为输入,输出该域所有指向的实际类型;
具体地,对于Android Linux操作系统内核IR比特码中包含的每个结构体类型,遍历它的所有域,对于嵌套的结构体则采用深度优先搜索策略(Depth-first search,DFS);在此过程中,若访问的域是指针域,则初始化该域的实际类型为它的声明类型,即μ init(fd)=typeof(fd),其中结构体的域到类型集合的映射记为μ(·),域记为fd,typeof(·)表示指针域或者指针变量的声明类型。
步骤S103,对指针变量到类型集合的映射ε(·)进行初始化,得到ε init(·),对目标状态σ=(ε,μ)进行初始化,得到σ init=(ε init,μ init),其中ε为指针变量到类型集合的映射,μ为结构体指针域集合到类型集合的映射;
具体地,对于Android Linux操作系统内核IR比特码中的每一个指针类型的变量v,初始化映射ε(·)为ε init(v)=μ init(field(v))∪typeof(v),其中变量到结构体域的映射记为field(·)。目标状态σ包括映射ε和映射μ,是本发明对程序进行分析的目标。
步骤S104,从初始化的目标状态σ init出发,遍历程序中的所有函数;对每一个函数,遍历函数中的每一条指令;每种不同的指令定义了一个不同的状态转移函数Trans Inst(·),遍历过程中访问一条指令后,目标状态发生相应的状态转移:σ′=Trans Inst(σ);重复这一步骤直到σ不再变化为止;具体地,其中状态转移函数Trans Inst(·),包含如下子步骤:
(5-1)对于类型转换指令
Figure PCTCN2020114972-appb-000015
Figure PCTCN2020114972-appb-000016
Figure PCTCN2020114972-appb-000017
其中RES为类型转换指令的结果,OP为类型转换的输入;
(5-2)对于取结构体域指针指令
Figure PCTCN2020114972-appb-000018
Figure PCTCN2020114972-appb-000019
(5-3)对于函数调用指令
Figure PCTCN2020114972-appb-000020
Figure PCTCN2020114972-appb-000021
其中FARG表示函数的形参,AARG表示函数的实参,n表示参数的个数;
(5-4)对于比较指令
Figure PCTCN2020114972-appb-000022
Figure PCTCN2020114972-appb-000023
其中OP 1表示第一个比较数,OP 2表示第二个比较数;
(5-5)对于
Figure PCTCN2020114972-appb-000024
指令
Figure PCTCN2020114972-appb-000025
Figure PCTCN2020114972-appb-000026
其中OP i表示第i个操作数,n表示操作数的数量;
(5-6)对于选择指令
Figure PCTCN2020114972-appb-000027
其中OP 1和OP 2分别表示两个操作数,RES表示指令执行的结果。
其中,ε[x 0→a]表示由映射ε所得到的一个新映射ε′,
Figure PCTCN2020114972-appb-000028
x是函数ε的自变量,x 0表示定义域中的任一值,a表示值域中的任一值。
每种状态转移函数为每种不同的指令进行了精确的建模,在保留精确性的同时确保了静态分析的健全性,也即覆盖了所有的可能出现的情况。以Android Linux内核中的一段代码为例:
Figure PCTCN2020114972-appb-000029
其中第516行中的container_of其实是一个强制类型转换指令,即timer指针同时指向了struct timerqueue_node类型和struct hrtimer类型,仅仅根据timer指针的声明类型只能得到该指针指向struct hrtimer类型;本方法则通过对强制类型转换指令的语义进行建模,能成功分析得到该指针同时指向两种类型。
步骤S105,输出ε,即程序中所有指针变量可能的实际类型。
以上所述仅为本发明的较佳实施例而已,并不用以限制本发明,凡在本发明的精神和原则之内,所作的任何修改、等同替换、改进等,均应包含在本发明的保护范围之内。

Claims (5)

  1. 一种C语言的指针类型分析方法,其特征在于,包括:
    将输入程序的所有C语言源代码转换并整合为LLVM IR比特码;
    根据LLVM IR比特码,分析其包含的结构体类型信息,所述结构体类型信息包含结构体指针域的类型信息,根据结构体指针域的类型信息,对结构体指针域集合到类型集合的映射μ(·)进行初始化,得到初始映射μ init(·),其中映射μ(·)以结构体的指针域作为输入,输出该域所有指向的实际类型;
    根据μ init(·),对指针变量到类型集合的映射ε(·)进行初始化,得到ε init(·),对目标状态σ=(ε,μ)进行初始化,得到σ init=(ε init,μ init),其中ε为指针变量到类型集合的映射,μ为结构体指针域集合到类型集合的映射;
    从初始化的目标状态σ init出发,遍历程序中的所有函数,对每一个函数,遍历函数中的每一条指令,其中每种不同的指令定义了一个不同的状态转移函数Trans Inst(·),遍历过程中访问一条指令后,目标状态发生相应的状态转移:σ′=Trans Inst(σ);重复这一步骤直到σ不再变化为止;
    输出ε,即程序中所有指针变量可能的实际类型。
  2. 根据权利要求1所述一种C语言的指针类型分析方法,其特征在于,将输入程序的所有C语言源代码转换并整合为LLVM IR比特码,包括:
    使用LLVM提供的LTO编译模式对目标程序的C语言源代码进行编译,得到该程序完整的LLVM IR比特码,其中目标程序的C语言源代码包含一个或多个C语言源文件。
  3. 根据权利要求1所述一种C语言的指针类型分析方法,其特征在于,初始化结构体指针域集合到类型集合的映射μ init(·),包括:
    对于每个结构体类型,递归地遍历它的所有域;在此过程中,若访问的域是指针域,则初始化该域的实际类型为它的声明类型,即μ init(fd)=typeof(fd),其中结构体的域到类型集合的映射记为μ(·),域记为fd,typeof(·)表示指针域或者指针变量的声明类型。
  4. 根据权利要求1所述一种C语言的指针类型分析方法,其特征在于,初始化指针变量到类型集合的映射ε init(·),包括:
    对于程序中的每一个指针变量v,初始化映射ε(·)为ε init(v)=μ init(field(v))∪typeof(v),其中变量到结构体域的映射记为field(·)。
  5. 根据权利要求1所述一种C语言的指针类型分析方法,其特征在于,每种不同的指令定义了一个不同的状态转移函数Trans Inst(·),包括:
    (5-1)对于类型转换指令
    Figure PCTCN2020114972-appb-100001
    Figure PCTCN2020114972-appb-100002
    Figure PCTCN2020114972-appb-100003
    其中RES为类型转换指令的结果,OP为类型转换的输入;
    (5-2)对于取结构体域指针指令
    Figure PCTCN2020114972-appb-100004
    Figure PCTCN2020114972-appb-100005
    (5-3)对于函数调用指令
    Figure PCTCN2020114972-appb-100006
    Figure PCTCN2020114972-appb-100007
    其中FARG表示函数的形参,AARG表示函数的实参,n表示参数的个数;
    (5-4)对于比较指令
    Figure PCTCN2020114972-appb-100008
    Figure PCTCN2020114972-appb-100009
    其中OP 1表示第一个比较数,OP 2表示第二个比较数;
    (5-5)对于
    Figure PCTCN2020114972-appb-100010
    指令
    Figure PCTCN2020114972-appb-100011
    Figure PCTCN2020114972-appb-100012
    其中OP i表示第i个操作数,n表示操作数的数量;
    (5-6)对于选择指令
    Figure PCTCN2020114972-appb-100013
    其中OP 1和OP 2分别表示两个操作数,RES表示指令执行的结果;
    其中,ε[x 0→a]表示由映射ε所得到的一个新映射ε’,
    Figure PCTCN2020114972-appb-100014
    x是函数ε的自变量,x 0表示定义域中的任一值,a表示值域中的任一值。
PCT/CN2020/114972 2020-08-20 2020-09-14 一种c语言的指针类型分析方法 WO2022036783A1 (zh)

Applications Claiming Priority (2)

Application Number Priority Date Filing Date Title
CN202010842855.4 2020-08-20
CN202010842855.4A CN112100059B (zh) 2020-08-20 2020-08-20 一种c语言的指针类型分析方法

Publications (1)

Publication Number Publication Date
WO2022036783A1 true WO2022036783A1 (zh) 2022-02-24

Family

ID=73753082

Family Applications (1)

Application Number Title Priority Date Filing Date
PCT/CN2020/114972 WO2022036783A1 (zh) 2020-08-20 2020-09-14 一种c语言的指针类型分析方法

Country Status (2)

Country Link
CN (1) CN112100059B (zh)
WO (1) WO2022036783A1 (zh)

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN114816355A (zh) * 2022-06-24 2022-07-29 基石酷联微电子技术(北京)有限公司 基于端口结构体的软件架构系统

Citations (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN101937390A (zh) * 2010-02-01 2011-01-05 许中兴 源代码缺陷分析中一种基于区域的内存建模方法
US20140130016A1 (en) * 2012-11-07 2014-05-08 Alok Menghrajani Offline type checking in programming languages
CN104965788A (zh) * 2015-07-03 2015-10-07 电子科技大学 一种代码静态检测方法
CN106462677A (zh) * 2014-03-31 2017-02-22 爱迪德技术有限公司 优化和保护软件
CN107250983A (zh) * 2015-04-15 2017-10-13 华为技术有限公司 在数据库查询执行引擎中利用参数化中间表示进行即时编译的装置和方法

Family Cites Families (7)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US9329845B2 (en) * 2009-06-04 2016-05-03 Microsoft Technology Licensing, Llc Determining target types for generic pointers in source code
CN102012991A (zh) * 2010-11-09 2011-04-13 北京神舟航天软件技术有限公司 基于静态分析的c语言安全规则检查方法
CN102662829B (zh) * 2012-03-16 2015-02-18 北京邮电大学 一种复杂数据结构在代码静态测试中的处理方法和装置
CN103914382B (zh) * 2014-03-25 2016-06-29 北京邮电大学 一种充分识别指针引用检测对象的方法
CN104331368B (zh) * 2014-11-18 2017-04-05 合肥康捷信息科技有限公司 一种基于cfg文件静态分析C++虚函数调用的方法
CN108132799B (zh) * 2017-12-25 2021-03-16 首都师范大学 过程间静态程序分析信息提取方法、装置及设备
CN108897572B (zh) * 2018-07-19 2020-09-15 北京理工大学 一种基于变量关联树的复杂类型重构方法

Patent Citations (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN101937390A (zh) * 2010-02-01 2011-01-05 许中兴 源代码缺陷分析中一种基于区域的内存建模方法
US20140130016A1 (en) * 2012-11-07 2014-05-08 Alok Menghrajani Offline type checking in programming languages
CN106462677A (zh) * 2014-03-31 2017-02-22 爱迪德技术有限公司 优化和保护软件
CN107250983A (zh) * 2015-04-15 2017-10-13 华为技术有限公司 在数据库查询执行引擎中利用参数化中间表示进行即时编译的装置和方法
CN104965788A (zh) * 2015-07-03 2015-10-07 电子科技大学 一种代码静态检测方法

Non-Patent Citations (1)

* Cited by examiner, † Cited by third party
Title
GUO, JING-FENG ET AL.: "Researching on member call of static analysis", JOURNAL OF THE ACADEMY OF SCIENCES, vol. 19, no. 3, 31 August 2002 (2002-08-31), pages 159 - 162, XP055901995 *

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN114816355A (zh) * 2022-06-24 2022-07-29 基石酷联微电子技术(北京)有限公司 基于端口结构体的软件架构系统

Also Published As

Publication number Publication date
CN112100059B (zh) 2021-09-14
CN112100059A (zh) 2020-12-18

Similar Documents

Publication Publication Date Title
US9208057B2 (en) Efficient model checking technique for finding software defects
US10354069B2 (en) Automated reverse engineering
CN109426615A (zh) 过程间的空指针解引用检测方法、系统、设备以及介质
US20130054630A1 (en) Pre-generation of structured query language (sql) from application programming interface (api) defined query systems
Appelbe et al. Start/Pat: a parallel-programming toolkit
Feldthaus et al. Semi-automatic rename refactoring for JavaScript
CN102567200A (zh) 基于函数调用图的并行化安全漏洞检测方法
CN104850411B (zh) 存储系统基准评测程序生成方法及装置
Donaldson et al. Counterexample-guided abstraction refinement for symmetric concurrent programs
WO2022036783A1 (zh) 一种c语言的指针类型分析方法
Cogumbreiro et al. Checking data-race freedom of gpu kernels, compositionally
Cho et al. Practical lock/unlock pairing for concurrent programs
Brylow et al. Deadline analysis of interrupt-driven software
Madhavan et al. Purity analysis: An abstract interpretation formulation
Cortesi et al. String abstraction for model checking of C programs
Cogumbreiro et al. Memory access protocols: certified data-race freedom for GPU kernels
Chen et al. Hopper: Interpretative fuzzing for libraries
Gabrijelčič Mastering Delphi Programming: A Complete Reference Guide: Learn all about building fast, scalable, and high performing applications with Delphi
Fan et al. Static bound analysis of dynamically allocated resources for c programs
Ashish et al. Automated techniques and tools for program analysis: Survey
Zhou et al. An interval-based model for detecting software defect using alias analysis
Hung et al. New tracing and performance analysis techniques for embedded applications
CN117555811B (zh) 基于静态符号执行的嵌入式软件分析方法、装置及存储介质
Borodin et al. Static analyzer for Go
Norlén Architecture for a Symbolic Execution Environment

Legal Events

Date Code Title Description
121 Ep: the epo has been informed by wipo that ep was designated in this application

Ref document number: 20949987

Country of ref document: EP

Kind code of ref document: A1

NENP Non-entry into the national phase

Ref country code: DE

122 Ep: pct application non-entry in european phase

Ref document number: 20949987

Country of ref document: EP

Kind code of ref document: A1