相关疑难解决方法(0)

如何动态生成和运行本机代码?

我想为我编写的玩具语言处理器编写一个非常小的概念验证JIT编译器(纯粹是学术性的),但我在设计的中间高度上遇到了一些麻烦.从概念上讲,我熟悉JIT的工作原理 - 您将字节码编译成(机器或汇编?)代码来运行.然而,在螺栓和螺栓水平上,我并不是在你实际上是怎么做的.

我的(非常"新手")下意识的反应,因为我没有第一个线索从哪里开始,将尝试类似以下内容:

  1. mmap()一块内存,设置对PROT_EXEC的访问
  2. 将本机代码写入块中
  3. 存储当前寄存器(堆栈指针,等等)
  4. 修改当前寄存器以指向映射区域中的本机代码块
  5. 现在,本机代码将由机器执行
  6. 恢复以前的寄存器

这甚至接近正确的算法吗?我已经尝试过阅读我知道有JIT编译器学习的不同项目(比如V8),但是由于它们的大小,这些代码库很难被消费,而我几乎不知道从哪里开始寻找.

c++ linux compiler-construction x86 jit

32
推荐指数
2
解决办法
9871
查看次数

标签 统计

c++ ×1

compiler-construction ×1

jit ×1

linux ×1

x86 ×1