CN114281338A - 一种获取Linux内核中数据结构偏移的方法和装置 - Google Patents

一种获取Linux内核中数据结构偏移的方法和装置 Download PDF

Info

Publication number
CN114281338A
CN114281338A CN202111413438.9A CN202111413438A CN114281338A CN 114281338 A CN114281338 A CN 114281338A CN 202111413438 A CN202111413438 A CN 202111413438A CN 114281338 A CN114281338 A CN 114281338A
Authority
CN
China
Prior art keywords
function
linux
domain
specified
source code
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
CN202111413438.9A
Other languages
English (en)
Other versions
CN114281338B (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.)
Institute of Information Engineering of CAS
Original Assignee
Institute of Information Engineering of CAS
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 Institute of Information Engineering of CAS filed Critical Institute of Information Engineering of CAS
Priority to CN202111413438.9A priority Critical patent/CN114281338B/zh
Priority claimed from CN202111413438.9A external-priority patent/CN114281338B/zh
Publication of CN114281338A publication Critical patent/CN114281338A/zh
Application granted granted Critical
Publication of CN114281338B publication Critical patent/CN114281338B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Landscapes

  • Stored Programmes (AREA)

Abstract

本发明公开了一种获取Linux内核中数据结构偏移的方法和装置。本方法为:对于给定的包含目标Linux内核文件的N个Linux源代码版本,对每一版本的所有函数进行静态源代码分析,获取所有包含指定结构体S的指定域f的引用并且不是显式声明为内联函数的函数,并计算每一所述函数关于所述指定结构体S和所述指定域f的特征,生成一函数列表;然后依据函数声明求取N个函数列表的交集,生成跨版本的通用函数列表;然后将复杂性最低的稳定函数的部分特征作为引用向量;利用所述引用向量对目标内核文件进行分析,获得引用向量对应的函数的汇编代码中对于初始结构体S的所有域引用;依据所述引用向量中的特征获得对应的域引用确定偏移量。

Description

