一种实现高速CPU指令解释器的方法技术

技术编号:36089843 阅读:14 留言:0更新日期:2022-12-24 11:06
本发明专利技术涉及指令解释器技术领域,具体为一种实现高速CPU指令解释器的方法,包括以下步骤,S1:运行CPU指令解析模块,解析需要解释执行的二进制文件所有的原始CPU指令得到指令逻辑。本发明专利技术中,提供的解释器均使用1

【技术实现步骤摘要】
一种实现高速CPU指令解释器的方法


[0001]本专利技术涉及指令解释器
,尤其涉及一种实现高速CPU指令解释器的方法。

技术介绍

[0002]在计算机发展的历史与过程中,解释器(Interpreter)占有了重要的地位,与编译器(Compiler)形成一个相对应的概念,相比编译器编译出可以直接运行在CPU之上的本地程序,解释器解释运行的程序运行相对较慢,但是解释器也拥有许多编译器编译出的本地程序无法比拟的优势:开发者运行程序时拥有程序的完整控制权,可以在运行中非常方便地检测包括但不限于内存泄漏,堆栈越界,系统调用记录等的问题,此外,解释器不需要编译,写完即运行,同时也不会受到程序运行所在系统平台的安全策略限制,也受到了许多开发者的欢迎,在解释器的实际使用过程中,其运行速度相对较慢,通常与编译器编译的本地程序相比相差了20

700倍不等。

技术实现思路

[0003]本专利技术的目的是解决现有技术中存在的缺点,而提出的一种实现高速CPU指令解释器的方法。
[0004]为了实现上述目的,本专利技术采用了如下技术方案,一种实现高速CPU指令解释器的方法,包括以下步骤:
[0005]S1:运行CPU指令解析模块,解析需要解释执行的二进制文件所有的原始CPU指令得到指令逻辑;
[0006]S2:解释器指令生成模块获取CPU指令解析模块中解析获得的指令逻辑,并且根据该逻辑分解、重组指令,生成专为解释器指令执行模块使用的解释器指令;
[0007]S3:自定义动态链接器模块会把需要解释执行的二进制文件映射入待执行的进程的内存空间,绑定或者迟绑定该文件与系统模块的互相调用关系;
[0008]S4:系统回调入口模块会为每个可能的回调入口准备一块可执行的内存,应对从系统模块回到解释器内部的情况;
[0009]S5:自定义动态链接器把控制权交给解释器指令执行模块,并根据S2中生成的解释器指令快速执行;
[0010]S6:当需要解释执行的二进制文件需要调用系统函数时,ABI转换模块负责把该系统函数所需要的所有参数和返回值依照ABI的规范放到指定的内存/寄存器位置。
[0011]作为本专利技术的进一步方案,所述S1中,解析需要解释执行的二进制文件是由开源软件Capstone的核心完成。
[0012]作为本专利技术的进一步方案,所述S2中,所述根据该逻辑分解、重组指令,生成专为解释器指令执行模块使用的解释器指令具体为假定真实CPU指令集中使用的寄存器集合为S,则定义一个该集合的子集C,实现解释器指令的真实CPU指令只用到C中的寄存器,使用该子集可有效减少解释器的解释指令数量,避免解释器体积爆炸式的增长消耗大量内存,每
一条解释器指令都被分配到一个数字a。
[0013]作为本专利技术的进一步方案,所述S2中,所述根据该逻辑分解、重组指令,生成专为解释器指令执行模块使用的解释器指令,包括:
[0014]S201:在真实CPU指令向解释器转换时,保存所有C集合中的寄存器到对应的内存位置;
[0015]S202:如果当前真实指令中的操作寄存器属于集合S但不属于C,则通过赋值指令把当前真实指令中操作寄存器的值从S集合转移到C集合中任一寄存器;如果当前真实指令中的操作寄存器属于集合C,则通过内存载入指令把S201中保存的C集合的寄存器对应的内存载入到C集合中任一寄存器;
[0016]S203:解释器中含有使用了限于C集合寄存器中的所有指令,使用解释器执行该指令;
[0017]S204:如果当前真实指令中的结果寄存器属于集合S但不属于C,则把解释器指令执行的结果寄存器的值,从C集合通过赋值指令转移回原指令中属于S集合的寄存器;如果当前真实指令中的结果寄存器属于集合C,则通过内存存放指令把结果从结果寄存器保存到S201中C集合的寄存器对应的内存位置;
[0018]S205:在解释器向真实CPU指令转换时,从内存中恢复所有C集合中的寄存器;
[0019]S206:通过以上的S201

S205拆分的一条真实CPU指令,变成若干条解释器中存在的指令,每条解释器中存在的指令都被一个数字a代表,将原真实CPU指令变成的若干个a保存。
[0020]作为本专利技术的进一步方案,所述S3中,所述把需要解释执行的二进制文件映射入待执行的进程的内存空间,绑定或者迟绑定该文件与系统模块的互相调用关系是由开源的dyld或linker完成。
[0021]作为本专利技术的进一步方案,所述S2中,所述根据该逻辑分解、重组指令,生成专为解释器指令执行模块使用的解释器指令,包括:
[0022]S401:在解释器中编译一整个内存页的跳转指令,每一个跳转指令都会读取位于大小为一个内存页之后的数据来进行跳转;
[0023]S402:获得所有需要回调入需要解释执行的二进制文件的入口;
[0024]S403:映射S401中的内存页为可执行,并在紧接着这页内存后再映射一页可读写内存,S401中的所有跳转指令就能读取后一页可读写内存来携带不同的数据;
[0025]S404:为每一个入口分配到S401中内存页中的跳转指令,并且在位于该条跳转指令大小为一个内存页之后的地址写入相关数据,使得该跳转指令在跳转入解释器入口时能携带独特而正确的信息;
[0026]S405:当需要的入口数多于一个内存页能承载的跳转指令数时,使用操作系统的重映射功能,反复映射S401中的内存页来扩展跳转指令数。
[0027]作为本专利技术的进一步方案,S501:在编译过程中生成一个指令跳转表,为所有属于C集合的解释器指令分配一个数字;
[0028]S502:读取S2中生成的由不同数字a组成的输入,根据数字跳转到不同的解释器指令;
[0029]S503:如果当前解释器指令为调用系统函数,则交由ABI转换模块处理;
[0030]S504:如果有更多的数字a,则回到S501,否则结束。
[0031]作为本专利技术的进一步方案,S601:进入真实指令CPU执行前,把属于集合C中的所有寄存器,通过内存载入指令从保存寄存器的内存位置载入回寄存器;
[0032]S602:当真实指令CPU执行完毕,通过内存存放指令把属于集合C中的所有寄存器保存入内存的相应位置。
[0033]与现有技术相比,本专利技术的优点和积极效果在于:
[0034]本专利技术中,提供的解释器均使用1

2条真实指令实现解释器指令,而原始的真实指令平均会被分解为3

4条指令,如果增加常用的真实指令到解释器指令中去,原始真实指令甚至不需要分解,额外开销极小,是理论上最快的CPU指令解释器,在解释器运行前分析需要解释执行的二进制文件,把真实指令集转换成解释器指令集,在运行时就不需要再次分析真实指令,解释器直接根据运行前的分析结果快速运行,速度很快,把解释器放在真实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集合的寄存器;如果当前真...

【专利技术属性】
技术研发人员:黄钟吕
申请(专利权)人:上海芯竹科技有限公司
类型:发明
国别省市:

网友询问留言 已有0条评论
  • 还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。

1