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


Logo

华为开发者空间,是为全球开发者打造的专属开发空间,汇聚了华为优质开发资源及工具,致力于让每一位开发者拥有一台云主机,基于华为根生态开发、创新。

更多推荐