一种获取Linux内核中数据结构偏移的方法和装置
技术领域
本发明涉及数据结构偏移获取技术,具体是通过统计多版本Linux源代码中指定结构体的指定域的通用引用函数,然后提取该函数中关于该指定结构体的指定域的特征,从而得到一种在Linux内核二进制文件中获得该域偏移值的一种特征,进而实现针对Linux操作系统内核的二进制文件指定结构体的指定域的偏移的获取。
背景技术
内存取证和虚拟机自省技术往往都需要使用内存分析的方法获取内存中一些数据结构的地址和值,这涉及到内核中一些数据结构的关联关系,这些关联关系是以“结构体-域”的形式体现的。图1展示了一个关联关系的示例,如图1(a)所示,其中task_struct结构体属于Linux内核的进程控制块(PCB)的一部分,作为进程描述符包含了进程的控制信息,如域comm[TASK_COMM_LEN]表示进程名,域pid表示进程的PID,域mm表示进程的内存描述符等。类似的,mm_struct是进程的内存描述符,域pgd是进程的页全局目录(Page GlobalDirectory),域mmap是进程虚拟地址范围等。在源代码中,这些域以“结构体->域”或者“结构体.域”的形式进行引用,而将源代码进行编译后,在汇编代码中这种关联关系以“结构体起始地址+偏移”进行寻址和取值,如mov reg2,[reg1+offset],其中reg1保存了结构体的起始地址,偏移offset是一个立即数,在编译过程中直接写入到汇编代码中。以task_struct结构体中的域mm以及域comm[TASK_COMM_LEN]和mm_struct结构体中的域pgd为例,图1(b)描述了这种数据偏移关系。在汇编代码中,对于task_struct结构体,域mm指针相对于结构体task_struct起始地址的偏移为x,域comm[TASK_COMM_LEN]相对于结构体task_struct起始地址的偏移为y,而对于mm_struct结构体,即task_struct中的域mm,其域pgd相对于结构体mm_struct的起始地址的偏移为z。图1(c)描述了这种数据关系的内存布局。
一个域相对于结构体的偏移在编译后的Linux内核中是固定的,在内存取证和虚拟机自省技术中,依赖某些域在结构体中的偏移进行关联结构体的推断,从而获取运行时操作系统中的语义信息,然而对于Linux操作系统的不同内核二进制文件,这些偏移值是不同的。具体由以下几个原因导致:
(1)不同Linux版本中数据结构调整带来的偏移不同;
(2)同一个Linux版本中使用不同的config文件带来的不同数据成员,进而导致偏移不同;
(3)不同版本的编译工具链的不同编译特性导致数据结构重排或者内存对齐带来的偏移不同。
当前主流的搜集数据结构的方法是在待分析的操作系统中运行一个定制的内核驱动程序,这个内核驱动程序可以输出所需要的偏移值。但是这种方法需要目标操作系统中的驱动编译环境,并且以root权限执行,对于缺乏这种条件的目标操作系统,如一些限制shell功能且缺乏源代码支持的虚拟网络设备,这种方法无法适用,往往应用逆向分析这种高度依赖人工的方法,局限也是显而易见的。
发明内容
为克服当前主流搜集数据结构的方法需要依赖源代码或者驱动编译及运行环境的局限性,本发明提供了一种获取Linux内核中数据结构偏移的方法,对于一个指定结构体指定域,通过分析多版本Linux源代码中的函数对该域的引用情况,获得对于该域的一个或者多个跨版本的引用向量,该引用向量包含了该域在一个通用函数中的代码特征。依据这个代码特征,使用静态二进制分析的方法从给定的Linux内核二进制文件中提取该域的偏移值。
本发明获取Linux内核中数据结构偏移的方法,包括以下步骤:
1.选定源代码版本1到源代码版本N,其中包含目标Linux内核文件的版本。
2.对于每个版本的所有函数进行静态源代码分析,对于所有包含了指定结构体指定域的引用,并且不是显式声明为inline(即内联函数)的函数,形成该版本源代码的包含了指定域引用的函数列表,并计算该函数列表中每个函数的关于指定结构体和指定域的一些特征,最终共获得N个版本的函数列表。
3.对于这些版本的函数列表,依据函数声明求取交集,从而获得一个跨版本通用的函数列表,其中所有函数在不同版本中都具有相同的声明,而且都具有对指定结构体指定域的引用。比如版本1存在符合条件的函数a,b,c;版本2存在函数a,d,e;版本N存在函数a,e,f;那么取交集之后的函数列表包含函数a,即跨版本通用的函数列表。
4.对于通用函数列表中的每个函数,筛选出在版本1到版本N中稳定的函数。
5.对于通用函数列表中的每个稳定函数,我们计算函数对于指定域引用的复杂性。
6.选择复杂性最低的函数,抽取部分特征作为引用向量,从而对于一个指定结构体的指定域,我们获得了一个从版本1到版本N都通用的引用向量。
7.注意,在步骤3中,对于某些域,如果Linux版本跨度较大,那么可能出现函数列表交集为空的情况,对于这种情况,我们会将Linux版本拆开,从而对于一个指定域,获取多个引用向量,这些引用向量会覆盖给定的版本1到版本N。
8.利用引用向量对于一个给定的Linux内核文件,进行静态二进制分析,首先确定Linux内核中引用向量对应的函数,本发明使用函数名确定函数的起始地址和结束地址,从而利用反汇编工具获得该函数的汇编代码。
9.利用函数的汇编代码建立数据流图。
10.根据引用向量确定初始结构体所在的寄存器作为源,以此源开始进行前向切片,获取初始结构体影响到的所有语句,其中包含该初始结构体的所有域引用所在的语句。
11.对前向切片的结果进行分析,依据引用向量中的特征获得目标Linux内核中指定结构体的指定域在内核中的偏移量。
本发明还提出了一种获取Linux内核中数据结构偏移的装置,如图5所示,包括多版本静态源代码分析模块和静态二进制代码分析模块。对于指定结构体指定域,我们使用多版本静态源代码分析模块输出对于该域的引用向量。对于一个给定的Linux内核文件,静态二进制分析模块利用该引用向量解析该域在这个内核文件中的偏移值。
本发明具有以下的优点和贡献:
1.无需依赖内核源代码以及编译和运行环境,对于一些受限的,仅能获取Linux内核文件的环境,我们也可以获取到一些指定结构体指定域的偏移,从而用于后续的内存取证或者虚拟机自省等。
2.本发明是一种轻量级的方法,借助静态源代码分析和静态二进制分析,可以非常方便地获取Linux内核中的偏移值。
3.本发明对2.6.29(2009年发布)到5.11.1(2021年发布)的跨度为12年的Linux版本获取了7个域的引用向量,这些域在内存分析中有重要应用,如表1所示。利用这些引用向量,我们对8个来自虚拟网络设备的不同版本的Linux内核文件应用,达到了98.2%的准确率,即可以正确找到56个域对应的55个偏移值。
表1 Linux 2.6.29到5.11.1的7个域的引用向量
Figure BDA0003375136500000031
Figure BDA0003375136500000041
附图说明
图1是本发明用来进行背景介绍和概念解释的说明图;
(a)为数据结构示意图,(b)为task_struct结构体偏移关系图,(c)为mm_struct结构体偏移关系图。
图2是本发明对多版本Linux源代码提取指定结构体的指定域的引用向量的流程图。
图3是本发明以Linux中mm_struct结构体的pgd域的引用向量的说明图。
图4是本发明依据引用向量对内核二进制程序还原指定结构体指定域偏移的流程图;
(a)为pgd_alloc函数的源代码和汇编代码中mm_struct结构体和pgd域的关联关系;
(b)为mm_struct结构体中pgd域的引用向量说明。
图5是本发明装置的模块图。
具体实施方式
下面结合附图和实施例对本发明进一步说明。
当前对于Linux操作系统内核的数据结构偏移获取主要依赖在操作系统内编译构建内核驱动并以root权限执行,对于不具备这种条件的目标操作系统,缺乏一种自动化的从Linux内核二进制文件中获取偏移的方法。因此本发明提供一种获取Linux内核中数据结构偏移的方法及装置,通过解析多版本Linux源代码中提取通用的包含指定结构体的指定域的引用的函数,然后提取该函数中关于该指定结构体的指定域的特征,从而得到一种在内核二进制文件中获得该域偏移值的一种特征,进而实现针对Linux操作系统内核的二进制文件指定结构体指定域的偏移的获取。
为使本发明的技术方案能更明显易懂,特举实施例,并结合附图详细说明如下。
对于一个给定的指定结构体S的指定域f,要在Linux内核文件中获取其偏移值,包含两个主要步骤:通过多版本静态Linux源代码分析获得对应于该指定域f的引用向量,随后应用该引用向量作为静态二进制代码分析的输入,从Linux内核文件中解析出偏移值。
多版本静态Linux源代码分析的流程如图2所示,
1.选定源代码版本1到源代码版本N,跨度应该包含目标Linux内核文件的版本。
2.对于每个版本进行静态源代码分析,首先构建源代码中每个函数func的抽象语法树,对于所有包含了指定结构体指定域的引用,并且不是显式声明为inline(即内联函数)的函数,形成该版本源代码的包含了指定域引用的函数列表,最终获得N个版本的函数列表,并计算这些函数的关于指定结构体和指定域的一些特征,包括:
a)S_order:结构体S作为函数func的参数的顺序,如果S不是参数,那么该值为0。
b)S_ref:结构体S在函数func中全部的域引用次数。
c)S_inline:函数func中,结构体S作为参数的inline函数的调用数量。
d)S_macro:函数func中,结构体S作为参数的macro(宏定义)数量。
e)f_order:域f在结构体S的全部域引用的顺序,这个顺序是抽象语法树中的DFS(深度优先搜索)节点次序。
f)scale:函数func的大小,这里使用抽象语法树中的节点数量。
3.对于这些版本的函数列表,依据函数声明求取交集,这样可以规避不同版本中对函数声明进行了修改的情况,如在版本A中未被声明为inline的函数在版本B中被声明为了inline,或者参数列表发生了改变等情况。从而获得一个跨版本通用的函数列表,其中所有函数在不同版本中都具有相同的声明,而且都具有指定结构体指定域的引用。
4.对于通用函数列表中的每个函数,通过对比每个版本Linux中该函数f_order,S_order,S_inline和S_macro四个值来筛选各版本稳定的函数,即这些特征信息在不同函数列表中是否相同,并删除掉不稳定的函数。
5.随后对于通用函数列表中的每个稳定函数,我们计算函数对于指定域引用的复杂性,即scale*f_order*(S_ref+S_inline+S_macro),这个公式的计算会使规模小,域f的引用次序靠前,结构体S的全部域引用数目较小,inline和macro干扰较少的函数具备较低的复杂性;
6.选择复杂性最低的函数,抽取部分特征(函数名,S_order,S_ref,f_order)作为引用向量,从而对于一个指定结构体的指定域,我们获得了一个从版本1到版本N的引用向量。
7.注意,对于某些域,如果Linux版本跨度较大,那么可能出现函数列表交集为空的情况,对于这种情况,我们会将Linux版本拆开,从而获取多个引用向量。
获取到指定结构体指定域的跨版本引用向量后,对于一个给定的Linux内核文件,我们可以用静态二进制分析的方法获取到偏移值,流程如图3所示:
1.确定Linux内核中引用向量对应的函数,本发明使用函数名确定函数的起始地址和结束地址,从而利用反汇编工具获得该函数的汇编代码。
2.对于这个函数建立数据流图。
3.如果S_order不为0,那么根据引用向量的S_order定位初始结构体所在的寄存器,即找到,并以此寄存器为源进行前向切片。如果S_order为0,那么要结合源代码中的代码模式,如某个全局变量或者某个函数的返回值,定位到初始结构体所在的寄存器,随后进行前向切片。
4.对前向切片的结果进行分析,获得所述汇编代码中对于指定结构体S的所有域引用;
然后依据所述引用向量中的特征获得对应的域引用确定所述目标Linux内核中所述指定结构体S的指定域f在内核中的偏移量。对前向切片的结果进行分析,具体为,对于初始结构体指针存在加一个立即数操作的,看做一次域引用,从而获得汇编代码中对于初始结构体的所有域引用,随后根据引用向量中的f_order提取对应的域引用,从而获得该域(即目标Linux内核中指定结构体的指定域)在内核中的偏移量。
图4展示了一个引用向量的示例,这个引用向量对应于mm_struct结构体中的pgd域,对于Linux 2.6.29(2009年发布)到Linux 5.11.1(2021年发布)的Linux版本都适用。这个域对应的引用向量是(“pgd_alloc”,1,1,1),即pgd_alloc函数的第一个参数是结构体mm_struct,该结构体的第一次引用是pgd,该结构体在pgd_alloc函数中的所有域引用次数为1。
尽管为说明目的公开了本发明的具体实施例,其目的在于帮助理解本发明的内容并据以实施,本领域的技术人员可以理解:在不脱离本发明及所附的权利要求的精神和范围内,各种替换、变化和修改都是可能的。因此,本发明不应局限于最佳实施例所公开的内容,本发明要求保护的范围以权利要求书界定的范围为准。

