[发明专利]一种实现高速CPU指令解释器的方法在审
申请号: | 202211259577.5 | 申请日: | 2022-10-13 |
公开(公告)号: | CN115509542A | 公开(公告)日: | 2022-12-23 |
发明(设计)人: | 黄钟吕 | 申请(专利权)人: | 上海芯竹科技有限公司 |
主分类号: | G06F8/41 | 分类号: | G06F8/41 |
代理公司: | 深圳博敖专利代理事务所(普通合伙) 44884 | 代理人: | 郭永娟 |
地址: | 200072 上海市静*** | 国省代码: | 上海;31 |
权利要求书: | 查看更多 | 说明书: | 查看更多 |
摘要: | |||
搜索关键词: | 一种 实现 高速 cpu 指令 解释 方法 | ||
1.一种实现高速CPU指令解释器的方法,其特征在于,包括以下步骤:
S1:运行CPU指令解析模块,解析需要解释执行的二进制文件所有的原始CPU指令得到指令逻辑;
S2:解释器指令生成模块获取CPU指令解析模块中解析获得的指令逻辑,并且根据该逻辑分解、重组指令,生成专为解释器指令执行模块使用的解释器指令;
S3:自定义动态链接器模块会把需要解释执行的二进制文件映射入待执行的进程的内存空间,绑定或者迟绑定该文件与系统模块的互相调用关系;
S4:系统回调入口模块会为每个可能的回调入口准备一块可执行的内存,应对从系统模块回到解释器内部的情况;
S5:自定义动态链接器把控制权交给解释器指令执行模块,并根据S2中生成的解释器指令快速执行;
S6:当需要解释执行的二进制文件需要调用系统函数时,ABI转换模块负责把该系统函数所需要的所有参数和返回值依照ABI的规范放到指定的内存/寄存器位置。
2.根据权利要求1所述的实现高速CPU指令解释器的方法,其特征在于,所述S1中,解析需要解释执行的二进制文件是由开源软件Capstone的核心完成。
3.根据权利要求1所述的实现高速CPU指令解释器的方法,其特征在于,所述S2中,所述根据该逻辑分解、重组指令,生成专为解释器指令执行模块使用的解释器指令具体为假定真实CPU指令集中使用的寄存器集合为S,则定义一个该集合的子集C,实现解释器指令的真实CPU指令只用到C中的寄存器,使用该子集可有效减少解释器的解释指令数量,避免解释器体积爆炸式的增长消耗大量内存,每一条解释器指令都被分配到一个数字a。
4.根据权利要求1所述的实现高速CPU指令解释器的方法,其特征在于,所述S2中,所述根据该逻辑分解、重组指令,生成专为解释器指令执行模块使用的解释器指令,包括:
S201:在真实CPU指令向解释器转换时,保存所有C集合中的寄存器到对应的内存位置;
S202:如果当前真实指令中的操作寄存器属于集合S但不属于C,则通过赋值指令把当前真实指令中操作寄存器的值从S集合转移到C集合中任一寄存器;如果当前真实指令中的操作寄存器属于集合C,则通过内存载入指令把S201中保存的C集合的寄存器对应的内存载入到C集合中任一寄存器;
S203:解释器中含有使用了限于C集合寄存器中的所有指令,使用解释器执行该指令;
S204:如果当前真实指令中的结果寄存器属于集合S但不属于C,则把解释器指令执行的结果寄存器的值,从C集合通过赋值指令转移回原指令中属于S集合的寄存器;如果当前真实指令中的结果寄存器属于集合C,则通过内存存放指令把结果从结果寄存器保存到S201中C集合的寄存器对应的内存位置;
S205:在解释器向真实CPU指令转换时,从内存中恢复所有C集合中的寄存器;
S206:通过以上的S201-S205拆分的一条真实CPU指令,变成若干条解释器中存在的指令,每条解释器中存在的指令都被一个数字a代表,将原真实CPU指令变成的若干个a保存。
5.根据权利要求1所述的实现高速CPU指令解释器的方法,其特征在于,所述S3中,所述把需要解释执行的二进制文件映射入待执行的进程的内存空间,绑定或者迟绑定该文件与系统模块的互相调用关系是由开源的dyld或linker完成。
该专利技术资料仅供研究查看技术是否侵权等信息,商用须获得专利权人授权。该专利全部权利属于上海芯竹科技有限公司,未经上海芯竹科技有限公司许可,擅自商用是侵权行为。如果您想购买此专利、获得商业授权和技术合作,请联系【客服】
本文链接:http://www.vipzhuanli.com/pat/books/202211259577.5/1.html,转载请声明来源钻瓜专利网。