虚拟机如何动态生成本机机器代码并执行它?
假设您可以弄清楚想要发出的本机机器操作码是什么,那么如何实际运行它呢?
它是否像将助记符指令映射到二进制代码,将其填充到 char* 指针中并将其转换为函数并执行一样hacky?
或者您会生成一个临时共享库(.dll 或 .so 或其他)并使用标准函数将其加载到内存中,例如LoadLibrary
?
你可以只做程序计数器 http://en.wikipedia.org/wiki/Program_counter指向您要执行的代码。请记住,数据可以是数据或代码。在 x86 上,程序计数器是 EIP 寄存器。 EIP的IP部分代表指令指针。调用JMP指令跳转到某个地址。跳转后的EIP就会包含这个地址。
它是否像将助记符指令映射到二进制代码,将其填充到 char* 指针中并将其转换为函数并执行一样hacky?
是的。这是一种方法。生成的代码将被转换为指向函数的指针 http://en.wikipedia.org/wiki/Pointer_to_function in C.
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)