发明名称 一种检测运行栈与静态数据区重叠的方法
摘要 本发明公开了一种检测运行栈与静态数据区重叠的方法。该方法在链接器中对运行栈和静态数据区在数据内存中的布局进行调整,然后在软件模拟器中进行运行时检测,在软件模拟器中添加判断栈指针值与数据内存最低地址大小关系的代码,如果栈指针值小于数据内存最低地址,就说明发生了运行栈下溢,在原程序中出现运行栈与静态数据区重叠的错误。本发明的优点:1)在模拟器中只需要添加判断栈指针值与数据内存基址大小关系的代码,当程序执行中发生运行栈下溢的情况时就可以自动报告错误;2)没有带来内存开销;3)生成的可执行文件可以加载到硬件上运行。
申请公布号 CN100426254C 申请公布日期 2008.10.15
申请号 CN200510093280.6 申请日期 2005.08.23
申请人 中国科学院计算技术研究所 发明人 谷晓铭;霍玮;桂剑;贾耀仓;张兆庆;冯晓兵
分类号 G06F11/36(2006.01);G06F9/455(2006.01) 主分类号 G06F11/36(2006.01)
代理机构 北京泛华伟业知识产权代理有限公司 代理人 高存秀
主权项 1、 一种检测运行栈与静态数据区重叠的方法,该方法在链接器中对运行栈和静态数据区在数据内存中的布局进行调整,然后在软件模拟器中进行运行时检测,具体步骤包括:1)在链接器统计出静态数据区中各个区的大小后为每个区分配一个新的加载地址;包括以下子步骤:步骤1.1:得到要调整的各个区的原加载地址和大小;步骤1.2:从数据内存空间的最高地址开始由高往低为每个区分配新的加载地址;步骤1.3:计算每个区加载地址的变化量;2)在链接器中计算出新的栈指针初始值,并写入到可执行文件中对栈指针初始化定值的指令处;其中所述新的栈指针初始值的计算为:在分配新的加载地址中的每个区中找出地址最低区,把数据内存中紧靠上述静态数据区的最高地址作为新的栈指针值;包括以下子步骤:步骤2.1:根据步骤1.2中计算出的静态数据区中地址最低的区的加载地址,把数据内存中紧靠静态数据区的最高地址作为新的栈指针值;步骤2.2:得到初始化栈指针指令在生成的可执行文件中的位置;步骤2.3:把新的栈指针值写到可执行文件的目标位置上;3)在链接器中修改被调整的各个区中重定位条目的地址计算公式,加上所在区加载地址的变化量;包括如下子步骤:步骤3.1:判别重定位条目的目标位置所在的区;步骤3.2:得到步骤1.3中已经计算好的重定位条目的目标位置所在区的加载地址变化量;步骤3.3:把得到的区加载地址变化量和原来重定位条目中的参与地址计算的偏移量相加,结果就是调整后对应的参与地址计算的偏移量;4)在软件模拟器中添加判断栈指针值与数据内存最低地址大小关系的代码;如果栈指针值小于数据内存最低地址,就说明发生了运行栈下溢,在原程序中出现运行栈与静态数据区重叠的错误,发送错误报告。
地址 100080北京市海淀区中关村科学院南路6号