零开销代码覆盖分析的制作方法

文档序号:14203759阅读:155来源:国知局
零开销代码覆盖分析的制作方法

相关专利申请案

本申请案主张2015年7月28日申请的第62/198,025号共同拥有美国临时专利申请案的优先权,所述共同拥有美国临时专利申请案的全部内容出于所有目的以引用的方式并入本文中。

本发明涉及一种用于特定来说在微控制器内进行零开销代码覆盖分析的方法。



背景技术:

微控制器是单芯片集成电路,其包括中央处理单元(微控制器核心)、多个外围装置、i/o端口及存储器等。换句话来说,微控制器是芯片上系统,其需要少许外部组件或无需外部组件。许多微控制器是根据提供单独程序及数据存储器的哈佛模型(harvardmodel)设计。然而,也存在具有经组合程序及数据存储器空间的冯诺伊曼(vonneumann)类型微控制器。

执行代码覆盖分析允许运行代码的形式验证。代码覆盖可用以确定代码段是否已经执行。代码的形式验证可根据例如iec61508、iec26262、d0-178b/c或do-178b等标准执行。



技术实现要素:

本发明的实施例包含一种集成电路。所述电路可包含循环冗余校验(crc)电路。所述crc电路可经配置以:从由处理器执行的代码读取识别执行路径的数据;确定用于所述数据的crc校验值;及基于所述crc校验值,确定所述执行是否有效。

本发明的实施例包含一种处理器。所述处理器可包含中央处理单元及crc电路。所述crc电路可经配置以:从由处理器执行的代码读取识别执行路径的数据;确定用于所述数据的crc校验值;及基于所述crc校验值,确定所述执行是否有效。

本发明的实施例包含一种方法。所述方法可包含:从如由中央处理单元执行的代码读取识别执行路径的数据;确定用于所述数据的crc校验值;及基于所述crc校验值,确定所述执行是否有效。

附图说明

图1说明用于代码覆盖的系统的实例实施例;

图2说明可经确认的实例代码;

图3说明可从将确认的代码产生的表的实例实施例;

图4说明用于确定预测校验值的方法的实例实施例的流程图;及

图5说明用于确认代码的方法的实例实施例的流程图。

具体实施方式

图1说明用于验证将执行的代码的系统100的实例实施例。此执行可针对例如微控制器、嵌入式装置、芯片上系统或其它合适系统上的代码。例如,图1中说明微控制器104。在一个实施例中,系统100可在无任何程序循环开销的情况下在形式上验证代码或装置。这样可提供对微控制器代码或其它资源应变系统上的代码的更快速且更容易的分析及测试。资源可由于小形式因子、受限处理功率或存储器、或类似约束而在此类系统上应变。此外,正在此系统上执行的代码可为临界的或时间敏感的,使得代码受时序约束。代码的时间约束及/或用以执行代码的装置的受限资源可禁止代码测试仪器。此类代码测试仪器可包含测试代码、探针或插入到将以其它方式测试的代码中的其它机构。此类代码测试仪器可通常来源于大型软件提供商且需要充足处理器资源。相较之下,例如微控制器等资源约束8/16/32位处理器具有小存储器或可正执行时序临界代码,其不可容许测试仪器(其如上文所描述将包含额外指令代码)正添加到程序的中断。正用于安全临界系统中的某些应用需要在最终系统中进行测试以促进输入及条件的全范围的测试。侵略性测试技术可需要使用白箱及黑箱方法、使用定制配线对代码进行静态分析及动态分析。这可通过控制代码产生过程而有源地或无源地(后台)执行。此类测试技术可改变程序流程及时序。此外,此类技术可需要函数调用、位切换及额外循环。

根据各种实施例,在微控制器104(或将测试其代码的其它实体)内或通信地耦合到微控制器104的装置可执行形式代码覆盖分析。在一个实施例中,系统100可包含用以执行代码覆盖分析的循环冗余校验(crc)电路102。在进一步实施例中,crc电路102可在代码序列期间执行非循环开销代码覆盖分析。crc电路102可在将测试的实体(例如微控制器104)内执行或通信地耦合到此实体。

