HS.*_*HS. 19 interpreter jit .net-assembly
虚拟机如何动态生成本机代码并执行它?
假设您可以确定要发出的本机机器操作码是什么,那么您如何实际运行它?
将助记符指令映射到二进制代码,将其填充到char*指针并将其作为函数进行转换并执行是不是很麻烦?
或者你会生成一个临时共享库(.dll或.so或其他)并使用标准函数将其加载到内存中LoadLibrary吗?
小智 6
将助记符指令映射到二进制代码,将其填充到char*指针并将其作为函数进行转换并执行是不是很麻烦?
是的,如果你是用C或C++(或类似的东西)做的,那正是你要做的.
看起来很酷,但这实际上是语言设计的一件神器.请记住,您要使用的实际算法非常简单:确定要使用的指令,将它们加载到内存中的缓冲区中,然后跳转到该缓冲区的开头.
但是,如果您确实尝试这样做,请确保在返回C程序时获得正确的调用约定.我想如果我想生成代码,我会寻找一个库来为我处理这个方面.Nanojit最近出现在新闻中; 你可以看一下.