Claims (10)

1.一种获取Linux内核中数据结构偏移的方法,其步骤包括:
1)获取N个Linux源代码版本,其中包含目标Linux内核文件的Linux源代码版本;
2)对于每一所述Linux源代码版本的所有函数进行静态源代码分析,获取所有包含指定结构体S的指定域f的引用并且不是显式声明为内联函数inline的函数,并计算每一所述函数关于所述指定结构体S和所述指定域f的特征,生成对应Linux源代码版本的函数列表;所述函数列表中包括若干个所述函数及其对应的特征;
3)根据该N个Linux源代码版本所对应的函数列表,依据函数声明求取N个所述函数列表的交集,生成跨版本的通用函数列表;
4)根据所述通用函数列表中的每个函数对应的特征,确定所述函数是否为稳定函数;
5)计算每个所述稳定函数对于所述指定域f的引用的复杂性;将复杂性最低的稳定函数的部分特征作为引用向量;
6)利用所述引用向量对所述目标Linux内核文件进行静态二进制分析,确定所述目标Linux内核中所述引用向量对应的函数,获取该函数的汇编代码;
7)根据所述汇编代码建立数据流图;
8)根据所述引用向量确定初始结构体所在的寄存器作为源,以此源开始进行前向切片,获取初始结构体影响到的所有语句;
9)对前向切片的结果进行分析,获得所述汇编代码中对于指定结构体S的所有域引用;然后依据所述引用向量中的特征获得对应的域引用确定所述目标Linux内核中所述指定结构体S的指定域f在内核中的偏移量。
2.根据权利要求1所述的方法,其特征在于,所述特征包括
S_order:指定结构体S作为函数的参数的顺序;
S_ref:指定结构体S在函数中全部的域引用次数;
S_inline:函数中指定结构体S作为参数的内联函数的调用数量;
S_macro:函数中指定结构体S作为参数的宏定义数量;
f_order:指定域f在指定结构体S的全部域引用的顺序;
scale:函数的大小。
3.根据权利要求2所述的方法,其特征在于,确定所述函数是否为稳定函数的方法为:通过对比每个版本Linux中同一函数的特征f_order,S_order,S_inline和S_macro的取值是否相同,如果相同则所述函数为稳定函数。
4.根据权利要求3所述的方法,其特征在于,根据公式scale*f_order*(S_ref+S_inline+S_macro)计算每个所述稳定函数对于所述指定域f的引用的复杂性。
5.根据权利要求3所述的方法,其特征在于,所述稳定函数的部分特征包括函数名、S_order,S_ref和f_order。
6.根据权利要求3所述的方法,其特征在于,根据所述引用向量中的S_order成员获得初始结构体:如果S_order不为0,则根据所述引用向量的S_order定位初始结构体所在的寄存器;如果S_order为0,则结合源代码中的代码模式定位到初始结构体所在的寄存器。
7.根据权利要求3所述的方法,其特征在于,步骤9)中,对前向切片的结果进行分析,将初始结构体指针存在加一个立即数操作的,视为一次域引用,从而获得所述汇编代码中对于初始结构体的所有域引用;然后根据所述引用向量中的特征f_order提取对应的域引用,获得所述目标Linux内核中所述指定结构体S的指定域f在内核中的偏移量。
8.根据权利要求1所述的方法,其特征在于,所述N个Linux源代码版本为版本号连续的N个Linux源代码版本。
9.根据权利要求8所述的方法,其特征在于,如果所述N个Linux源代码版本中,版本号i至与其最接近的版本号j之间不连续,则将版本号i~j之间至少一个Linux源代码版本进行拆分,从而对于指定域f获取多个引用向量,这些引用向量覆盖给定的所述N个Linux源代码版本。
10.一种获取Linux内核中数据结构偏移的装置,其特征在于,包括多版本静态源代码分析模块和静态二进制代码分析模块;其中,
所述多版本静态源代码分析模块,用于对于给定的包含目标Linux内核文件对应的Linux源代码版本在内的N个Linux源代码版本,对每一所述Linux源代码版本的所有函数进行静态源代码分析,获取所有包含指定结构体S的指定域f的引用并且不是显式声明为内联函数inline的函数,并计算每一所述函数关于所述指定结构体S和所述指定域f的特征,生成对应Linux源代码版本的函数列表;所述函数列表中包括若干个所述函数及其对应的特征;然后根据该N个Linux源代码版本所对应的函数列表,依据函数声明求取N个所述函数列表的交集,生成跨版本的通用函数列表;然后根据所述通用函数列表中的每个函数对应的特征,确定所述函数是否为稳定函数,计算每个所述稳定函数对于所述指定域f的引用的复杂性;将复杂性最低的稳定函数的部分特征作为引用向量;
所述静态二进制分析模块,用于利用所述引用向量对所述目标Linux内核文件进行静态二进制分析,确定所述目标Linux内核中所述引用向量对应的函数,获取该函数的汇编代码;然后根据所述汇编代码建立数据流图;然后根据所述引用向量确定初始结构体所在的寄存器作为源,以此源开始进行前向切片,获取初始结构体影响到的所有汇编指令;然后对前向切片的结果进行分析,获得所述汇编代码中对于初始结构体S的所有域引用;依据所述引用向量中的特征获得对应的域引用确定所述目标Linux内核中所述指定结构体S的指定域f在内核中的偏移量。
CN202111413438.9A 2021-11-25 一种获取Linux内核中数据结构偏移的方法和装置 Active CN114281338B (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN202111413438.9A CN114281338B (zh) 2021-11-25 一种获取Linux内核中数据结构偏移的方法和装置

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN202111413438.9A CN114281338B (zh) 2021-11-25 一种获取Linux内核中数据结构偏移的方法和装置

Publications (2)

Publication Number Publication Date
CN114281338A true CN114281338A (zh) 2022-04-05
CN114281338B CN114281338B (zh) 2024-05-28

Family

ID=

Citations (10)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20130086338A1 (en) * 2011-10-03 2013-04-04 International Business Machines Corporation Linking code for an enhanced application binary interface (abi) with decode time instruction optimization
CN103544090A (zh) * 2013-10-16 2014-01-29 北京航空航天大学 虚拟机进程监控方法和装置
CN105160001A (zh) * 2015-09-09 2015-12-16 山东省计算中心(国家超级计算济南中心) 一种Linux系统物理内存镜像文件分析方法
CN105550575A (zh) * 2015-12-03 2016-05-04 北京神州绿盟信息安全科技股份有限公司 一种未导出的函数地址和数据结构偏移的获取方法及装置
WO2016091071A1 (zh) * 2014-12-11 2016-06-16 北京奇虎科技有限公司 加载Linux内核驱动的方法及装置
CN105988811A (zh) * 2015-02-17 2016-10-05 华为技术有限公司 获取操作系统的内核控制流程图的方法和装置
US20170003941A1 (en) * 2015-06-30 2017-01-05 International Business Machines Corporation Initialization status of a register employed as a pointer
US20180196801A1 (en) * 2017-01-09 2018-07-12 International Business Machines Corporation Linker rewriting to eliminate toc pointer references
CN109857520A (zh) * 2019-01-18 2019-06-07 四川大学 一种虚拟机自省中的语义重构改进方法及系统
CN111709031A (zh) * 2020-05-28 2020-09-25 杭州电子科技大学 一种覆盖率引导的VxWorks内核模糊测试方法

Patent Citations (10)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20130086338A1 (en) * 2011-10-03 2013-04-04 International Business Machines Corporation Linking code for an enhanced application binary interface (abi) with decode time instruction optimization
CN103544090A (zh) * 2013-10-16 2014-01-29 北京航空航天大学 虚拟机进程监控方法和装置
WO2016091071A1 (zh) * 2014-12-11 2016-06-16 北京奇虎科技有限公司 加载Linux内核驱动的方法及装置
CN105988811A (zh) * 2015-02-17 2016-10-05 华为技术有限公司 获取操作系统的内核控制流程图的方法和装置
US20170003941A1 (en) * 2015-06-30 2017-01-05 International Business Machines Corporation Initialization status of a register employed as a pointer
CN105160001A (zh) * 2015-09-09 2015-12-16 山东省计算中心(国家超级计算济南中心) 一种Linux系统物理内存镜像文件分析方法
CN105550575A (zh) * 2015-12-03 2016-05-04 北京神州绿盟信息安全科技股份有限公司 一种未导出的函数地址和数据结构偏移的获取方法及装置
US20180196801A1 (en) * 2017-01-09 2018-07-12 International Business Machines Corporation Linker rewriting to eliminate toc pointer references
CN109857520A (zh) * 2019-01-18 2019-06-07 四川大学 一种虚拟机自省中的语义重构改进方法及系统
CN111709031A (zh) * 2020-05-28 2020-09-25 杭州电子科技大学 一种覆盖率引导的VxWorks内核模糊测试方法

Non-Patent Citations (4)

* Cited by examiner, † Cited by third party
Title
傅玉;邓艺;孙晓山;程亮;张阳;冯登国: "面向二进制程序的空指针解引用错误的检测方法", 计算机学报, no. 003, 31 December 2018 (2018-12-31) *
傅玉;邓艺;孙晓山;程亮;张阳;冯登国;: "面向二进制程序的空指针解引用错误的检测方法", 计算机学报, no. 03, 19 April 2017 (2017-04-19) *
向勇;曹睿东;毛英明;: "基于QEMU的动态函数调用跟踪", 计算机研究与发展, no. 07, 15 July 2017 (2017-07-15) *
李雪: "基于语法的源代码差异分析及与内核分析平台的集成", 31 December 2016 (2016-12-31) *

Similar Documents

Publication Publication Date Title
Wilson et al. Efficient context-sensitive pointer analysis for C programs
Tan et al. Making k-object-sensitive pointer analysis more precise with still k-limiting
US20040230957A1 (en) Methods for comparing versions of a program
US20020010911A1 (en) Compile time pointer analysis algorithm statement of government interest
US8122440B1 (en) Method and apparatus for enumerating external program code dependencies
CN111796831B (zh) 一种多芯片兼容的编译方法和装置
US20200089492A1 (en) Software dependency shading
JPH0744508A (ja) プログラム分割方法
US20110126179A1 (en) Method and System for Dynamic Patching Software Using Source Code
CN112905447B (zh) 一种区块链虚拟机的测试方法和系统
US6308321B1 (en) Method for determining program control flow
US8458679B2 (en) May-constant propagation
Peter et al. Sisyphus, a workflow manager designed for machine translation and automatic speech recognition
US20070050380A1 (en) Nullable and late binding
CN114756456A (zh) 一种持续集成方法、装置以及计算机可读存储介质
CN112016099B (zh) 二进制程序过程间静态污点分析方法及系统
Johnson et al. Experiences in using cetus for source-to-source transformations
CN111158667B (zh) 代码注入方法和装置、电子设备及存储介质
CN114281338A (zh) 一种获取Linux内核中数据结构偏移的方法和装置
CN114281338B (zh) 一种获取Linux内核中数据结构偏移的方法和装置
CN108920149B (zh) 编译方法和编译装置
CN113360373A (zh) 一种移动应用Activity页面全遍历的测试方法
CN110737429A (zh) 一种利用Makefile自身的依赖关系的模块化编译方法和装置
CN110737438A (zh) 一种数据处理方法和装置
Lamzed-Short et al. Towards automated kernel fusion for the optimisation of scientific applications

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