crc电路102可以任何合适方式实施。在一个实施例中,crc电路102可在硬件内单独实施。crc电路102可使用模拟电路及数字电路的适当组合实施。crc电路102可使用专用集成电路、场可编程门阵列或其它实体实施。在一个实施例中,crc电路102可在不使用微控制器104的主代码处理器的执行循环的情况下实施。

crc电路102可执行循环冗余校验。crc电路102可执行此类校验以在系统100中检测包含已在微控制器104中非预期地执行或以非预期方式执行的代码的错误。可分析用于crc电路102的输入数据且可基于此输入数据产生校验值。校验值可以任何合适方式产生。在一个实施例中,crc电路102可执行输入数据的内容的多项式除法。可使用任何合适多项式。校验值可为除法的结果的余数。校验值可为冗余值,因为其可被添加或除输入数据外被单独发送,但不改变输入数据。校验值可具有固定长度。可将校验值处理且处置为哈希函数。考虑到输入数据,crc电路102可产生实施校验值的固定长度二进制序列。校验值可附加到原始数据。输入数据及校验值的组合可被视作代码字。当接收或读取代码字时,可比较校验值与新产生校验值。新产生校验值可从已经接收的代码字数据或针对预期代码字数据产生。

在一个实施例中,crc电路102可从表示正在微控制器104中执行的代码的数据产生校验值。crc电路102可比较从执行代码产生的样本校验值与已知经授权且有效的代码的校验值。如果样本校验值匹配已知校验值,那么可确认由样本代码产生的代码。如果样本校验值不匹配任何已知校验值,那么可确定由样本代码产生的代码是无效的。

crc电路102可使用任何合适信息作为输入。在一个实施例中,crc电路102可检测微控制器104中的操作或执行的状态。此检测可通过例如分析来自微控制器104的cpu(例如程序计数器108)的输入而执行。程序计数器108可由寄存器、存储器或其它合适机构实施以指示在给定程序中将执行的位置。此位置可由地址表示。在另一实施例中,crc电路102可确定存储器内的值。此存储器可从快闪存储器106读取,但可使用任何合适存储器源。存储器内的值可表示用于执行代码的命令、运算代码、参数、指令或其它数据。在又一实施例中,crc电路102可利用多项式112。多项式112可界定将用以执行crc校验以产生校验值的多项式。来自快闪存储器106及/或程序计数器108的值可用以形成将通过执行crc校验而校验的数据。程序计数器108可产生指令或执行计数。

可进一步分析来自程序计数器108的值以确定特定事件是否已在微控制器上发生,使得代码应经验证。可在系统100中界定此类事件。例如,crc电路102可经配置以基于在下一指令循环上的即刻触发器/手动触发器;在特定指令匹配上的触发器(例如通过分支或跳转指令执行或在经界定指令类型上的匹配实施);或在地址匹配上的触发器(即,函数的调用地址或进入点地址)中的一或多者,执行、开始或停止校验及分析。特定开始或停止触发器准则可根据配置crc电路102及其相关联装置的软件指令设置。触发可由适当电路、门、寄存器或例如crc触发器控制110的其它机构控制。crc触发器控制可接受程序计数器108作为crc电路102及其相关联机构的输入及触发器操作。触发器机构的适当设置可在存在中断的情况下执行或考虑到中断的可能性而执行。这些中断可通过在一个实施例中从分析省略中断或在另一实施例中将中断包含在程序路径分析中而被考虑。

crc电路102可经配置以验证数据传输。然而,在一个实施例中,crc电路102可经配置以验证经执行代码。多项式可使用已知适当值进行配置以产生统计上唯一的结果。crc电路102可基于校验的结果,通过受测试或正校验代码针对每一可接受或可行路径而确认结果。这些可接受值可脱机产生且存储在哈希或中断服务例程(isr)哈希比较114中,其可由例如表、查找表、硬件查找表或内容可寻址存储器实施。当执行crc校验时,通过测试代码的每一可行路径可通过指令或地址的其组合产生唯一值。

