CN103955424B - 一种虚拟化嵌入式二进制软件缺陷检测系统 - Google Patents

一种虚拟化嵌入式二进制软件缺陷检测系统 Download PDF

Info

Publication number
CN103955424B
CN103955424B CN201410113492.5A CN201410113492A CN103955424B CN 103955424 B CN103955424 B CN 103955424B CN 201410113492 A CN201410113492 A CN 201410113492A CN 103955424 B CN103955424 B CN 103955424B
Authority
CN
China
Prior art keywords
module
defects detection
engine modules
software
program
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.)
Active
Application number
CN201410113492.5A
Other languages
English (en)
Other versions
CN103955424A (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.)
Hangzhou Dianzi University
Original Assignee
Hangzhou Dianzi University
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 Hangzhou Dianzi University filed Critical Hangzhou Dianzi University
Priority to CN201410113492.5A priority Critical patent/CN103955424B/zh
Publication of CN103955424A publication Critical patent/CN103955424A/zh
Application granted granted Critical
Publication of CN103955424B publication Critical patent/CN103955424B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Landscapes

  • Debugging And Monitoring (AREA)
  • Stored Programmes (AREA)

Abstract

本发明公开了一种虚拟化嵌入式二进制软件缺陷检测系统。本发明中的用户管理模块对整个系统进行控制,指定缺陷检测类型与检测的范围,将原始的二进制文件和指令传送给缺陷检测引擎模块。缺陷检测引擎模块为嵌入式二进制软件缺陷检测提供分析工具,根据用户指定的缺陷检测范围、缺陷检测类型指令对原始的待检测二进制软件进行插桩操作。多体系结构仿真器模块在计算机上仿真出嵌入式平台硬件,接收缺陷检测引擎模块插桩好后的二进制程序中间代码并将其编译成特定的嵌入式平台上的可执行文件。本发明使用纯软件的方式进行嵌入式二进制软件的缺陷检测,摆脱了对昂贵的开发板和外部设备的依赖,具有很好的通用性。

Description

