CN101339519B - 面向嵌入式微处理器的软硬结合控制流检测方法 - Google Patents
面向嵌入式微处理器的软硬结合控制流检测方法 Download PDFInfo
- Publication number
- CN101339519B CN101339519B CN2008101369145A CN200810136914A CN101339519B CN 101339519 B CN101339519 B CN 101339519B CN 2008101369145 A CN2008101369145 A CN 2008101369145A CN 200810136914 A CN200810136914 A CN 200810136914A CN 101339519 B CN101339519 B CN 101339519B
- Authority
- CN
- China
- Prior art keywords
- file
- fundamental block
- assembling
- control stream
- assembling file
- 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.)
- Expired - Fee Related
Links
Images
Classifications
-
- Y—GENERAL 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
- Y02—TECHNOLOGIES OR APPLICATIONS FOR MITIGATION OR ADAPTATION AGAINST CLIMATE CHANGE
- Y02D—CLIMATE 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/00—Energy efficient computing, e.g. low power processors, power management or thermal management
Landscapes
- Stored Programmes (AREA)
Abstract
本发明是一种面向嵌入式微处理器的软硬结合控制流检测方法。首先将待运行的C语言程序生成标准汇编文件,其次采用词法分析的方法将汇编文件中包含的用户库和系统库函数连接为一整合汇编文件,采用词法分析的方法通过签名生成程序将整合后的汇编文件进行基本块划分,分析基本块间控制流关系,对各个基本块进行签名,形成新的带有控制流检测数据的汇编文件,再通过修改后的汇编器将汇编文件翻译为目标文件,再由链接器将目标文件转化为二进制映像文件,最后将二进制文件运行到具有控制流检测能力的嵌入式微处理器上。本发明平均冗余代码开销为12%,同基于硬件实现的控制流检测方法相比具有更简单的实现和更高的控制流检测能力,系统未检测率平均仅为1.5%,降低系统运行功耗。
Description
(一)技术领域
本发明涉及一种面向嵌入式微处理器的软硬结合控制流检测方法,属于可信计算的技术领域。
(二)背景技术
目前,控制流检测技术主要应用于星载计算机系统中,通过增加对硬件瞬时性故障的检测能力,来提高系统的可信性。
传统的基于硬件的控制流错误检测方法是看门狗协处理器和看门狗定时器,这两种方法都不需要修改待运行的程序,不用增加冗余检测代码。A.Mahmood andE.J.McCluskey.Concurrent error detection using watchdog processors-asurvey.IEEE Transactions on Computers,1988,37(2):160-174;H.Madeira,J.Camoes,and J.G.Silva.A watchdog processor for concurrent errordetection in multiple processor systems.Microprocessors andMicrosystems,1991,15(3):123-131中均对此有所记载。看门狗定时器与看门狗协处理器相比,虽然硬件实现简单,但是错误检测覆盖率远低于看门狗协处理器。看门狗协处理器的工作原理是,它执行一个和被检测处理器具有相同基本块关系和在每个基本块内具有相同执行时间的程序,因此,可以通过在同一时刻是否执行相同基本块来判断是否发生控制流错误。看门狗协处理器在每个检测点通过系统总线收集被检测处理器的运行信息,将此信息与本身运行状态进行比较,如果相同表示没有发生控制流错误,如果不同,则表示发生控制流错误。但此种方法存在一个比较严重的问题,控制流检测方法不进行指令的语义检测,只要执行周期相同即可。在嵌入式处理器中,指令执行周期比较集中,如8051所有指令的执行周期集中在1-4个周期内,单周期指令64条,双周期指令45条,四周期指令2条,很有可能导致即使指令篡改也不会改变指令的执行周期,因此无法检测控制流错误,导致降低了控制流检测能力。
而传统的基于软件的控制流检测方法,虽然控制流检测能力较高,但是由于冗余代码空间开销很大,一般在30%之上,增加了系统功耗。同时,这部分增加的代码也可能造成控制流错误跳转。基于汇编的CFCSS控制流检测算法(Oh,N.,Shirvani,P.,McCluskey,et al.Control Flow Checking by SoftwareSignatures.Center for Reliable Computing Technical Report.Proceedingsof 51,2002,111-122.)已应用ARGOS卫星上进行测试,其冗余代码开销在25%-43%左右,但相比基于高级语言的软件控制流检测算法(R.Venkatasubramanian,J.P.Hayes,and B.T.Murray.Low-cost on-line faultdetection using control flow assertions.ACM Press.Proceedings of 9thIEEE International On-Line Testing Symposium,2003,340-353;李爱国,洪炳熔,王司.一种软件实现的程序控制流错误检测方法.宇航学报,2006,11:1424-1430)具有更好的错误检测能力和更低的冗余代码空间开销。基于软件的控制流检测方法始终存在的弊端是无法做到遇到跳转指令就触发控制流检测机制,这样将降低控制流错误检测能力。
虽然“A Compiler-Assisted On-Chip Assigned-Signature.Control FlowChecking”(Proceeding of 9th Asia-Pacific Computer Systems ArchitectureConference,Beijing,2004,554-567)中提出通过新增指令方法代替CFCSS控制流检测算法中的检测语句插入到基本块中。但此方法存在的问题首先是,插入到基本块中的冗余指令高于本发明提出的方法;其次,此方法由于需要新增指令,而有些微处理器如8051没有新增指令空间,无法实现此方法;更重要的是由于CFCSS算法中仍然存在检测漏洞和检测错误现象,单纯硬化其方法没有提高其控制流检测能力,这种方法的硬件实现的复杂度也高于本发明提出的方法。在“一种容软错误高可靠微控制器”《计算机学报》2007,10:1662-1673中实现的一种容软错误高可靠微控制器的设计方案中,简单提到通过硬化方法实现CFCSS算法中的检测语句方法,但此方法存在的问题也是只是简单硬化其方法没有提高其控制流检测能力。为了改进CFCSS控制流检测算法,在“An Improved CFCSS ControlFlow Checking Algorithm”(YAN-XIA WU,GUO-CHANG GU,AND KE-HUI WANG,Anti-counterfeiting,Security,Identification,2007 IEEE InternationalWorkshop,Xiamen,2007,16-18)和“POWER-AWARE CONTROL FLOW CHECKINGCOMPILATION:USING LESS BRANCHES TO REDUCE POWER DISSIPATION”(YAN-XIAWU,GUO-CHANG GU,AND KE-HUI WANG,Machine Learning and Cybernetics,2007International Conference,Hong Kong,2986-2989)中提出了通过修改基本块划分原则和修改调整签名位置的方法来降低系统功耗,解决CFCSS算法中存在检测漏洞和检测错误现象的方法。但由于这些方法是纯软件方法,在文中提出的基本块划分方法不便于硬件实现,无法做到直接将算法硬化实现。
(三)发明内容
本发明的目的在于提供一种和基于软件实现的控制流检测方法相比具有更低冗余代码开销,同基于硬件实现的控制流检测方法相比具有更简单的实现和更高的控制流检测能力的面向嵌入式微处理器的软硬结合控制流检测方法。
本发明的目的是这样实现的:
首先将待运行的C语言程序生成标准汇编文件,其次采用词法分析的方法将汇编文件中包含的用户库和系统库函数连接为一整合汇编文件,采用词法分析的方法通过签名生成程序将整合后的汇编文件进行基本块划分,分析基本块间控制流关系,对各个基本块进行签名,形成新的带有控制流检测数据的汇编文件,再通过修改后的汇编器将汇编文件翻译为目标文件,再由链接器将目标文件转化为二进制映像文件,最后将二进制文件运行到具有控制流检测能力的嵌入式微处理器上。
本发明的主要特点体现在:
1、签名信息格式定义
如图1为采用CFCSS算法生成的带控制流检测指令的基本块结构,图2为采用本发明提出的生成的带控制流检测指令的基本块结构。在标准汇编程序中每个基本块增加.sign,S,d, 进行控制流检测时需要的数据。其中伪指令格式如图3,伪指令固定以.sign开始,其后由8位的签名值和8位的签名差构成,数据采用16进制表示。
2、生成带签名信息的汇编文件的算法步骤如下:
输入标准汇编源程序
Foreach每个基本块vj
分配唯一编译时签名值sj,其中si≠sj if i≠j,i,j=1,2,...,N,N为程序中
基本块总数
End for
Foreach每个基本块vj,生成签名差d和插入多调整签名值M赋值语句
if pred(vj)只有一个基本块vi,
生成基本块vj的签名差
elseif pred(vj)由一系列基本块vi,vk,...,vm组成,引入多调整签名值M,
if存在集合S={vi|deg+(vi)=1,vi∈pred(vj)},
任选集合S中一基本块vi作为基础基本块,生成基本块vj的签
名差 由于deg+(vi)=1,则基本块vi的结束标识
为绝对跳转指令或非跳转指令。
if基本块vi结束标识为绝对跳转指令
在其之前插入指令Mn=0
elseif基本块vi结束标识为非跳转指令
在基本块vi最后一条指令之后插入指令Mn=0
End if
Foreach基本块vn∈S-vi
if基本块vn结束标识为绝对跳转指令
在其之前插入指令
elseif基本块vn结束标识为非跳转指令
在基本块vi最后一条指令之后插入指令
End if
End for
Foreach基本块vm∈pred(vj)-S-vi,由于deg+(vm)>1,则基本块
vi的结束标识为条件跳转指令,基于汇编语言的条件跳转指令可
以理解为顺序执行和跳转指令的合体,设succ(vm)={vj,vk}
if基本块vj为基本块vm跳转后执行的基本块
在基本块vm的条件跳转指令之前插入指令
elseif基本块vj为基本块vm顺序执行后的基本块
在基本块vm的条件跳转指令之后插入指令
End if
End for
elseif如果不存在集合S={vi|deg+(vi)=1,vi∈pred(vj)}
任选{vi,vk,...,vn}中一基本块vi作为基础基本块,生成基本
块vj的签名差
Foreach基本块vn∈pred(vj)-vi,设succ(vn)={vj,vk}
if基本块vj为基本块vn跳转后执行的基本块
在基本块vn的条件跳转指令之前插入指令
Elseif基本块vj为基本块vn顺序执行后的基本块
在基本块vn的条件跳转指令之后插入指令
End if
End for
End if
End for
3、控制流检测部件设计方案:
其中使用2个寄存器Greg和Mreg,分别记录当前基本块的运行时签名值和运行时多调整签名值。由PC完成取地址操作,数据总线宽度为8位,硬件在两个时钟周期内完成控制流检测操作:第一个时钟周期从ROM中取签名差di,更新 第二个时钟周期从ROM中取签名si,比较si和Greg的值,由异或门完成比较功能,相同表示没有控制流错误,不同表示控制流错误,通过CFC(Control Flow Checking)信号进行判断。
4、修改汇编器,解析伪指令.sign的步骤:
第一步:在汇编器中解析伪指令.sign。由于LEX进行分析时,在汇编程序处理源文件时,每当碰到一个新的字符串,就会认为它是一个符号、助记符或指令。而签名信息不具备这三者的格式,因而只能是在每趟汇编中,当扫描到.sign后,将标志位置1,让程序跳过处理的下面一行签名数据。在第零次和第一次汇编时,都跳过其后一行不做处理。
第二步:如果是第二趟汇编,则要在汇编时,插入两个字节的签名值。
第三步:增加特殊功能寄存器Greg与Mreg,用于存储运行时签名和多调整签名值。
本发明以8051微处理器为例,通过源码开放的SDCC编译器将测试对象编译生成Intel 8051汇编代码。以Xilinx的FPGA为原型平台,以R80515作为实验的嵌入式处理器,R80515支持所有的ASM51指令。采用Xilinx的ISE工具进行设计,以Moelsim6.0d作为仿真和验证工具。采用Moelsim6.0d随机修改操作指令的0、1码,造成分支消减、生成分支、改变分支操作等错误运行现象,对以下四种标准程序进行了故障注入实验:采用快速傅里叶变换算法(FFT)、初始数据为20×20的矩阵相乘(MM)、冒泡排序(Bubble Sort)及快速排序(Quick Sort)。经实验验证平均冗余代码开销为12%,同基于硬件实现的控制流检测方法相比具有更简单的实现和更高的控制流检测能力,系统未检测率平均仅为1.5%,降低系统运行功耗。
(四)附图说明
图1为CFCSS算法中带签名数据的基本块结构;
图2为本发明提出的带签名数据的基本块结构;
图3为伪指令格式;
图4为电路设计框图;
图5为伪指令具体形式举例;
图6为R80515结构框图;
图7为检测部件位置框图;
图8为传统程序的编译同带控制流检测能力的程序编译过程对比图;
图9为基本块划分流程图;
图10为本发明的流程框图。
(五)具体实施方式
下面结合附图举例对本发明做更详细地描述:
1、连接系统库汇编文件和用户汇编文件:具体操作如下:
用户程序调用系统库时需要系统文件支持,在如图8传统编译过程中,系统库文件已经经过汇编器生成.rel文件,在链接器时进行连接。为了对程序进行完整的控制流检测,需要将系统库汇编文件和用户库汇编文件整合到一个标准汇编文件中。整合步骤如下:
(1)打开标准用户汇编文件,创建整合的汇编文件;
(2)调用词法分析模块对打开的标准汇编文件进行词法分析;
(3)从汇编文件中读取词素,判断其是否为系统库标识;
(4)如果不是系统库标识,返回步骤3;
(5)如果是系统库标识,查找其对应的系统的汇编文件,创建链表结构;
如:_ _sdcc_gsinit_startup对应于crtstart.asm汇编文件
(6)遍历步骤5中的汇编文件,查找其中是否调用其它系统库函数,如果调用,返回步骤5;
(7)如果不是调用,且未到文件尾,返回步骤6,直至遍历完后返回至上层系统汇编文件,继续执行步骤6,如果是顶层系统库汇编文件,继续执行步骤8;
(8)根据遍历关系生成的链表结构,将系统库中的系统库标识替换为汇编语言对应的函数,按顺序将系统库汇编文件插入到整合文件中;
(9)直至扫描到文件尾部;
(10)第2遍扫描用户汇编文件;
(11)从汇编文件中读取词素,判断其是否为系统库标识;
(12)如果不是系统库标识,将其输入到整合的汇编文件中,如果不是文件尾部,返回步骤11继续扫描,如果是文件尾部,结束扫描;
(13)如果是系统库标识,修改整合文件,将其系统库标识替换为汇编语言对应的函数,将其输入到整合的汇编文件中,如果不是文件尾部,返回步骤11继续扫描,如果是文件尾部,结束扫描。
2、整合后的汇编程序经签名生成程序,生成带控制流检测数据的汇编文件,完成如下操作:
(1)首先需要划分基本块、分析基本块间关系,实现步骤:
第一步:由词法分析函数分析中间文件(.gc),划分基本块,其中划分基本块原则:以无条件转移、条件转移、循环、调用、中断、返回跳转语句及标号作为划分标识。对其划分过程如图9所示。
第二步:分析基本块间关系,生成基本块链表(每个有跳转的块中还要生成from和to链表用以表示块与块之间的调用关系)。对于函数调用由于不能马上发现函数返回的调用关系,所以采用先记录函数调用关系的方法。这样还要生成一个函数调用链表用以刻画函数调用之间的关系。
第三步:根据第二步生成的基本块链表和函数调用链表来补充完整函数调用和返回块的关系,从而得到一个完整的基本块链表,这个链表中包含了所有的基本块信息、基本块之间的调用关系等。
(2)生成编译时签名值等检测数据,生成算法实现步骤:
第一步:根据最后的基本块链表生成各个基本块的签名差s,调整签名差d及多调整签名差M,生成步骤如下:
Foreach每个基本块vj
分配唯一编译时签名值sj,其中si≠sj if i≠j,i,j=1,2,...,N,N为程序中
基本块总数
End for
Foreach每个基本块vj,生成签名差d和插入多调整签名值M赋值语句
if pred(vj)只有一个基本块vi,
生成基本块vj的签名差
elseif pred(vj)由一系列基本块vi,vk,...,vm组成,引入多调整签名值M,
if存在集合S={vi|deg+(vi)=1,vi∈pred(vj)},
任选集合S中一基本块vi作为基础基本块,生成基本块vj的签
名差 由于deg+(vi)=1,则基本块vi的结束标识
为绝对跳转指令或非跳转指令。
if基本块vi结束标识为绝对跳转指令
在其之前插入指令Mn=0
elseif基本块vi结束标识为非跳转指令
在基本块vi最后一条指令之后插入指令Mn=0
End if
Foreach基本块vn∈S-vi
if基本块vn结束标识为绝对跳转指令
在其之前插入指令
elseif基本块vn结束标识为非跳转指令
在基本块vi最后一条指令之后插入指令
End if
End for
Foreach基本块vm∈pred(vj)-S-vi,由于deg+(vm)>1,则基本块
vi的结束标识为条件跳转指令,基于汇编语言的条件跳转指令可
以理解为顺序执行和跳转指令的合体,设succ(vm)={vj,vk}
if基本块vj为基本块vm跳转后执行的基本块
在基本块vm的条件跳转指令之前插入指令
elseif基本块vj为基本块vm顺序执行后的基本块
在基本块vm的条件跳转指令之后插入指令
End if
End for
elseif如果不存在集合S={vi|deg+(vi)=1,vi∈pred(vj)}
任选{vi,vk,...,vn}中一基本块vi作为基础基本块,生成基本
块vj的签名差dj:
Foreach基本块vn∈pred(vj)-vi,设succ(vn)={vj,vk}
if基本块vj为基本块vn跳转后执行的基本块
在基本块vn的条件跳转指令之前插入指令
Elseif基本块vj为基本块vn顺序执行后的基本块
在基本块vn的条件跳转指令之后插入指令
End if
End for
End if
End for
第二步:向基本块中插入伪指令.sign,签名值s,签名差d及多调整签名值M。提取插入数据的位置(行号)和需要插入的数据,将这些数据存放到一维数组中,对这些数据按照行号从小到大排序。数据插入位置为:伪指令.sign插入到基本块入口;签名值s,签名差d插入在伪指令.sign的下一行;多调整签名值M插入到相应的条件跳转指令前。伪指令格式具体举例如图5。
8位的签名值为0x32;8位的签名差为0x08。在要求插入签名时,严格遵守约定格式,数字取值为0-F,对于数据不足8位的,用0补足:如0x3应写为0x03之格式,否则将不能通过汇编器。
(3)生成带控制流检测数据的汇编文件
第一步:生成最后文件(.end),读中间文件并写入到最后文件,根据数组中该位置上的数据类型生成相应的代码插入到最终文件中。
第二步:关闭文件,生成带控制流检测数据的汇编文件,修改格式为.asm。3、修改编译器,如图8改变程序编译流程,以SDCC编译器为例,修改步骤如下:
(1)在SDCCmain.c文件中,增加执行连接汇编文件程序的程序;格式如下:
strcpy(exeBuffer,″GCLib″);
strcat(exeBuffer,souFile);
if(my_system(exeBuffer)){
exit(1);
}
(2)在SDCCmain.c文件中,增加执行签名值生成程序的程序;
(3)在SDCCmain.c文件中,增加执行修改后的汇编器语句,同时删除执行原汇编器程序;
(4)在SDCCmain.c文件中,增加执行修改后的链接器语句,同时删除执行原链接器程序。
4、修改汇编器,在此解析为了增加对控制流检测的支持所插入的伪指令.sign
以ASX8051汇编器为例,其汇编器首先将助记符和伪指令采用哈希表的形式存储,在系统初始化时构造成一个静态的哈希表结构,采用哈希表以提高查找的效率。然后为符号构造一个哈希表,在扫描源文本过程中,不断加入新的符号,直到扫描结束。汇编程序就是通过对符号表的维护来实现汇编器的功能。在汇编过程中,采用了三趟汇编过程:
A.第0趟汇编在第0趟汇编过程中,将从汇编源文本中得到的符号加入到符号表中,分为正常符号和临时符号,对于每种符号分别链入不同的指针域
B.第1趟汇编维护符号的段、地址、及偏移信息
C.第2趟汇编出错检查,如果没有错误,输出目标文件
为了支持伪指令.sign,修改汇编器步骤如下:
第一步:在助记符指令表中,插入两条新的伪指令.sign。为此需要定义新的类型:S_SIGN。新增加的伪指令,主要功能是将对应的标志置位,这样在处理下一条指令时,就可以根据此标志采取相应的动作。伪指令将会和其它的助记符一起,链入到哈希表中。增加标志变量signflag,类型为整型数。
第二步:在asmbl()函数中助记符的处理部分,加入对伪指令的支持,类型为S_SIGN时,将signflag置1。
第三步:在asmbl()函数中,处理助记符和指令之前,先对签名信息进行处理,因为签名信息是一系列的数,在处理完后将标志变量signflag清除。同时,直接调用输出函数将其值输出。在计算签名信息时,直接调有lex中的get()来获得下一字符,调用digit(c,16)来完成字符到数字的转换,调用ouab_new()来输出一个字节的签名信息。重复上述过程,输出2个签名信息。
5、修改链接器
(1)在链接器中去掉链接系统库工作,屏蔽掉函数library();。
6、设计控制流检测部件
R80515结构框图如图6,其中主要由Control Unit部件完成对取得指令的译码工作。本发明需要在硬件译码阶段判断跳转指令,需要在如图7所示位置加入控制流检测部件,通过控制信号instr(指令操作码)触发控制流检测机制。在控制流检测部件中使用2个寄存器Greg和Mreg,分别记录当前基本块的运行时签名值和运行时调整签名值。由PC完成取地址操作,数据总线宽度为8位,硬件在两个时钟周期内完成控制流检测操作:第一个时钟周期从ROM中取签名差di,更新 第二个时钟周期从ROM中取签名Si,比较Si和Greg的值,由异或门完成比较功能,相同表示没有控制流错误,不同表示控制流错误,通过CFC(Control Flow Checking)信号进行判断。
7、结合图8,操作者在带控制流检测能力的微处理上运行程序步骤:
第一步:将待运行的C语言程序经过SDCC编译器生成整合后的标准汇编文件,输出为.asm格式。
第二步:将汇编文件输入签名生成程序,生成带控制流检测数据的汇编文件,输出为.asm格式。
第三步:带控制流检测数据的汇编文件经汇编器翻译为目标文件,输出为.rel格式。
第四步:目标文件经链接器转化为可以执行的二进制映像文件,输出为.ihx格式。
第五步:将二进制文件运行到具有控制流检测能力的嵌入式微处理器上。
Claims (3)
1.一种面向嵌入式微处理器的软硬结合控制流检测方法,其特征是:首先将待运行的C语言程序经过SDCC编译器生成标准汇编文件,其输出为.asm格式,其次采用词法分析的方法将汇编文件中包含的用户库和系统库函数连接为一整合汇编文件,其输出为.asm格式,再将整合后的汇编文件采用词法分析方法通过签名生成程序进行基本块的划分、分析基本块间控制流关系,对各个基本块进行签名,形成新的带有控制流检测数据的汇编文件,其输出为.asm格式,再通过修改后的汇编器将汇编文件翻译为目标文件,其输出为.rel格式,再由链接器将目标文件转化为可以执行的二进制映像文件,其输出为.ihx格式;同时,在硬件译码阶段判断跳转指令时,通过控制信号指令操作码ins tr触发控制流检测机制,该控制流检测部件中使用2个寄存器Greg和Mreg,分别记录当前基本块的运行时签名值和运行时调整签名值,由异或门完成比较功能,通过控制流检测信号进行判断,相同表示没有控制流错误,不同表示控制流错误;最后,将二进制文件运行到具有控制流检测能力的嵌入式微处理器上。
2.根据权利要求1所述的面向嵌入式微处理器的软硬结合控制流检测方法,其特征是:所述的生成整合后的汇编文件的方法是:
(1)打开标准用户汇编文件,创建整合的汇编文件;
(2)调用词法分析模块对打开的标准汇编文件进行词法分析;
(3)从汇编文件中读取词素,判断其是否为系统库标识;
(4)如果不是系统库标识,返回步骤3;
(5)如果是系统库标识,查找其对应的系统的汇编文件,创建链表结构;
(6)遍历步骤5中的汇编文件,查找其中是否调用其它系统库函数,如果是调用,返回步骤5;
(7)如果不是调用,且未到文件尾,返回步骤6,直至遍历完后返回至上层系统汇编文件,继续执行步骤6,如果是顶层系统库汇编文件,继续执行步骤8;
(8)根据遍历关系生成的链表结构,将系统库中的系统库标识替换为汇编语言对应的函数,按顺序将系统库汇编文件插入到整合文件中;
(9)直至扫描到文件尾部;
(10)第2遍扫描用户汇编文件;
(11)从汇编文件中读取词素,判断其是否为系统库标识;
(12)如果不是系统库标识,将其输入到整合的汇编文件中,如果不是文件尾部,返回步骤11继续扫描,如果是文件尾部,结束扫描;
(13)如果是系统库标识,修改整合文件,将其系统库标识替换为汇编语言对应的函数,将其输入到整合的汇编文件中,如果不是文件尾部,返回步骤11继续扫描,如果是文件尾部,结束扫描。
3.根据权利要求1或2所述的面向嵌入式微处理器的软硬结合控制流检测方法,其特征是:所述的对各个基本块进行签名,形成新的带有控制流检测数据的汇编文件的方法为:
(1)首先需要划分基本块、分析基本块间关系,实现步骤:
第一步:由预处理函数将标准汇编源码预处理生成一个中间文件.gc;
第二步:由词法分析函数分析中间文件.gc,划分基本块;
第三步:分析基本块间关系,生成基本块链表;
第四步:根据第三步生成的基本块链表和函数调用链表来补充完整函数调用和返回块的关系,得到一个完整的基本块链表,这个链表中包含了所有的基本块信息、基本块之间的调用关系;
(2)生成编译时签名值检测数据,生成算法实现步骤:
第一步:根据最后的基本块链表生成各个基本块的签名值s,签名差d及多调整签名值M,生成步骤如下:
第二步:向基本块中插入伪指令.sign、签名差d、签名值s,提取插入数据的位置和需要插入的数据,将这些数据存放到一维数组中,对这些数据按照行号从小到大排序,数据插入位置为:伪指令.sign插入到基本块入口;签名差d、签名值s,插入在伪指令.sign的下一行;
(3)生成带控制流检测数据的汇编文件
第一步:生成最后文件.end,读中间文件并写入到最后文件,根据数组中该位置上的数据类型生成相应的代码插入到最终文件中;
第二步:关闭文件,生成带控制流检测数据的汇编文件,修改格式为.asm。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN2008101369145A CN101339519B (zh) | 2008-08-13 | 2008-08-13 | 面向嵌入式微处理器的软硬结合控制流检测方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN2008101369145A CN101339519B (zh) | 2008-08-13 | 2008-08-13 | 面向嵌入式微处理器的软硬结合控制流检测方法 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN101339519A CN101339519A (zh) | 2009-01-07 |
CN101339519B true CN101339519B (zh) | 2011-09-14 |
Family
ID=40213591
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN2008101369145A Expired - Fee Related CN101339519B (zh) | 2008-08-13 | 2008-08-13 | 面向嵌入式微处理器的软硬结合控制流检测方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN101339519B (zh) |
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN105117201A (zh) * | 2012-05-22 | 2015-12-02 | 英飞凌科技股份有限公司 | 用于提供指令码的方法 |
Families Citing this family (8)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101477605B (zh) * | 2009-01-15 | 2011-03-16 | 北京航空航天大学 | 一种基于硬件的嵌入式系统程序执行安全增强模块 |
CN102929679B (zh) * | 2012-09-21 | 2016-05-04 | 武汉邮电科学研究院 | 动态汇编指令统计的方法及装置 |
US9652208B2 (en) | 2013-08-01 | 2017-05-16 | Futurewei Technologies, Inc. | Compiler and method for global-scope basic-block reordering |
CN104461886A (zh) * | 2014-12-10 | 2015-03-25 | 深圳航天东方红海特卫星有限公司 | 一种控制流错误检测方法 |
CN109491918B (zh) * | 2018-11-22 | 2020-05-01 | 中国人民解放军战略支援部队信息工程大学 | 一种汇编冗余指令的检测方法及装置 |
CN109947432B (zh) * | 2019-03-28 | 2022-06-10 | Oppo广东移动通信有限公司 | 汇编程序处理方法及相关装置 |
CN110162339A (zh) * | 2019-05-20 | 2019-08-23 | 江南大学 | 一种基于调节发射队列降低微处理器软错误易感性的方法 |
CN113032283B (zh) * | 2021-05-20 | 2021-08-13 | 华控清交信息科技(北京)有限公司 | 一种密文运算调试方法、计算引擎和密文运算系统 |
-
2008
- 2008-08-13 CN CN2008101369145A patent/CN101339519B/zh not_active Expired - Fee Related
Non-Patent Citations (2)
Title |
---|
吴艳霞 顾国昌 付岩 程立新.并发控制流检测技术综述.《计算机科学》.2007,第34卷(第7期),14-19. * |
吴艳霞 顾国昌 王克惠.一种基于控制流检测的低功耗基本块划分方法.《计算机工程与应用》.2007,(第25期),118-120. * |
Cited By (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN105117201A (zh) * | 2012-05-22 | 2015-12-02 | 英飞凌科技股份有限公司 | 用于提供指令码的方法 |
CN105117201B (zh) * | 2012-05-22 | 2018-01-16 | 英飞凌科技股份有限公司 | 用于提供指令码的方法 |
Also Published As
Publication number | Publication date |
---|---|
CN101339519A (zh) | 2009-01-07 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN101339519B (zh) | 面向嵌入式微处理器的软硬结合控制流检测方法 | |
Myreen | Verified just-in-time compiler on x86 | |
Wang et al. | An abstract stack based approach to verified compositional compilation to machine code | |
Hundt et al. | Mao—An extensible micro-architectural optimizer | |
Chen et al. | A refined decompiler to generate C code with high readability | |
US20140249796A1 (en) | Simulator generation method and apparatus | |
Nathan et al. | Argus-G: Comprehensive, low-cost error detection for GPGPU cores | |
Shashidhar et al. | Functional equivalence checking for verification of algebraic transformations on array-intensive source code | |
Hohenauer et al. | A SIMD optimization framework for retargetable compilers | |
Blanqui et al. | Designing a CPU model: from a pseudo-formal document to fast code | |
De Blaere et al. | A compiler extension to protect embedded systems against data flow errors | |
Asăvoae | K semantics for assembly languages: A case study | |
Fernández et al. | Automatic checking of instruction specifications | |
Bezzubikov et al. | Automatic dynamic binary translator generation from instruction set description | |
Liang et al. | Semantics-recovering decompilation through neural machine translation | |
Matoussi et al. | A mapping approach between IR and binary CFGs dealing with aggressive compiler optimizations for performance estimation | |
An et al. | DSV: Disassembly soundness validation without assuming a ground truth | |
CN103049302B (zh) | 由程序生成优化的strcpy标准库函数汇编代码的方法 | |
Urfianto et al. | Decomposition of task-level concurrency on C programs applied to the design of multiprocessor SoC | |
Jordan et al. | The Development of Lexer and Parser as parts of compiler for GAMA32 processor’s instruction-set using Python | |
Shao et al. | A survey of available information recovery of binary programs based on machine learning | |
Matoussi et al. | Loop aware CFG matching strategy for accurate performance estimation in IR-level native simulation | |
Momeni et al. | LDMBL: An architecture for reducing code duplication in heavyweight binary instrumentations | |
US20040045018A1 (en) | Using address space bridge in postoptimizer to route indirect calls at runtime | |
Ambrose et al. | SDG2KPN: System Dependency Graph to function-level KPN generation of legacy code for MPSoCs |
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 | ||
CF01 | Termination of patent right due to non-payment of annual fee |
Granted publication date: 20110914 Termination date: 20170813 |
|
CF01 | Termination of patent right due to non-payment of annual fee |