程序流监控方法、编译方法、装置、处理器及计算机设备与流程

文档序号:34866927发布日期:2023-07-23 21:23阅读:54来源:国知局
程序流监控方法、编译方法、装置、处理器及计算机设备与流程

本发明涉及程序流监控,尤其涉及一种程序流监控方法、编译方法、装置、处理器及计算机设备。


背景技术:

1、cpu(central processing unit,中央处理单元)作为芯片上的核心单元,在各领域都有广泛的应用。通常,cpu按照指令流的顺序,对指令流序列依次进行取指、译码、执行操作完成对指令的完整执行。如果程序流执行的顺序被破坏,会产生程序逻辑错误,甚至引起整个系统异常。因此,有必要对程序流程进行监控,以确保整个系统程序安全、可靠地运行。

2、相关技术中,通常采用cpu内部看门狗或外部系统看门狗模块来对程序流进行监控。然而,基于看门狗的程序流监控方法能够检测程序流在一段时间内是否执行完成,不能检测程序流是否按照设计逻辑有效地执行。


技术实现思路

1、本发明旨在至少在一定程度上解决相关技术中的技术问题之一。为此,本发明的第一个目的在于提出一种程序流监控方法,通过软硬件结合的程序流监控方法,在数据流和控制流上对程序流进行双重监控,可以有效检测由于电磁干扰、线路串扰等因素影响而导致的程序执行行为与预期不符的问题。

2、本发明的第二个目的在于提出一种程序代码编译方法。

3、本发明的第三个目的在于提出一种处理器。

4、本发明的第四个目的在于提出一种程序流监控装置。

5、本发明的第五个目的在于提出一种程序代码编译装置。

6、本发明的第六个目的在于提出一种计算机设备。

7、本发明的第七个目的在于提出一种计算机可读存储介质。

8、为达到上述目的,本发明第一方面实施方式提出了一种程序流监控方法,所述程序流对应有控制流和数据流;所述控制流包括若干基本块;基本块头部在编译阶段插入有控制流校验指令,以及基本块尾部在链接阶段插入有数据流校验指令;其中,所述数据流校验指令是在所述链接阶段对所述编译阶段中插入所述基本块尾部的占位指令进行替换而插入的;所述方法包括:在所述程序流运行到当前基本块的情况下,执行所述当前基本块内的所述控制流校验指令以校验所述控制流的正确性;在所述当前基本块运行至所述数据流校验指令的情况下,确定所述当前基本块的所有指令的crc签名值,以校验所述数据流的完整性。

9、根据本发明的一个实施方式,所述基本块分配有静态签名;所述若干基本块包括当前基本块、跳转至所述当前基本块的前驱基本块;所述执行所述当前基本块内的控制流校验指令以校验所述控制流的正确性,包括:获取所述前驱基本块的补偿签名和所述前驱基本块的运行时签名;其中,所述补偿签名是基于所述前驱基本块的静态签名与前驱基准基本块的静态签名的异或计算结果确定的;所述前驱基准基本块为所述前驱基本块所处的控制级别上的基准基本块;确定所述当前基本块的静态签名和签名差;其中,所述签名差是基于所述前驱基准基本块的静态签名与所述当前基本块的静态签名进行异或计算的结果确定的;若所述前驱基本块的运行时签名、所述当前基本块的签名差、所述前驱基本块的补偿签名的异或计算结果等于所述当前基本块的静态签名,所述当前基本块通过控制流校验。

10、根据本发明的一个实施方式,所述前驱基本块的数量为1时,所述前驱基本块为所述前驱基准基本块,所述补偿签名为0。

11、根据本发明的一个实施方式,所述前驱基本块的数量大于1时,所述前驱基准基本块是基于所述前驱基本块所处的控制级别上的基本块的静态签名确定的。

12、根据本发明的一个实施方式,所述程序流监控方法还包括:若所述前驱基本块的运行时签名、所述当前基本块的签名差、所述前驱基本块的补偿签名的异或计算结果不等于所述当前基本块的静态签名,所述当前基本块不通过控制流校验,以触发异常。