一种虚拟化嵌入式二进制软件缺陷检测系统
技术领域
本发明涉及的是一种软件缺陷检测系统,具体是一种虚拟化嵌入式二进制软件缺陷检测系统。
背景技术
随着嵌入式系统应用的不断深入和硬件技术的不断革新,嵌入式软件的规模和复杂度与日俱增。然而伴随而来的大量的软件缺陷成为隐藏在高度智能化和信息化系统中的一颗定时炸弹,对各类系统造成直接的威胁。因此,保证嵌入式软件的可靠性成为当前面临的严峻挑战。
由于嵌入式系统包含两个方面:硬件部分和软件部分。这就给嵌入式软件的开发与调试带来了巨大的困难和挑战,原因在于既要求开发人员掌握电子专业嵌入式硬件方面的知识,也要求他们掌握计算机专业软件方面的知识。而且传统的嵌入式软件开发环境需要用到很多专门的软件和设备,例如专门的开发板、JTAG口代理软件、ADS1.2编译环境、串口调试器和以太网检测工具等。
同时随着硬件结构越发复杂和软件规模的快速增长,嵌入式应用程序的开发变得缓慢而低效。即使解决了这些问题,嵌入式应用程序的在线开发方式,也给开发者设置了很高的门槛。只有摆脱在线开发方式中对昂贵硬件设备的依赖和降低在线调试方法的复杂性,才能快速、高效地开发出实用的嵌入式应用程序。
发明内容
针对传统的嵌入式二进制软件缺陷检测中存在的问题,本发明提出了一种利用虚拟仿真技术进行嵌入式二进制软件缺陷检测的系统。使用完全虚拟化技术仿真嵌入式硬件平台,然后在仿真的嵌入式平台上使用动态缺陷检测技术对嵌入式二进制软件进行缺陷检测。
本发明是通过以下技术方案实现的:
本发明包括用户管理模块、缺陷检测引擎模块和多体系结构仿真器模块,其中:用户管理模块对整个系统进行控制,指定缺陷检测类型与检测的范围,将原始的二进制文件和指令传送给缺陷检测引擎模块,并根据缺陷检测引擎模块的反馈信息生成缺陷检测报告;缺陷检测引擎模块为嵌入式二进制软件缺陷检测提供特定功能的分析工具,根据用户指定的缺陷检测范围、缺陷检测类型等指令对原始的待检测二进制软件进行插桩操作,得到插桩后的二进制程序中间代码,然后将中间代码传递给多体系结构仿真器模块,并根据多体系结构仿真模块反馈的信息对软件的缺陷进行判别;多体系结构仿真器模块在普通的计算机上仿真出特定的嵌入式平台硬件,接收缺陷检测引擎模块插桩好后的二进制程序中间代码并将其编译成特定的嵌入式平台上的可执行文件,在缺陷检测引擎模块的指导下运行可执行文件,然后将运行的结果反馈给缺陷检测引擎模块。
所述的用户管理模块包括:报告管理模块和图形界面模块。其中:报告管理模块将缺陷引擎模块反馈的信息利用数据可视化技术生成便于用户理解的报告。图形界面模块提供便于交互的图形界面的人机接口,用户通过图形界面模块与检测引擎模块进行交互,指定待测的程序的类型,如ARM的程序,RTOS上的程序等,还可以选择检测的范围,如检测内存溢出、栈溢出、堆溢出、整数溢出等。
所述的缺陷检测引擎模块包括:内存检查模块、函数调用分析模块、缓存分析模块、线程分析模块和堆栈分析模块。其中:内存检查模块对软件内存方面的缺陷检测,比如:堆溢出、栈溢出、不正确的内存释放、内存访问越界、内存泄露和内存覆盖等内存方面的问题。函数调用分析模块用来对软件中的各种函数调用关系进行分析。缓存分析模块模拟程序与机器进行交互的缓存系统和分支预测系统,分析程序的cache命中问题。线程分析模块用来检查C\C++、Fortran程序中使用POSIX pthread原语的线程同步与竞争的问题。堆栈分析模块对程序中使用的堆栈进行衡量,分析程序中堆内存的使用情况。
所述的多体系结构仿真器模块包括:加载器模块、初始化模块、代码cache模块、OS调用仿真模块。其中:加载器模块将Guest Code和Guest Data写入到专门用于暂存客户机映像的内存区中,并且加载运行时软件的代码。初始化模块为代码cache和异常索引表分配内存空间,同时建立起客户机应用程序运行时所需的全部环境。代码cache模块将翻译过的基本代码块暂存,利用缓存的技术,避免重复翻译导致的性能下降。OS调用仿真模块在遇到执行客户机程序中的系统调用时,将其转化为一个或者多个作了修改的本地系统调用进行处理,然后将结果返回给客户机程序。
本发明具有下述的有益效果:
1、本发明使用纯软件的方式进行嵌入式二进制软件的缺陷检测,与传统的嵌入式软件缺陷检测方法相比摆脱了对昂贵的开发板和外部设备的依赖,具有很好的通用性。
2、本发明在多体系结构仿真器模块和缺陷引擎模块的协同工作方面使用了深度代码融合的方法,减少中间步骤,大大提升了缺陷检测的效率。
3、本发明的多体系结构仿真器模块具有拓展性,对不同架构的嵌入式硬件都有很好的适应能力。虽然目前只支持嵌入式ARM系列的开发平台,但由于采用了开放式可扩展的架构,后期可以支持不同的硬件平台和体系结构。
附图说明
图1 系统架构示意图。
图2 实施例的工作流程图。
具体实施方式
下面结合附图和实施例对本发明作进一步的详细说明,本实施例在以本发明技术方案为前提下进行实施,给出了详细的实施方式和具体的操作过程,但本发明的保护范围不限于下述的实施例。
如同1所示,本实施例包括:用户管理模块、缺陷检测引擎模块和多体系结构仿真器模块,其中:用户管理模块对整个系统进行控制,指定缺陷检测类型与检测的范围,将原始的二进制文件和指令传送给缺陷检测引擎模块,并根据缺陷检测引擎模块的反馈信息生成缺陷检测报告;缺陷检测引擎模块为嵌入式二进制软件缺陷检测提供特定功能的分析工具,根据用户指定的缺陷检测范围、缺陷检测类型等指令对原始的待检测二进制软件进行插桩操作,得到插桩后的二进制程序中间代码,然后将中间代码传递给多体系结构仿真器模块,并根据多体系结构仿真模块反馈的信息对软件的缺陷进行判别;多体系结构仿真器模块在普通的计算机上仿真出特定的嵌入式平台硬件,接收缺陷检测引擎模块插桩好后的二进制程序中间代码并将其编译成特定的嵌入式平台上的可执行文件,在缺陷检测引擎模块的指导下运行可执行文件,然后将运行的结果反馈给缺陷检测引擎模块。
如图2所示,本实施例具体操作过程如下:
(1)用户管理模块指定待检测的缺陷类型
由于嵌入式二进制软件的缺陷类型很多,且各种类型的缺陷的影响程度不同,为了提高执行效率可以按需指定待检测的缺陷类型,然后将待测程序与检测范围传递给缺陷检测引擎模块。
(2)缺陷检测引擎模块生成中间代码
缺陷检测引擎模块接收用户管理模块传递的参数与原始的待测程序,然后调用相应的插桩模块对待检测的嵌入式二进制程序进行插桩得到一个统一形式的中间代码。具体分为8步完成这个HostCode-->IR Code-->Host Code的过程:
1)反汇编:从机器码翻译为中间代码IR,此时为树型IR。
2)优化1:先从树型IR转换为平展型的IR,然后做优化,包括:删除冗余Put/PutI/Get/GetI,常量传递,删除死代码,删除公共子表达式,展开循环loop等。
3)插桩:这是唯一交给工具插件做的事情,工具可以任意添加分析代码。
4)优化2:这一遍是对插桩好的代码块做一个简单的优化,只做常量传递和死代码移除。
5)树型IR建立:将平展的IR转换为树型IR,为指令选择做准备。将赋值给只使用过一次的临时变量的表达式直接代入那个临时变量的使用点,删除之前的赋值语句,例如赋值语句“ t2=add(t1, con) ”,t2在其他地方只使用过一次,则用表达式“ add(t1, con) ”直接在使用t2的语句中取代t2的位置。
6)指令选择:树型IR转换为使用虚拟寄存器的指令序列,指令选择器使用一个简单的,贪婪的自顶向下的树匹配算法。
7)寄存器分配:依然为指令序列形式,线性扫描寄存器分配器用实际的主机寄存器取代虚拟寄存器,必要时插入溢出。
8)汇编:指令序列转换为机器代码,最后的汇编阶段只是对选择的指令进行适当的编码,然后把它们写入到一块内存中。
其中步骤1)、6)、8)与特定体系结构有关,其他的步骤都是与平台无关的,处理后的中间代码将传递给虚拟仿真器模块处理执行。
(3)虚拟仿真器模块执行中间代码
虚拟仿真器模块接收缺陷检测引擎模块传递的插桩后的嵌入式二进制程序的中间代码基本块,然后将其翻译成本地代码块,并模拟嵌入式二进制软件在真实硬件中的执行情况,然后再将二进制代码执行时的运行信息反馈给缺陷检测引擎模块,由缺陷检测引擎模块分析待测嵌入式二进制软件是否存在某种缺陷。
虚拟仿真器模块与缺陷检测引擎模块存在着紧密的交互,系统采用了代码融合的方案来满足仿真器模块与缺陷检测引擎模块对高性能交互的需求。具体步骤如下:基于对两者原理的具体分析,采用代码融合的方法将二者的中间代码统一起来,让缺陷引擎模块来做嵌入式软件的反编译工作,然后由缺陷引擎模块来插入相应的功能代码,充当编译前端的功能,接着把处理后的中间代码交由虚拟仿真模块处理执行,并将收集到的缺陷信息反馈给缺陷检测引擎模块。
(4)用户层生成缺陷检测报告
报告管理模块根据缺陷检测引擎反馈的执行情况生成便于理解的缺陷检测报告。图形界面提供了可视化的人机接口便于操作,同时具有一定的数据可视化的功能,能够形象地展示缺陷检测的执行情况、最终的结果、检测到的缺陷等。
本发明使用了虚拟仿真技术在普通的计算机上实现了虚拟化嵌入式二进制软件缺陷检测系统。该缺陷检测系统摆脱了对昂贵的开发板和外部设备的依赖,具有很好的通用性,在多体系结构虚拟仿真器模块和缺陷引擎模块的协同工作方面使用了深度代码融合的方法,减少中间步骤,大大提升了缺陷检测的效率,具有良好的拓展性,对不同架构的嵌入式硬件都有很好的适应能力。

