过程间静态程序分析信息提取方法、装置及设备制造方法及图纸

技术编号:18165231 阅读:51 留言:0更新日期:2018-06-09 11:16
本发明专利技术实施例提供一种过程间静态程序分析信息提取方法、装置及设备,其中,该方法包括:遍历LLVM IR文件中的指令;基于br指令和ret指令,提取过程内程序分析信息;确定LLVM IR文件中的call指令是否是函数指针相关的call指令;其中,若不是,则从call指令中提取直接函数调用的信息;若是,则,根据call指令之前的store指令及load指令,提取call指令中函数指针的指向信息;在遍历结束后,基于提取到的过程内程序分析信息,以及所有直接函数调用的信息和函数指针的指向信息,生成过程间静态程序分析信息。从而解决了静态程序分析中函数指针指向信息获取不够准确的问题。

Process static program analysis information extraction method, device and equipment

The present invention provides an inter process static program analysis information extraction method, device, and equipment, in which the method includes: traversing instructions in the LLVM IR file; extracting the program analysis information in the process based on the br instruction and the RET instruction, and determining whether the call instruction in the LLVM IR file is a call instruction related to the function pointer. In which, if not, the information of the direct function call is extracted from the call instruction; if, then, based on the store instruction and the load instruction before the call instruction, the directing information of the function pointer in the call instruction is extracted; after the traversal, the program analysis information is based on the extracted process, and all direct functions are called. Information and pointer information to generate static program analysis information. It solves the problem that the function pointer is not accurate enough to get information in static program analysis.