13、根据本发明的一个实施方式,在若所述前驱基本块的运行时签名、所述当前基本块的签名差、所述前驱基本块的补偿签名的异或计算结果等于所述当前基本块的静态签名,则所述当前基本块通过控制流校验之前,所述程序流监控方法还包括:基于所述签名差和所述当前基本块的静态签名,在所述当前基本块的头部插入有控制流校验指令;所述若所述前驱基本块的运行时签名、所述当前基本块的签名差、所述前驱基本块的补偿签名的异或计算结果等于所述当前基本块的静态签名,则所述当前基本块通过控制流校验,包括:若所述前驱基本块的运行时签名、所述控制流校验指令中附带的签名差、所述前驱基本块的补偿签名的异或计算结果等于所述控制流校验指令中附带的静态签名,所述当前基本块通过控制流校验。

14、根据本发明的一个实施方式,所述数据流校验指令中附带有静态校验签名,所述静态校验签名是基于编译器编译链接时所述当前基本块内所有指令的crc签名值确定的;所述确定所述当前基本块的所有指令的crc签名值,以校验所述数据流的完整性,包括:计算所述当前基本块内所有指令的crc签名值,得到动态校验签名;若所述当前基本块完成执行时的动态校验签名与所述静态校验签名一致,所述当前基本块通过数据流校验。

15、根据本发明的一个实施方式,所述确定所述当前基本块的所有指令的crc签名值,以校验所述数据流的完整性,还包括:若所述当前基本块完成执行时的动态校验签名与所述静态校验签名不一致,所述当前基本块不通过数据流校验以触发异常。

16、根据本发明的一个实施方式,所述控制流包括函数控制流,所述函数控制流包括入口基本块和出口基本块;所述入口基本块在编译阶段插入有签名信息保存指令,所述出口基本块在编译阶段插入有签名信息恢复指令;所述程序流监控方法还包括:在函数调用时执行所述签名信息保存指令,以支持运行时签名和补偿签名的压栈操作;在调用的函数返回时执行所述签名信息恢复指令,以支持保存的运行时签名和补偿签名的弹栈操作。

17、根据本发明的一个实施方式,所述程序流监控方法还包括:增加全局监控的编译器参数,以对应用程序的全部运行过程进行监控。

18、根据本发明的一个实施方式,所述程序流监控方法还包括:针对源代码中的指定函数,在所述指定函数的指定位置增加程序流检测标记以及编译器参数,以对所述指定函数的运行过程进行监控。

19、根据本发明的一个实施方式,所述程序流监控方法还包括:在源代码中通过括号将需要监控的目标源码括起来;在所述目标源码的指定位置处增加制导语句,以对所述目标源码的运行过程进行监控。

20、为达到上述目的,本发明第二方面实施方式提出了一种程序代码编译方法,所述程序代码对应有程序控制流图,且所述程序控制流图中具有若干基本块;所述方法包括:在编译阶段,在基本块头部插入控制流校验指令,在基本块尾部插入占位指令;其中,所述控制流校验指令用于在所述程序代码对应的程序流运行到任意基本块时校验所述控制流的正确性;在链接阶段,将所述占位指令对应的指令码替换为数据流校验指令;其中,所述数据流校验指令用于在所述程序代码对应的程序流运行到任意基本块的数据流校验指令时,确定所述任意基本块的所有指令的crc签名值,以校验所述数据流的完整性。

21、根据本发明的一个实施方式,所述控制流包括函数控制流,所述函数控制流包括入口基本块和出口基本块;所述程序代码编译方法还包括:在编译阶段,在所述入口基本块插入签名信息保存指令,以及,在所述出口基本块插入签名信息恢复指令;其中,所述签名信息保存指令用于在函数调用时的运行时签名和调整签名的压栈操作,所述签名信息恢复指令用于在调用的函数返回之前的运行时签名和调整签名的弹栈操作。

