首页 / 知识
关于解释器:JIT代码生成技术
2023-04-14 07:17:00

JIT code generation techniques虚拟机如何动态生成本机代码并执行它? 假设您可以弄清楚您要发出的本机操作码是什么,如何实际运行它? 是否像将助记符指令映射到二进制代码,将其填充到char *指针并将其强制转换为函数并执行一样,有点怪癖?
还是会生成一个临时共享库(.dll或.so或其他),然后使用 您可以使程序计数器指向您要执行的代码。请记住,数据可以是数据或代码。在x86上,程序计数器是EIP寄存器。 EIP的IP部分代表指令指针。调用JMP指令以跳转到一个地址。跳转后,EIP将包含此地址。
是。这是一种方法。结果代码将转换为C语言中的函数指针。
是的,如果您使用C或C ++(或类似的东西)来做,那正是您要做的。 看起来很黑,但这实际上是语言设计的产物。请记住,您要使用的实际算法非常简单:确定要使用的指令,将它们加载到内存中的缓冲区中,然后跳转到该缓冲区的开头。 但是,如果您确实尝试执行此操作,请确保在返回C程序时正确使用了调用约定。我想如果我想生成代码,我会寻找一个图书馆来照顾我。 Nanojit最近成为新闻。你可以看一下。 对。您只需构建一个char *并执行它。但是,您需要注意一些细节。 char *必须在内存的可执行部分中,并且必须具有正确的对齐方式。 除了nanojit之外,您还可以签出LLVM,这是另一个库,能够将各种程序表示形式编译为功能指针。它的界面整洁,生成的代码趋向于高效。
是的,那行得通。 要在Windows中执行此操作,必须将PAGE_EXECUTE_READWRITE设置为已分配的块:
关于生成DLL:为此需要额外的I / O,再加上链接,再加上生成DLL格式的复杂性,将使事情变得更加复杂,并且最重要的是,它们会破坏性能。此外,最后您仍然调用指向已加载代码的函数指针,因此... 关于"可执行部分"的要求,在POSIX系统上调用mprotect()可以修复权限(Win32上有类似的API)。您需要对较大的内存段执行此操作,而不是对每个方法都执行一次,否则会太慢。 在纯x86上,您不会注意到该问题,在具有PAE或64位AMD64 / Intel 64位计算机的x86上,您会遇到段错误。 除了Rotor 2.0之外,您还可以查看OpenJDK中的HotSpot虚拟机。 据我所知,它必须编译内存中的所有内容,因为它必须运行一些试探法来优化代码(即:随着时间的推移而内联),但是您可以看看Shared Source Common Language Infrastructure 2.0转子版本。整个代码库与.NET相同,除了抖动和GC。 |
最新内容
相关内容
linux命令行执行py?
linux命令行执行py?,系统,环境,官网,一致,文件,程序,脚本,源文件,后台,终端,linux下用命令执行一个.py区别很大,因为用./执行的只能是可执行文linux执行权限命令行?
linux执行权限命令行?,地址,电脑,系统,数字,工作,权限,目录,文件,新增,信息,Linux命令行执行root权限的命令1、目录方法1:从终端获取root权限打程序执行linux命令?
程序执行linux命令?,系统,工作,地址,环境,信息,管理,命令,文件,目录,程序,linux下如何运行可执行文件1、先将终端所在路径切换到python脚本文linux执行2个命令?
linux执行2个命令?,工作,系统,基础,命令,基础知识,信息,管理,在线,概念,第一,Linux多命令顺序执行通过链接,多个命令可以顺序执行或嵌套执行;通linux命令批量执行?
linux命令批量执行?,系统,代码,工作,周期性,数据,定期,环境,命令,文件,脚本,linux如何对多个文件执行相同命令1、一次执行多个命令可以将多个linux二进制执行命令?
linux二进制执行命令?,系统,工作,情况,代码,信息,位置,地址,命令,文件,目录,Linux系统常用操作命令有哪些1、linux常用命令: pwd命令 该命令linux虚拟机ls命令?
linux虚拟机ls命令?,系统,信息,时间,命令,最新,标准,工作,名称,文件,目录,linux写脚本,需要ls只显示前10个文件,怎么实现?在linux中如果用ls查linux执行退出命令?
linux执行退出命令?,档案,状态,工作,命令,信息,地址,电脑,系统,编辑,文件,linux保存并退出的命令(linux常用命令保存退出)linux保存并退出命令linux中后台执行命令?
linux中后台执行命令?,系统,状态,暂停,灵活,电脑,网络,服务,第一,名字,命令,linux以后台服务怎么停止运行若是es的前台运行,则用ctrl + c来停止linux虚拟机扩容命令?
linux虚拟机扩容命令?,扩大,系统,在线,虚拟机,盘后,工具,硬盘,磁盘,单击,下一步,Linux虚拟机添加新硬盘的全程图解1、先关闭LINUX系统,在vmwarelinux常用的执行命令?
linux常用的执行命令?,系统,地址,工作,基础,标准,命令,工具,环境,信息,代码,Linux下最常用的Shell命令的介绍Linux中的shell有多种类型,其中最linux执行线程命令?
linux执行线程命令?,系统,工作,线程,软件,服务,管理,信息,环境,名称,命令,linux下线程属性常用操作有哪些1、linux系统常用操作命令linux系统