我想要自我教育的目的,为dynamic语言实现一个简单的虚拟机,更喜欢用C.像Lua VM,Parrot或Python VM,但更简单。 除了查看现有虚拟机的代码和devise文档外,是否还有任何好的资源/教程来实现这个目标? 编辑:为什么近距离投票? 我不明白 – 这不是编程。 如果我的问题有特定的问题,请发表评论。
我读过一本将.net CLR称为虚拟机的书吗? 任何人都可以certificate这一点? 我们在某些开发平台上需要虚拟机的概念是什么原因? 是不是可以开发一个完全面向对象且与.net一样强大的本地框架(一个没有虚拟机)? CLR作为虚拟机的书是“ Professional .Net Framework 2.0 ”。
我正在为最近正在处理的业余爱好虚拟机编写一个JIT编译器。 我知道一些程序集,(我主要是一个C程序员,我可以阅读大部分程序集,但是我不明白这些操作码的含义,然后编写一些简单的程序),但是我很难理解几个例子自我修改的代码我在网上find的。 这是一个这样的例子: http : //asm.sourceforge.net/articles/smc.html 所提供的示例程序在运行时进行了大约四种不同的修改,其中没有一个被清楚地解释。 Linux内核中断被多次使用,并没有解释或详细说明。 (作者在调用中断之前把数据移到了几个寄存器中,我假设他正在传递参数,但是这些参数根本没有解释,让读者猜测)。 我正在寻找的是自修改程序代码中最简单,最直接的例子。 有些东西我可以看一下,用来理解x86程序集中的自修改代码是如何编写的,以及它是如何工作的。 是否有任何资源可以指向我,或者您可以提供哪些可以充分certificate这一点的例子? 我正在使用NASM作为我的汇编程序。 编辑:我也在Linux上运行这个代码。
使用基于寄存器的虚拟机与使用基于堆栈的虚拟机相比有什么优势和劣势? 对我来说,似乎基于寄存器的机器会更直接地编程和更高效。 那么为什么JVM,CLR和Python VM都是基于堆栈的呢?
我目前正在深入研究Java虚拟机的规范。 我一直在网上阅读JVM书籍 ,有一个令人困惑的抽象,我似乎无法把握:常量池。 这里是这本书的摘录: 对于加载的每种types,Java虚拟机必须存储常量池。 常量池是types常量的有序集合,包括文字(string,整数和浮点常量)以及对types,字段和方法的符号引用。 常量池中的条目被索引引用,就像数组中的元素一样。 由于它拥有对types使用的所有types,字段和方法的符号引用,所以常量池在Java程序的dynamic链接中起着核心作用 关于上述和CP总体上我有几个问题: CP是否位于每个types的.class文件中? 作者所说的“象征性的参考”是什么? 常量池的目的是什么,用简单的英语?
我很好奇,为什么Sun决定创build基于JVM栈,而Google决定制作基于DalvikVM寄存器的? 我猜想JVM不能真的假定在目标平台上有一定数量的寄存器可用,因为它应该是平台独立的。 因此,它只是推迟寄存器分配等,到JIT编译器。 (如我错了请纠正我。) 所以,Android的人认为,“嘿,这是无效的,让我们立即注册基于VM …”? 但是,等等,有多种不同的Android设备,Dalvik目标有多less个寄存器呢? Dalvik操作码是否针对一定数量的寄存器进行硬编码? 目前市场上所有的Android设备都拥有相同数量的寄存器吗? 或者,是否有在dex-loading期间执行的寄存器重新分配? 这一切如何融合在一起?
作为一种跟进称为MSIL和Java字节码之间差异的问题? Java虚拟机如何工作与如何工作有什么(主要)差异或相似之处 .NET Framework 公共语言运行时(CLR)的作品? 另外,是 .NET框架 CLR是“虚拟机”还是没有虚拟机的属性?