【技术实现步骤摘要】
过程间静态程序分析信息提取方法、装置及设备
本专利技术实施例涉及计算机
,尤其涉及一种过程间静态程序分析信息提取方法、装置及设备。
技术介绍
现代软件系统的复杂性越来越突出,程序的规模也越来越大,难以直观地了解程序的编码逻辑结构。过程间信息以及过程内信息能够反映软件系统中的程序编码逻辑,在对程序的理解和分析、软件的测试、调试和维护、编译优化、错误定位、程序错误(bug)查找、过程间数据流分析、回溯测试等软件工程领域中都有着广泛的应用,完整的过程间信息和过程内信息更好地辅助程序验证和程序调试,提高程序分析的质量。现有技术中,SourceInsight是一个项目向导的程序编辑器和代码浏览器,具有对引用树、类继承图和调用树等程序分析信息的可视化支持,并可以生成函数调用图。CodeViz是一个C源码静态分析工具,针对C程序生成可视化的函数调用图,通过给GCC打补丁,在编译源文件时dump出函数调用信息,再通过Perl脚本提取函数调用信息。Cflow是一个C源码程序静态分析工具,它可以产生前向和反向的两种函数调用图,直接对源码进行分析,生成一个C程序的函数调用信息的外部引用集合。CallTree是一个C源码静态调用树生成器,通过分析C源码,提取函数调用信息。这些方法和技术均不能获取函数指针指向的信息,存在函数调用信息获取不够完善的问题:SourceInsight和CodeViz不能获取函数指针指向的信息;CallTree不能获取函数指针指向的真实信息;CodeViz、CallTree以及Cflow不能完善地处理库函数调用信息。
技术实现思路
本专利技术实施例提供一种过程间静态程序分析信息提取方法、装置及设备,用以解决静态程序分析中函数指针指向信息获取不够准确的问题。本专利技术实施例第一方面提供一种过程间静态程序分析信息提取方法,该方法包括:遍历LLVMIR文件中的指令;基于所述LLVMIR文件中的br指令和ret指令,从所述LLVMIR文件中提取过程内程序分析信息;确定所述LLVMIR文件中的call指令是否是函数指针相关的call指令;其中,若不是,则从所述call指令中提取直接函数调用的信息;若是,则,根据所述call指令之前的store指令及load指令,提取所述call指令中函数指针的指向信息;在遍历结束后,基于提取到的过程内程序分析信息,以及所有直接函数调用的信息和函数指针的指向信息,生成过程间静态程序分析信息。可选的,所述从所述call指令中提取直接函数调用的信息,包括:将所述call指令中的函数的名称与预先存储的库函数名称进行匹配;其中,若匹配,则提取所述call指令的库函数直接调用信息;若不匹配,则提取所述call指令的一般函数直接调用信息,其中一般函数直接调用是指库函数以外的其他函数的直接调用。可选的,所述根据所述call指令之前的store指令及load指令,提取所述call指令中函数指针的指向信息,包括:根据所述call指令之前的store指令及load指令,确定所述call指令中函数指针指向的函数,并确定所述函数是否是库函数;其中,若是,则提取所述call指令的函数指针所指向的函数的名称信息以及所述函数为库函数直接调用的信息;若不是,则提取所述call指令的函数指针所指向的函数的名称信息,以及所述函数为一般函数直接调用的信息。可选的,所述基于所述LLVMIR文件中的br指令和ret指令,从所述LLVMIR文件中提取过程内程序分析信息,包括:基于所述LLVMIR文件中的br指令和ret指令,获取所述LLVMIR文件中函数的基本块,从所述LLVMIR文件中函数的基本块中提取过程内程序分析信息。本专利技术实施例第二方面提供一种过程间静态程序分析信息提取装置,包括:遍历模块,用于遍历LLVMIR文件中的指令;第一提取模块,用于基于所述LLVMIR文件中的br指令和ret指令,从所述LLVMIR文件中提取过程内程序分析信息;确定模块,用于确定所述LLVMIR文件中的call指令是否是函数指针相关的call指令;第二提取模块,用于在所述call指令不是函数指针相关的call指令时,从所述call指令中提取直接函数调用的信息;第三提取模块,用于在所述call指令是函数指针相关的call指令时,根据所述call指令之前的store指令及load指令,提取所述call指令中函数指针的指向信息;生成模块,用于在遍历结束后,基于提取到的过程内程序分析信息,以及所有直接函数调用的信息和函数指针的指向信息,生成过程间静态程序分析信息。可选的,所述第二提取模块,包括:匹配子模块,用于将所述call指令中的函数的名称与预先存储的库函数名称进行匹配;第一提取子模块,用于在匹配时,提取所述call指令的库函数直接调用信息;第二提取子模块,用于在不匹配时,取所述call指令的一般函数直接调用信息,其中一般函数直接调用是指库函数以外的其他函数的直接调用。可选的,所述第三提取模块,具体用于根据所述call指令之前的store指令及load指令,确定所述call指令中函数指针指向的函数,并确定所述函数是否是库函数;其中,若是,则提取所述call指令的函数指针所指向的函数的名称信息以及所述函数为库函数直接调用的信息;若不是,则提取所述call指令的函数指针所指向的函数的名称信息,以及所述函数为一般函数直接调用的信息。可选的,所述第一提取模块,具体用于:基于所述LLVMIR文件中的br指令和ret指令,获取所述LLVMIR文件中函数的基本块,从所述LLVMIR文件中函数的基本块中提取过程内程序分析信息。本专利技术实施例第三方面提供一种程序分析设备,包括:处理器:用于存储所述处理器可执行指令的存储器;当所述处理器执行所述可执行指令时,执行如下方法:遍历LLVMIR文件中的指令;基于所述LLVMIR文件中的br指令和ret指令,从所述LLVMIR文件中提取过程内程序分析信息;确定所述LLVMIR文件中的call指令是否是函数指针相关的call指令;其中,若不是,则从所述call指令中提取直接函数调用的信息;若是,则,根据所述call指令之前的store指令及load指令,提取所述call指令中函数指针的指向信息;在遍历结束后,基于提取到的过程内程序分析信息,以及所有直接函数调用的信息和函数指针的指向信息,生成过程间静态程序分析信息。本专利技术实施例第四方面提供一种计算机可读存储介质,包括指令,当所述指令在所述计算机上运行时,所述计算机执行如下方法:遍历LLVMIR文件中的指令;基于所述LLVMIR文件中的br指令和ret指令,从所述LLVMIR文件中提取过程内程序分析信息;确定所述LLVMIR文件中的call指令是否是函数指针相关的call指令;其中,若不是,则从所述call指令中提取直接函数调用的信息;若是,则,根据所述call指令之前的store指令及load指令,提取所述call指令中函数指针的指向信息;在遍历结束后,基于提取到的过程内程序分析信息,以及所有直接函数调用的信息和函数指针的指向信息,生成过程间静态程序分析信息。在本专利技术实施例中,通过遍历LLVMIR文件中的指令;基于LLVMIR文件中的br指令和ret指令,从LLVMIR文件本文档来自技高网...
过程间静态程序分析信息提取方法、装置及设备

