ajvm是阿里的王智通用C语言及少量汇编代码编写的一个Java虚拟机原型,能够执行简单的java代码。
其结构简单,但却包含jvm的基本功能,因此我选来作为学习jvm底层基本实现机制的项目。
本人的环境: red hat 6.4虚拟机,intel i3的CPU
1. 源代码checkout:
ajvm项目的github下载地址: ajvm的github地址
2. 编译:
进入ajvm-master/ 目录,将Makefile中OBJS中的jvm.o修改为wvm.o,然后执行make命令
(怀疑这个项目后来又更新过,之前可能是jvm.c的源文件。额,既然现在已经叫wvm了,就都改成wvm了,况且w可能代表王的手字母,还是尊重作者意愿。)
如果编译成功,那恭喜!! 下面的篇幅请直接忽略...
如果执行 make 命令报如下的错:
trace.c:252: error: ‘REG_RIP’ undeclared (first use in this function)
make: *** [trace.o] Error 1
我去搜索了一下,是源文件中的 #define __USE_GNU 1 未生效。
于是直接将原本包含的头文件<ucontext.h>中的两段定义寄存器的结构体直接拷贝到目标源文件中(简单粗暴,此处汗颜...省略1万字...)
我的环境中,仍然报了下图中的错误,很明显,是重复定义了,将报错的这3个在其中的一个结构体中注释掉。
ok,编译就成功了。
好了,这就进入ajvm初探了。
参考:
[1] ajvm的github项目: https://github.com/cloudsec/ajvm
[2] R大的高级语言虚拟机版块,从回帖中了解到了ajvm项目: http://hllvm.group.iteye.com/group/topic/38476?page=2