22、为达到上述目的,本发明第三方面实施方式提出了一种处理器,所述处理器用于执行程序流,所述程序流对应有控制流和数据流;所述控制流包括若干基本块;所述处理器包括位于译码流水级的扩展译码电路、位于写回流水级的控制流校验电路和数据流校验电路;所述扩展译码电路,用于译码控制流校验指令和数据流校验指令;其中,所述控制流校验指令是在编译阶段插入基本块头部的,所述数据流校验指令是在链接阶段对所述编译阶段中插入基本块尾部的占位指令进行替换而插入的;所述控制流校验电路,用于在所述程序流运行到当前基本块的情况下,执行所述当前基本块内的控制流校验指令以校验所述控制流的正确性;所述数据流校验电路,用于在所述当前基本块运行至所述数据流校验指令的情况下,确定所述当前基本块的所有指令的crc签名值,以校验所述数据流的完整性。

23、根据本发明的一个实施方式,所述基本块分配有静态签名;所述若干基本块包括当前基本块、跳转至所述当前基本块的前驱基本块;所述处理器设置有运行时签名寄存器、补偿签名寄存器;所述运行时签名寄存器存储有所述前驱基本块的运行时签名,所述补偿签名寄存器存储有前驱基本块的补偿签名;其中,补偿签名是基于所述前驱基本块的静态签名与前驱基准基本块的静态签名的异或计算结果确定的;所述前驱基准基本块为所述前驱基本块所处的控制级别上的基准基本块;所述控制流校验电路,还用于确定所述当前基本块的静态签名和签名差,若所述前驱基本块的运行时签名、所述当前基本块的签名差、所述前驱基本块的补偿签名的异或计算结果等于所述当前基本块的静态签名,所述当前基本块通过控制流校验;其中,所述签名差是基于所述前驱基准基本块的静态签名与所述当前基本块的静态签名进行异或计算的结果确定的。

24、根据本发明的一个实施方式,所述控制流包括函数控制流,所述函数控制流包括入口基本块和出口基本块;所述入口基本块在编译阶段插入有签名信息保存指令,所述出口基本块在编译阶段插入有签名信息恢复指令;所述处理器设置有签名栈;所述签名栈用于在函数调用时执行所述签名信息保存指令,支持运行时签名和补偿签名的压栈操作;在调用的函数返回时执行所述签名信息恢复指令,支持保存的运行时签名和补偿签名的弹栈操作。

25、根据本发明的一个实施方式,所述数据流校验指令中附带有静态校验签名,所述静态校验签名是基于编译器编译链接时所述当前基本块内所有指令的crc签名值确定的;所述处理器设置有crc中间值寄存器;所述crc中间值寄存器用于存储所述当前基本块运行至当前指令时所生成的中间crc签名值;所述数据流校验电路,还用于计算所述当前基本块内所有指令的crc签名值,得到动态校验签名;若所述当前基本块完成执行时的动态校验签名与所述静态校验签名一致,所述当前基本块通过数据流校验。

26、为达到上述目的,本发明第四方面实施方式提出了一种程序流监控装置,所述程序流对应有控制流和数据流;所述控制流包括若干基本块;基本块头部在编译阶段插入有控制流校验指令,以及基本块尾部在链接阶段插入有数据流校验指令;其中,所述数据流校验指令是在所述链接阶段对所述编译阶段中插入所述基本块尾部的占位指令进行替换而插入的;所述装置包括:控制流校验模块,用于在所述程序流运行到当前基本块的情况下,执行所述当前基本块内的所述控制流校验指令以校验所述控制流的正确性;数据流校验模块,用于在所述当前基本块运行至所述数据流校验指令的情况下,确定所述当前基本块的所有指令的crc签名值,以校验所述数据流的完整性。

27、根据本发明的一个实施方式,所述基本块分配有静态签名;所述若干基本块包括当前基本块、跳转至所述当前基本块的前驱基本块;所述控制流校验模块,还用于获取所述前驱基本块的补偿签名和所述前驱基本块的运行时签名;其中,所述补偿签名是基于所述前驱基本块的静态签名与前驱基准基本块的静态签名的异或计算结果确定的;所述前驱基准基本块为所述前驱基本块所处的控制级别上的基准基本块;确定所述当前基本块的静态签名和签名差;其中,所述签名差是基于所述前驱基准基本块的静态签名与所述当前基本块的静态签名进行异或计算的结果确定的;若所述前驱基本块的运行时签名、所述当前基本块的签名差、所述前驱基本块的补偿签名的异或计算结果等于所述当前基本块的静态签名,所述当前基本块通过控制流校验。