当操作时,将来自快闪存储器106的指令代码馈送到crc电路102。对于由crc触发器控制110识别的每一经触发指令循环,通过crc电路102使用多项式112计算新crc校验值。在捕获序列终止之后,可回读结果。可由crc电路102比较经产生crc校验值与哈希/isr哈希比较114。如果发现与所提供哈希值不匹配,那么可产生中断,其指示非法程序流程序列。中断可告知用户或系统100已发生流程错误。此流程错误可由例如缺陷、错误、存储器恶化或恶意软件(例如恶意地将代码注入到系统中的恶意软件)引起。

通过卸除执行代码与crc电路102的匹配,微控制器104可使用添加到受测试代码或单元的零开销以其它方式进行操作。不对程序流程形成任何影响且不对临界指令时序形成任何影响。

在一个实施例中,哈希比较可用以考虑到通过isr的程序中断或其它中断。此外,哈希比较可用以考虑到或检测程序流程错误、程序流程未经处置状态及操作错误。例如isr的异步事件可致使确定性流程问题。为解决此类问题,在一个实施例中,当产生isr或微控制器104是在异常模式中时,可停用由crc电路102进行的流程分析。在另一实施例中,当产生isr或微控制器104是在异常模式中时,可屏蔽用于isr的指令,使得这些指令不致使由crc电路102进行crc校验。当产生isr或微控制器104是在异常模式中时,可提供“isr上下文”存储或信息。可报告通过isr的代码分支的其它任意结果,且因此crc电路102可分析此isr的执行。针对可行isr的预期crc结果可在此情况下存储在哈希/irs哈希比较114中。在此情况下,来自isr的crc结果将如其它代码与微控制器104比较一样进行比较。

此外,当中断或另一异步事件发生同时正执行代码覆盖分析时,crc电路102可停止操作或在中断发生时仅将其当前状态(包含程序计数器、哈希值或其它有关信息)存储到存储器中或到堆栈上。当中断结束时,状态信息可从堆栈弹出且分析可恢复。如上文所描述,如果crc电路102是如此配置,那么与中断相关联的代码可自身被监测。另外,当中断正操作时,中断可自身通过更高优先级中断、巢套中断或其它异步事件中断。因此,可由crc电路102通过存储上下文信息以用于系统中使用的每一可行或真实级中断而处置每一级中断。

图2说明用于由微控制器104执行的实例伪代码。此伪代码可说明函数的执行,例如用以将ascii值转换成十六进制值的函数。针对程序的每一步骤说明地址线、伪代码及所得运算代码组合。例如,在地址x0682处,对“movlw0x61”的调用可产生数据“3061”。

图3说明一些可行路径的表,考虑到特定输入值所述可行路径可在图2的代码中执行。输入“a”、“d”、“f”、“0”、“5”、“9”、“a”、“d”、“f”及“m”的可行路径展示为若干可行值,其可通过图2中所展示的函数而从ascii转换成十六进制。对于每一函数输入,在循环计数行中展示预期已在处置所述特定输入时执行的循环的次数。此循环次数可从程序计数器108确定。此外,在位长度行中展示预期已在此特定输入执行期间达到的存储器的位长度或位数目。这些值可根据由crc电路102使用的多项式112计算且展示在crc行中。函数输入与crc的关系作为哈希存储在哈希/isr比较114中。

例如,预期用于输入“a”、“d”及“f”中的每一者的路径是相同的。这是因为,如图2的伪代码中所展示,这些输入中的每一者跟随线17上的条件语句的真分支,因为每一输入是小写字母。此外,这些输入中的每一者将执行15次循环及120的位长度。在另一实例中,预期输入“0”、“5”及“9”中的每一者的路径是相同的,因为每一输入是数字。预期每一输入跟随线17上的条件语句的伪代码假分支及线19上的条件语句的真分支。这些分支中的每一者将执行20次循环与160的位长度。在又一实例中,预期输入“a”、“d”及“f”中的每一者的路径是相同的,因为每一输入是大写字母。预期每一输入跟随线17上的条件语句的伪代码假分支、线19上的条件语句的假分支及线21上的条件语句的真分支。这些分支中的每一者将执行29次循环及232的位长度。在又一实例中,预期输入“m”以及任何其它无效十六进制字符的路径跟随线17上的条件语句的伪代码假分支、线19上的条件语句的假分支、线21上的条件语句的假分支及线23与24上的其它陈述。

