我想为我编写的玩具语言处理器(纯学术性)编写一个非常小的概念验证JIT编译器,但我在设计的中间阶段遇到了一些麻烦。从概念上讲,我熟悉JIT的工作原理——将字节码编译成(机器或程序集?)代码来运行。然而,在螺母和螺栓的层面上,我不太了解你实际上是如何做的
我(非常“新手”)的下意识反应是,因为我不知道从哪里开始,我会尝试下面的方法:
- mmap()内存块,设置对PROT_EXEC的访问
- 将本机代码写入块中
- 将当前寄存器(堆栈指针等)存储在舒适的地方
- 修改当前寄存器以指向映射区域中的本机代码块
- 本机代码现在将由计算机执行
- 恢复以前的寄存器
这是否与正确的算法非常接近?我试过阅读我知道有JIT编译器要研究的不同项目(如V8),但这些代码库由于其大小而很难使用,我不知道从哪里开始寻找
answer=“4912662”的数据