28、根据本发明的一个实施方式,所述控制流校验模块,还用于基于所述签名差和所述当前基本块的静态签名,在所述当前基本块的头部插入有控制流校验指令;若所述前驱基本块的运行时签名、所述控制流校验指令中附带的签名差、所述前驱基本块的补偿签名的异或计算结果等于所述控制流校验指令中附带的静态签名,所述当前基本块通过控制流校验。

29、根据本发明的一个实施方式,所述数据流校验指令中附带有静态校验签名,所述静态校验签名是基于编译器编译链接时所述当前基本块内所有指令的crc签名值确定的;所述数据流校验模块,还用于计算所述当前基本块内所有指令的crc签名值,得到动态校验签名;若所述当前基本块完成执行时的动态校验签名与所述静态校验签名一致,所述当前基本块通过数据流校验。

30、根据本发明的一个实施方式,所述控制流包括函数控制流,所述函数控制流包括入口基本块和出口基本块;所述入口基本块在编译阶段插入有签名信息保存指令,所述出口基本块在编译阶段插入有签名信息恢复指令;所述程序流监控装置还包括:签名压栈模块,用于在函数调用时执行所述签名信息保存指令,以支持运行时签名和补偿签名的压栈操作;签名弹栈模块,用于在调用的函数返回时执行所述签名信息恢复指令,以支持保存的运行时签名和补偿签名的弹栈操作。

31、为达到上述目的,本发明第五方面实施方式提出了一种程序代码编译装置,所述程序代码对应有程序控制流图,且所述程序控制流图中具有若干基本块;所述装置包括:第一指令插入模块,用于在编译阶段,在基本块头部插入控制流校验指令,在基本块尾部插入占位指令;其中,所述控制流校验指令用于在所述程序代码对应的程序流运行到任意基本块时校验所述控制流的正确性;占位指令替换模块,用于在链接阶段,将所述占位指令对应的指令码替换为数据流校验指令;其中,所述数据流校验指令用于在所述程序代码对应的程序流运行到任意基本块的数据流校验指令时,确定所述任意基本块的所有指令的crc签名值,以校验所述数据流的完整性。

32、根据本发明的一个实施方式,所述控制流包括函数控制流,所述函数控制流包括入口基本块和出口基本块;所述程序代码编译装置还包括:第二指令插入模块,用于在编译阶段,在所述入口基本块插入签名信息保存指令,以及,在所述出口基本块插入签名信息恢复指令;其中,所述签名信息保存指令用于在函数调用时的运行时签名和调整签名的压栈操作,所述签名信息恢复指令用于在调用的函数返回之前的运行时签名和调整签名的弹栈操作。

33、为达到上述目的,本发明第六方面实施方式提出了一种计算机设备,包括存储器和处理器,所述存储器存储有计算机程序,所述处理器执行所述计算机程序时实现前述任一项实施方式所述的方法的步骤。

34、为达到上述目的,本发明第七方面实施方式提出了一种计算机可读存储介质,其上存储有计算机程序,所述计算机程序被处理器执行时实现前述任一项实施方式所述的方法的步骤。

35、根据本发明提供的多个实施方式,通过签名信息保存指令、签名信息恢复指令、控制流校验指令、数据流校验指令,用于对应用程序的控制流和数据流的完整性和正确性进行实时校验。然后分别实现支持程序流监控指令执行的cpu微架构和支持程序流监控指令生成的编译工具链,通过软硬件结合的程序流监控方法,在数据流和控制流上对程序流进行双重监控。同时,采用先在编译阶段向汇编代码插入控制流校验指令和数据流校验指令的占位指令,后在链接阶段向二进制指令码中插入数据流校验指令以替换占位指令的方法,实现了对新增的控制流校验指令的完整性校验。

36、本发明附加的方面和优点将在下面的描述中部分给出,部分将从下面的描述中变得明显,或通过本发明的实践了解到。

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