[发明专利]代码堆栈管理方法有效
申请号: | 201480051802.3 | 申请日: | 2014-09-28 |
公开(公告)号: | CN105556466B | 公开(公告)日: | 2020-10-23 |
发明(设计)人: | M·K·克施温德 | 申请(专利权)人: | 国际商业机器公司 |
主分类号: | G06F9/448 | 分类号: | G06F9/448;G06F9/30;G06F9/4401 |
代理公司: | 中国贸促会专利商标事务所有限公司 11038 | 代理人: | 申发振 |
地址: | 美国*** | 国省代码: | 暂无信息 |
权利要求书: | 查看更多 | 说明书: | 查看更多 |
摘要: | |||
搜索关键词: | 代码 堆栈 管理 方法 | ||
1.一种用于代码栈管理的计算机系统,所述系统包括:
处理器,配置为执行软件应用;以及
存储器,包括代码栈存储器区域和数据栈存储器区域,所述代码栈存储器区域与所述数据栈存储器区域分离;
所述系统配置为执行方法,所述方法包括:
将数据栈保持在所述数据栈存储器区域中,所述数据栈包括多个栈帧,所述多个栈帧包括与所述软件应用的执行相对应的一个或者多个数据变量,其中所述数据栈不包含任何可执行计算机代码,所述数据栈存储器区域是可写的并且不可执行的;
将代码栈保持在所述代码栈存储器区域中,所述代码栈包括多个代码栈条目,所述多个代码栈条目包括与所述软件应用的执行相对应的可执行计算机代码,其中所述代码栈存储器区域是可执行的;
确定指向所述代码栈中的最近代码栈条目的关联栈帧的指针的值,其中最近分配代码栈条目由所述代码栈的代码栈指针CSP引用;
确定指向所述关联栈帧的所述指针是否引用所述数据栈中的有效栈帧;
基于确定指向所述关联栈帧的所述指针不引用所述数据栈中的有效栈帧,将所述最近代码栈条目从所述代码栈解除分配;以及
基于确定指向所述关联栈帧的所述指针引用所述数据栈中的有效栈帧,将新代码栈条目分配在所述代码栈上,并且设定所述CSP以引用所述新代码栈条目。
2.根据权利要求1所述的系统,所述方法还包括:
在将新代码栈条目分配到所述代码栈上之前,将所述代码栈存储器区域设定为可写并且不可执行;以及
在将所述新代码栈条目分配到所述代码栈上之后,将所述代码栈存储器区域设定为可执行并且不可写。
3.根据权利要求1所述的系统,所述方法还包括:
输入所述软件应用的函数;
基于输入所述函数,将所述代码栈的CSP的当前值存储在所述数据栈上的所述函数的存储器位置中;
将一个或者多个条目分配在与蹦床函数相对应的所述代码栈上,所述蹦床函数与指向所述函数的一个或者多个嵌套函数的指针结合使用,其中最近分配的代码栈条目由所述CSP引用;以及
在所述函数退出之前,通过加载来自所述存储器位置的所存储的CSP值恢复所述CSP。
4.根据权利要求1所述的系统,所述方法还包括:
输入所述软件应用的函数;
将一个或者多个条目分配在与所述函数的一个或者多个嵌套函数相对应的所述代码栈上,其中最近分配的代码栈条目由CSP引用;以及
在所述函数退出之前,通过从所述CSP移除为所述一个或者多个代码栈条目分配的总存储器大小以恢复所述CSP。
5.根据权利要求1所述的系统,代码栈条目包括:
与动态生成的蹦床函数相对应的代码,所述蹦床函数与指向所述软件应用的嵌套函数的指针结合使用;以及
指向与所述代码栈条目相关联的栈帧的指针,所述指针引用所述数据栈中的关联栈帧。
6.根据权利要求1所述的系统,所述方法还包括:
存储所述代码栈的CSP的值作为当前函数的代码栈屏障CSB;
为与指向嵌套函数的指针结合使用的蹦床函数分配新代码栈条目;以及
设定所述代码栈的CSP以引用所述新代码栈条目;以及
在所述当前函数退出之前设定所述CSP等于所述CSB以将所述新代码栈条目从所述代码栈解除分配。
该专利技术资料仅供研究查看技术是否侵权等信息,商用须获得专利权人授权。该专利全部权利属于国际商业机器公司,未经国际商业机器公司许可,擅自商用是侵权行为。如果您想购买此专利、获得商业授权和技术合作,请联系【客服】
本文链接:http://www.vipzhuanli.com/pat/books/201480051802.3/1.html,转载请声明来源钻瓜专利网。
- 上一篇:一种I/O任务处理的方法、设备和系统
- 下一篇:用于数字杂志的动态布局引擎