主权项 |
1、一种嵌入式系统运行时堆栈溢出保护方法,包括以下步骤:(1)编译器分析扫描原程序,生成程序函数调用表,供回卷函数优化时使用;(2)编译器将检测代码插入到程序函数的开头处,检测堆栈的使用状态,并返回信息,供插入的运行时处理代码使用;(3)编译器在函数中插入堆栈运行时处理代码:如果无运行时堆栈溢出错误发生则处理代码不做任何事;有错误发生时:a、若程序发现堆栈空间底部处有富余可用的空间,则调整堆栈寄存器的位置和堆栈基准寄存器的位置,从而扩大堆栈空间,同时平移原堆栈中的数据到新堆栈底;恢复引起错误的函数调用以前的状态,并重新执行函数调用;b、若在堆栈空间底部没有发现有用空间,在整个内存空间寻找可用的空间;如果在整个内存空间中存在有用空间,则利用内存分配调用,分配一块内存,并通过数据结构和原堆栈连在一起,形成新堆栈,并平移原堆栈中的数据到新堆栈底;恢复引起错误的函数调用以前的状态,并重新执行函数调用;如果在整个内存空间中没有可用空间,则程序被挂起,等到有可用空间时再次被置入操作系统任务队列中运行;(4)采用函数回卷技术,优化在函数中插入的代码:对普通函数,不做任何处理;对嵌套调用的函数,进行函数回卷优化,从函数调用表中形成调用路径,将路径中所有在函数中插入的代码简化合并到最顶层的函数中,简化代码量。 |