[发明专利]防内存越界的程序编译方法及装置有效
| 申请号: | 202111033647.0 | 申请日: | 2021-09-03 |
| 公开(公告)号: | CN113672237B | 公开(公告)日: | 2022-03-11 |
| 发明(设计)人: | 刘晓建 | 申请(专利权)人: | 支付宝(杭州)信息技术有限公司 |
| 主分类号: | G06F8/41 | 分类号: | G06F8/41;G06F8/33 |
| 代理公司: | 北京博思佳知识产权代理有限公司 11415 | 代理人: | 周嗣勇 |
| 地址: | 310000 浙江省杭州市*** | 国省代码: | 浙江;33 |
| 权利要求书: | 查看更多 | 说明书: | 查看更多 |
| 摘要: | |||
| 搜索关键词: | 内存 越界 程序 编译 方法 装置 | ||
1.一种防内存越界的程序编译方法,包括:
在将源程序编译为目标程序的过程中,针对所述源程序中的内存访问代码生成地址检查机器码,所述目标程序对应的内存分配空间处于一段连续的虚拟地址段内,所述虚拟地址段的段基址包含位于高位的段号和位于低位的若干零值逻辑位,所述虚拟地址段的段长不小于所述若干零值逻辑位所能够表示的最大地址空间;所述地址检查机器码用于:
针对所述内存访问代码所需访问的目标内存空间,将所述目标内存空间对应的线性地址的高位数据与所述段基址中包含的段号进行比较,所述线性地址为所述目标内存空间相对于所述段基址的段偏移量与所述段基址之和,且所述高位数据与所述段号的位数相同;
在比较结果为相同的情况下,允许根据所述线性地址访问内存中的所述目标内存空间。
2.根据权利要求1所述的方法,还包括:
针对所述内存访问代码生成地址计算机器码,所述地址计算机器码用于将所述内存访问代码中携带的段偏移量与所述段基址相加得到的所述线性地址写入第一预设存储空间,以使所述地址检查机器码在执行时从第一预设存储空间处获取所述目标内存空间对应的所述线性地址。
3.根据权利要求1所述的方法,还包括:
针对所述内存访问代码生成越界报警机器码,所述越界报警机器码用于在所述线性地址的高位数据与所述段基址中包含的段号比较结果为不同的情况下触发越界报警机制。
4.根据权利要求3所述的方法,所述越界报警机制至少包括停止运行所述目标程序和/或输出错误信息以指示发生内存越界的指令位置。
5.根据权利要求1所述的方法,所述将源程序编译为目标程序包括:
在对所述源程序进行解释执行的过程中,将所述源程序编译为所述目标程序;或者,
将所述源程序AOT编译为所述目标程序。
6.根据权利要求1所述的方法,所述段号或者所述段基址预先存储在第二预设存储空间,以使所述地址检查机器码在执行时从第二预设存储空间处获取所述段基址中包含的所述段号。
7.根据权利要求6所述的方法,第二预设存储空间包括下述任一:寄存器、所述虚拟地址段中预定义的内存空间或所述虚拟地址段外预定义的内存空间。
8.根据权利要求6所述的方法,第二预设存储空间仅参与生成所述地址检查机器码的编译过程。
9.根据权利要求1所述的方法,所述目标程序的首地址与所述虚拟地址段的段基址对齐。
10.根据权利要求1所述的方法,所述内存访问代码包括字节码。
11.根据权利要求1所述的方法,所述源程序或所述目标程序为部署于区块链系统中的智能合约。
12.一种防内存越界的程序编译装置,包括:
地址检查机器码编译单元,用于在将源程序编译为目标程序的过程中,针对所述源程序中的内存访问代码生成地址检查机器码,所述目标程序对应的内存分配空间处于一段连续的虚拟地址段内,所述虚拟地址段的段基址包含位于高位的段号和位于低位的若干零值逻辑位,所述虚拟地址段的段长不小于所述若干零值逻辑位所能够表示的最大地址空间;所述地址检查机器码用于:
针对所述内存访问代码所需访问的目标内存空间,将所述目标内存空间对应的线性地址的高位数据与所述段基址中包含的段号进行比较,所述线性地址为所述目标内存空间相对于所述段基址的段偏移量与所述段基址之和,且所述高位数据与所述段号的位数相同;
在比较结果为相同的情况下,允许根据所述线性地址访问内存中的所述目标内存空间。
该专利技术资料仅供研究查看技术是否侵权等信息,商用须获得专利权人授权。该专利全部权利属于支付宝(杭州)信息技术有限公司,未经支付宝(杭州)信息技术有限公司许可,擅自商用是侵权行为。如果您想购买此专利、获得商业授权和技术合作,请联系【客服】
本文链接:http://www.vipzhuanli.com/pat/books/202111033647.0/1.html,转载请声明来源钻瓜专利网。
- 上一篇:长冲程振动试验台的承载装置
- 下一篇:一种低吸水率尼龙复合材料