因此,crc电路102可监测图2中所展示的ascii到十六进制函数的循序执行。就“a”、“d”或“f”的测试输入来说,crc电路102可确定程序计数器及存储器内容的crc校验结果是否预期图3中所展示的情况。如果是,那么程序可确认所述输入。否则,可能产生异常或中断。就大写字母的测试输入来说,crc电路102可确定程序计数器及存储器内容的crc校验结果是否预期图3中针对大写字母所展示的情况。就数字的测试输入来说,crc电路102可确定程序计数器及存储器内容的crc校验结果是否预期图3中针对数字所展示的情况。就任何其它字符的测试输入来说,crc电路102可确定程序计数器及存储器内容的crc校验结果是否预期图3中针对“m”或其它输入所展示的情况。

图3中的实例crc校验值表示多项式的选择,其中考虑到受限组可行运算代码及汉明距离(hammingdistance)5,冲突的机率是0.0016%。

图4是用于分析代码的方法400的实例实施例的说明。可使用方法400以产生哈希值或crc校验值以用于通过给定代码段、将在执行代码时被预期的已知执行路径。方法400可通过由处理器对一或多个非暂时性计算机可读媒体执行计算机可读指令而实施。在一个实施例中,方法400可通过执行软件而实施。方法400可结合下文所讨论的方法500执行。方法400可针对任何代码、段、应用、程序或将执行且确认的其它指令执行至少一次,使得crc电路102可循序地确认此代码。

在405处,可识别将确认的代码。在410处,可识别用于此代码的输入值。所述值可包含可输入到代码段中的子集或所有可行值。在415处,可确定用于这些经识别值的有效执行路径。可收集关于每一此路径的数据,例如循环次数及位长度。

在420处,对于每一执行路径及其相关联数据,可使用多项式确定crc校验值。可在方法500中使用相同多项式以确认代码段的执行。在425处,可将校验值存储在哈希表或其它合适数据结构中。方法400可终止或可针对额外代码段重复进行。

图5是对用于分析代码的另一方法500的实例实施例的说明。可使用方法500以鉴于经产生哈希值或crc校验值分析代码。方法500可由硬件(例如crc电路102及相关联机构)实施。

在505处,可执行将确认的程序。可通过设置寄存器值或以其它方式启动硬件监测器而建立程序的监测。在510处,可建立用于此监测的触发器。此类触发器可指定用以开始及停止监测程序的执行路径的准则。

在515处,例如crc电路102的硬件机构可监测触发器以开始确认执行路径。在520处,可确定将确认的执行路径是否已经执行。如果是,那么方法500可转到525。否则,方法500可转到550。

在525处,可存取执行路径的数据。此数据可包含例如路径的循环计数及路径的位大小。在530处,可执行此数据的crc校验值。可使用如方法400中使用的相同多项式确定校验值。在535处,可确定是否在执行方法400期间填入的哈希表内发现校验值。如果发现校验值,那么方法500可转到540。否则,方法500可转到545。

在540处,可确定路径已经确认。在545处,可确定路径是无效的。可产生、发出或存储异常、中断、错误、位或其它合适消息。消息可识别路径。

在550处,可确定程序是否已完成执行。如果程序未完成,那么方法500可返回到520。否则,方法500可终止。

尽管展示实例顺序的步骤,但上文所讨论的方法的步骤可以任何顺序执行。此外,可任选地重复或省略一或多个步骤。方法可在任何合适初始化点处开始执行。

可在产生代码期间执行方法400以特性化已经写入的代码。随后,可针对每一可行执行路径、输入值或从代码产生的其它参数执行方法500。因此,可使用测试覆盖所有代码。此外,在发行软件之后,可执行方法400以特性化代码。在一个实施例中,可特性化所有执行路径。在另一实施例中,可特性化重要执行路径或特性化易受恶意软件注入、溢出、或其它攻击或缺陷的执行路径。当由各种用户执行此代码时,可执行方法500。可在执行未经允许路径之后产生代码故障(由失配哈希所展示)。在此情况下,可停止代码且产生错误。用户可向开发者或管理员报告来自中断的错误。

尽管上文已描述实例实施例,但在不背离这些实施例的精神及范围的情况下可做出其它改变及实施例。

当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1