【技术实现步骤摘要】
堆栈溢出保护装置、堆栈保护方法、相关编译器和计算装置
本专利技术总体来说涉及堆栈(stack)溢出保护装置和堆栈保护方法。更具体的,本专利技术涉及利用函数级变换来优化堆栈溢出保护。
技术介绍
堆栈溢出是在设计程序时必须考虑的因素。附图1A-1C示意性地示出了一次堆栈溢出的情况。图1A示出了堆栈帧的示例性的结构。在图1A中,堆栈中包含了被调用者的帧、变量、返回地址、帧指针、本地数据和调用者帧。如图所示,当发生函数调用时,被调用者帧可以通过帧指针找到调用者帧的位置。变量、返回地址和帧指针都在函数调用时被使用。如图1B所示,函数可能涉及字符串型操作,例如charA[100]表示包含100个字符的数组。在函数包含字符串型操作时,有可能导致堆栈溢出。图1C示出了示例性的堆栈溢出的情况。当向字符串A[100]写入多于100个字符(例如发生错误或遇到期望之外的情况)时,如附图1C所示,多出的字符将超出字符串A的范围,覆盖堆栈中的例如本地数据、帧指针、返回地址等。也即,发生了堆栈溢出。这可能导致本地数据被破坏、函数调用缺少了必要的返回条件等。因此,在编译器处理输入代码时必须考虑防 ...
【技术保护点】
一种用于对输入代码提供堆栈溢出保护的装置,包括:划分单元,被配置为将输入代码中的至少一个函数划分为包含字符串型操作的代码区域和不包含字符串型操作的代码区域;以及堆栈保护单元,被配置为在包含字符串型操作的代码区域中设置堆栈保护。
【技术特征摘要】
1.一种用于对输入代码提供堆栈溢出保护的装置,包括:划分单元,被配置为将输入代码中的至少一个函数划分为包含字符串型操作的代码区域和不包含字符串型操作的代码区域;以及堆栈保护单元,被配置为依据所述函数是否涉及字符串型操作,在包含字符串型操作的代码区域中设置堆栈保护,并且排除对所述函数中不涉及字符串型操作的部分的堆栈保护,其中,设置堆栈保护包括对该包含字符串型操作的代码区域加入保护码操作。2.如权利要求1所述的堆栈溢出保护装置,所述划分单元被进一步配置为根据执行频率将所述包含字符串型操作的代码区域划分为高频代码区域和低频代码区域;以及所述堆栈保护单元被进一步配置为在所述低频代码区域中设置堆栈保护。3.如权利要求1所述的堆栈溢出保护装置,进一步包括:外联单元,被配置为将包含字符串型操作的代码区域外联为所述函数的被调用函数;所述堆栈保护单元被配置为在所述被调用函数中设置堆栈保护。4.如权利要求3所述的堆栈溢出保护装置,所述划分单元被进一步配置为根据执行频率将所述包含字符串型操作的代码区域划分为高频代码区域和低频代码区域;以及所述外联单元被进一步配置为将所述低频代码区域外联为所述函数的被调用函数。5.如权利要求2或4所述的堆栈溢出保护装置,其中所述低频代码区域的执行频率低于预定阈值。6.如权利要求4所述的堆栈溢出保护装置,其中在一个函数中存在多个低频字符串型操作且各低频字符串型操作之间不存在高频操作的情况下,所述外联单元适于将所述多个低频字符串型操作外联到一个被调用函数中。7.如权利要求5所述的堆栈溢出保护装置,其中所述预定阈值是根据所述低频代码区域的执行频率的统计数据决定的。8.如权利要求4所述的堆栈溢出保护装置,其中所述堆栈保护单元包括保护码应用单元,所述保护码应用单元被配置为在所述被调用函数中设置堆栈保护操作;其中所述保护码应用单元根据所述函数和所述被调用函数的帧指针计算出设置堆栈保护操作的位置,并且根据所计算出的设置堆栈保护操作的位置,在所述被调用函数中设置堆栈保护...
【专利技术属性】
技术研发人员:蒋健,纪金松,官孝峰,张嗣元,
申请(专利权)人:国际商业机器公司,
类型:发明
国别省市:
还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。