发明名称 一种嵌入式系统运行时堆栈溢出保护方法
摘要 本发明涉及嵌入式系统程序编译技术领域,旨在提供一种嵌入式系统运行时堆栈溢出保护方法。该方法包括(1)编译器分析扫描原程序,生成程序函数调用表,供回卷函数优化时使用;(2)编译器在函数中插入运行时检测代码,检测堆栈的使用状态,并返回信息,供插入的运行时处理代码使用;(3)编译器在函数中插入堆栈运行时处理代码;(4)采用函数回卷技术,优化在函数中插入的代码的步骤。本发明无需在每个嵌套函数中插入代码,大大的减少了代码量。通过这样的方法就能够在应用程序运行时动态检测堆栈空间,并做相应的处理,排除发生堆栈运行溢出的可能性,最终保证系统可以在安全的前提下运行。
申请公布号 CN100426237C 申请公布日期 2008.10.15
申请号 CN200610051625.6 申请日期 2006.05.25
申请人 浙江大学 发明人 陈天洲;沙峰;谢斌;赵懿
分类号 G06F9/45(2006.01) 主分类号 G06F9/45(2006.01)
代理机构 杭州中成专利事务所有限公司 代理人 唐银益
主权项 1、一种嵌入式系统运行时堆栈溢出保护方法,包括以下步骤:(1)编译器分析扫描原程序,生成程序函数调用表,供回卷函数优化时使用;(2)编译器将检测代码插入到程序函数的开头处,检测堆栈的使用状态,并返回信息,供插入的运行时处理代码使用;(3)编译器在函数中插入堆栈运行时处理代码:如果无运行时堆栈溢出错误发生则处理代码不做任何事;有错误发生时:a、若程序发现堆栈空间底部处有富余可用的空间,则调整堆栈寄存器的位置和堆栈基准寄存器的位置,从而扩大堆栈空间,同时平移原堆栈中的数据到新堆栈底;恢复引起错误的函数调用以前的状态,并重新执行函数调用;b、若在堆栈空间底部没有发现有用空间,在整个内存空间寻找可用的空间;如果在整个内存空间中存在有用空间,则利用内存分配调用,分配一块内存,并通过数据结构和原堆栈连在一起,形成新堆栈,并平移原堆栈中的数据到新堆栈底;恢复引起错误的函数调用以前的状态,并重新执行函数调用;如果在整个内存空间中没有可用空间,则程序被挂起,等到有可用空间时再次被置入操作系统任务队列中运行;(4)采用函数回卷技术,优化在函数中插入的代码:对普通函数,不做任何处理;对嵌套调用的函数,进行函数回卷优化,从函数调用表中形成调用路径,将路径中所有在函数中插入的代码简化合并到最顶层的函数中,简化代码量。
地址 310027浙江省杭州市西湖区浙大路38号