Claims (1)

1. 一种虚拟化嵌入式二进制软件缺陷检测系统,包括用户管理模块、缺陷检测引擎模块和多体系结构仿真器模块,其特征在于:
所述的用户管理模块对整个系统进行控制,指定缺陷检测类型与检测的范围,将原始的二进制文件和指令传送给缺陷检测引擎模块,并根据缺陷检测引擎模块的反馈信息生成缺陷检测报告;
所述的缺陷检测引擎模块为嵌入式二进制软件缺陷检测提供分析工具,根据用户指定的缺陷检测范围、缺陷检测类型指令对原始的待检测二进制软件进行插桩操作,得到插桩后的二进制程序中间代码,然后将中间代码传递给多体系结构仿真器模块,并根据多体系结构仿真模块反馈的信息对软件的缺陷进行判别;
所述的多体系结构仿真器模块在计算机上仿真出嵌入式平台硬件,接收缺陷检测引擎模块插桩好后的二进制程序中间代码并将其编译成特定的嵌入式平台上的可执行文件,在缺陷检测引擎模块的指导下运行可执行文件,然后将运行的结果反馈给缺陷检测引擎模块;
其中用户管理模块包括报告管理模块和图形界面模块;所述报告管理模块将缺陷引擎模块反馈的信息利用数据可视化技术生成便于用户理解的报告;图形界面模块提供便于交互的图形界面的人机接口,用户通过图形界面模块与检测引擎模块进行交互,指定待测的程序的类型;
缺陷检测引擎模块包括内存检查模块、函数调用分析模块、缓存分析模块、线程分析模块和堆栈分析模块;所述内存检查模块对软件内存方面的缺陷检测,所述函数调用分析模块用来对软件中的各种函数调用关系进行分析;所述缓存分析模块模拟程序与机器进行交互的缓存系统和分支预测系统,分析程序的cache命中问题;所述线程分析模块用来检查C\C++、Fortran程序中使用POSIX pthread原语的线程同步与竞争的问题;所述堆栈分析模块对程序中使用的堆栈进行衡量,分析程序中堆内存的使用情况;
多体系结构仿真器模块包括加载器模块、初始化模块、代码cache模块和OS调用仿真模块,所述加载器模块将Guest Code和Guest Data写入到专门用于暂存客户机映像的内存区中,并且加载运行时软件的代码;所述初始化模块为代码cache和异常索引表分配内存空间,同时建立起客户机应用程序运行时所需的全部环境;所述代码cache模块将翻译过的基本代码块暂存,利用缓存的技术,避免重复翻译导致的性能下降;所述OS调用仿真模块在遇到执行客户机程序中的系统调用时,将其转化为一个或者多个作了修改的本地系统调用进行处理,然后将结果返回给客户机程序。
CN201410113492.5A 2014-03-25 2014-03-25 一种虚拟化嵌入式二进制软件缺陷检测系统 Active CN103955424B (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN201410113492.5A CN103955424B (zh) 2014-03-25 2014-03-25 一种虚拟化嵌入式二进制软件缺陷检测系统

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN201410113492.5A CN103955424B (zh) 2014-03-25 2014-03-25 一种虚拟化嵌入式二进制软件缺陷检测系统

Publications (2)

Publication Number Publication Date
CN103955424A CN103955424A (zh) 2014-07-30
CN103955424B true CN103955424B (zh) 2016-08-24

Family

ID=51332699

Family Applications (1)

Application Number Title Priority Date Filing Date
CN201410113492.5A Active CN103955424B (zh) 2014-03-25 2014-03-25 一种虚拟化嵌入式二进制软件缺陷检测系统

Country Status (1)

Country Link
CN (1) CN103955424B (zh)

Families Citing this family (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN105630479A (zh) * 2014-11-28 2016-06-01 中兴通讯股份有限公司 程序运行过程中的异常处理方法及装置
CN115617687B (zh) * 2022-10-31 2023-08-25 清华大学 程序插桩方法、装置、设备和存储介质

Citations (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US6718485B1 (en) * 1999-11-16 2004-04-06 Parasoft Corporation Software emulating hardware for analyzing memory references of a computer program
CN101937392A (zh) * 2010-08-27 2011-01-05 华南理工大学 一种嵌入式软件动态缺陷检测方法

Patent Citations (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US6718485B1 (en) * 1999-11-16 2004-04-06 Parasoft Corporation Software emulating hardware for analyzing memory references of a computer program
CN101937392A (zh) * 2010-08-27 2011-01-05 华南理工大学 一种嵌入式软件动态缺陷检测方法

Non-Patent Citations (1)

* Cited by examiner, † Cited by third party
Title
基于反汇编技术的嵌入式软件缺陷静态检测研究;杨莎莹;《中国优秀硕士学位论文全文数据库 信息科技辑》;20131205(第82期);全文 *

Also Published As

Publication number Publication date
CN103955424A (zh) 2014-07-30

Similar Documents

Publication Publication Date Title
CN102760098B (zh) 面向bit软件测试的处理器故障注入方法及其模拟器
EP2359247B1 (en) Transforming user script code for debugging
CN101739333B (zh) 应用程序的调试方法、调试工具及调试装置
US10353679B2 (en) Collecting profile data for modified global variables
Böhm et al. Generalized just-in-time trace compilation using a parallel task farm in a dynamic binary translator
US20130024646A1 (en) Method and Simulator for Simulating Multiprocessor Architecture Remote Memory Access
US9952837B1 (en) Reusable component in a modeling environment
CN101968770A (zh) 一种可复用的嵌入式软件测试开发方法和系统
WO2016004657A1 (zh) 一种针对嵌入式软件的测试用例自动化生成装置及其方法
JP2015524126A (ja) 適応的に移植性を有したライブラリ
CN1949186A (zh) 一种程序调测系统及用于程序调测系统的映射方法
Zheng et al. CIVL: formal verification of parallel programs
Hong et al. The application guide of mixed programming between MATLAB and other programming languages
CN101706750B (zh) 一种基于嵌入式模拟器的测试桩获取方法
CN104750603A (zh) 一种多核dsp软件仿真器及其物理层软件测试方法
US8972931B1 (en) Contextual verification of generated code
CN102231133A (zh) 基于重写逻辑的并发实时程序验证的优化处理系统及其方法
CN104881358A (zh) 一种程序仿真测试方法及系统
Al Awar et al. A performance portability framework for Python
CN103942092A (zh) 一种支持LabView图形化编程的HLA协同仿真方法
CN103955424B (zh) 一种虚拟化嵌入式二进制软件缺陷检测系统
US20170083298A1 (en) Resilient format for distribution of ahead-of-time compiled code components
CN102508697B (zh) 一种Java实现8位嵌入式CPU仿真运行环境的方法
CN103514087A (zh) 一种测量仪器软件仿真验证系统
CN101593257B (zh) 基于.Net虚拟机的软件保护系统和方法

Legal Events

Date Code Title Description
C06 Publication
PB01 Publication
C10 Entry into substantive examination
SE01 Entry into force of request for substantive examination
C14 Grant of patent or utility model
GR01 Patent grant
EE01 Entry into force of recordation of patent licensing contract

Application publication date: 20140730

Assignee: China Electronic Technology Group Corporation No.36 Research Institute

Assignor: Hangzhou Electronic Science and Technology Univ

Contract record no.: 2016330000164

Denomination of invention: Virtualized embedded type binary software defect detection system

Granted publication date: 20160824

License type: Common License

Record date: 20170302

EE01 Entry into force of recordation of patent licensing contract
EE01 Entry into force of recordation of patent licensing contract

Application publication date: 20140730

Assignee: Jiake Electronics Co., Ltd., Zhejiang

Assignor: Hangzhou Electronic Science and Technology Univ

Contract record no.: 2018330000037

Denomination of invention: Virtualized embedded type binary software defect detection system

Granted publication date: 20160824

License type: Common License

Record date: 20180417

EE01 Entry into force of recordation of patent licensing contract
EE01 Entry into force of recordation of patent licensing contract

Application publication date: 20140730

Assignee: Hangzhou Oko Technology Co., Ltd

Assignor: Hangzhou Electronic Science and Technology Univ

Contract record no.: X2019330000041

Denomination of invention: Virtualized embedded type binary software defect detection system

Granted publication date: 20160824

License type: Common License

Record date: 20191107

EE01 Entry into force of recordation of patent licensing contract