【技术保护点】
一种过程间静态程序分析信息提取方法,其特征在于,包括:遍历LLVM IR文件中的指令;基于所述LLVM IR文件中的br指令和ret指令,从所述LLVM IR文件中提取过程内程序分析信息;确定所述LLVM IR文件中的call指令是否是函数指针相关的call指令;其中,若不是,则从所述call指令中提取直接函数调用的信息;若是,则,根据所述call指令之前的store指令及load指令,提取所述call指令中函数指针的指向信息;在遍历结束后,基于提取到的过程内程序分析信息,以及所有直接函数调用的信息和函数指针的指向信息,生成过程间静态程序分析信息。

【技术特征摘要】
1.一种过程间静态程序分析信息提取方法,其特征在于,包括:遍历LLVMIR文件中的指令;基于所述LLVMIR文件中的br指令和ret指令,从所述LLVMIR文件中提取过程内程序分析信息;确定所述LLVMIR文件中的call指令是否是函数指针相关的call指令;其中,若不是,则从所述call指令中提取直接函数调用的信息;若是,则,根据所述call指令之前的store指令及load指令,提取所述call指令中函数指针的指向信息;在遍历结束后,基于提取到的过程内程序分析信息,以及所有直接函数调用的信息和函数指针的指向信息,生成过程间静态程序分析信息。2.根据权利要求1所述的方法,其特征在于,所述从所述call指令中提取直接函数调用的信息,包括:将所述call指令中的函数的名称与预先存储的库函数名称进行匹配;其中,若匹配,则提取所述call指令的库函数直接调用信息;若不匹配,则提取所述call指令的一般函数直接调用信息,其中一般函数直接调用是指库函数以外的其他函数的直接调用。3.根据权利要求1所述的方法,其特征在于,所述根据所述call指令之前的store指令及load指令,提取所述call指令中函数指针的指向信息,包括:根据所述call指令之前的store指令及load指令,确定所述call指令中函数指针指向的函数,并确定所述函数是否是库函数;其中,若是,则提取所述call指令的函数指针所指向的函数的名称信息以及所述函数为库函数直接调用的信息;若不是,则提取所述call指令的函数指针所指向的函数的名称信息,以及所述函数为一般函数直接调用的信息。4.根据权利要求1-3中任一项所述的方法,其特征在于,所述基于所述LLVMIR文件中的br指令和ret指令,从所述LLVMIR文件中提取过程内程序分析信息,包括:基于所述LLVMIR文件中的br指令和ret指令,获取所述LLVMIR文件中函数的基本块,从所述LLVMIR文件中函数的基本块中提取过程内程序分析信息。5.一种过程间静态程序分析信息提取装置,其特征在于,包括:遍历模块,用于遍历LLVMIR文件中的指令;第一提取模块,用于基于所述LLVMIR文件中的br指令和ret指令,从所述LLVMIR文件中提取过程内程序分析信息;确定模块,用于确定所述LLVMIR文件中的call指令是否是函数指针相关的call指令;第二提取模块,用于在所述call指令不是函数指针相关的call指令时,从所述call指令中提取直接函数调用的信息;第三提取模块,用于在所述call指令是函数指针相关的call指令时,根据所述call指令之前的store指令及load指令,提取所述call指令中函数指针的指向信息;生成模块,用于在遍历结束后,基于提...

【专利技术属性】
技术研发人员:衷璐洁莫培弘
申请(专利权)人:首都师范大学
类型:发明
国别省市:北京,11

网友询问留言 已有0条评论
  • 还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。

1