Java 汇编JVM编写jasmin程序的操作方法

网友投稿 265 2023-01-18

Java 汇编JVM编写jasmin程序的操作方法

Jasmin是java汇编语言,以文本方式来描述JVM的指令集以及Java Class的结构,Jasmin编译器可以把汇编语言转换成二进制的字节码,使JVM可以调入执行。

Jasmin最初是由Jon Meyer和Troy Downing编纂《Java Virtual Machine》时设计的范例,虽然该书不再出版,但是Jasmihttp://n成为了事实上的Java汇编语言标准,并作为开源项目得到发展:http://jasmin.sourceforge.net/。

Jasmin在Java class方面的处理非常灵活,可以不受Java语法的一些限定,变量名、方法名等可以是Java源码中的非法单词,例如在Jasmin中可以定义变量名为if,但是在Java源码中是不行的。真是鉴于这样一个特点,Jasmin对于某些混淆处理过的Java代码仍然可以进行修改,可以对Java软件的License控制造成了一定程度的威胁,这也是Jasmin曾经受到抵制的原因。

我本人对Jasmin比较感兴趣,曾经根据Jasmin的语法,自己用JavaCC编写了一个功能更加强大的编译器,主要是对Jon Meyer提供的语法进行了一点扩展。

下面看下Java 汇编JVM编写jasmin程序的操作方法,具体详情如下所示:

如何编写jasmin程序

jasmin程序网上几乎没有资料(或者没有)。

今天我就先举http://例一个

;(分号)开头的都为注释

.class public Count

.super java/lang/Object

;

; standard initializer

.method public ()V

aload_0

invokenonvirtual java/lang/Object/()V

return

.end method

.method public static main([Ljava/lang/String;)V

; set limits used by this method

.limit locals 4

.limit stack 3

; setup local variables:

; 1 - the PrintStream object held in java.lang.System.out

getstatic java/lang/System/out Ljava/io/PrintStream;

astore_1

; 2 - the integer 10 - the counter used in the loop

bipush 10

istore_2

; now loop 10 times printing out a number

Loop:

; compute 10 - ...

bipush 10

iload_2

isub

invokestatic java/lang/String/valueOf(I)Ljava/lang/String;

astore_3

; ... and print it

aload_1 ; push the PrintStream object

aload_3 ; push the string we just created - then ...

invokevirtual java/io/PrintStream/println(Ljava/ljYEFuaang/String;)V

; decrement the counter and loop

iinc 2 -1

iload_2

ifne Loop

; done

return

.end method

程序运行结果如下:

这算是一个典例了,一个计数输出程序。

学这门汇编语言前,最好有一定的java基础,比如关于对象,输入输出的知识。

在开始学习这个的时候,我还没学过java,真的是一脸懵逼,后面花了两个晚上去学习,这对我理解程序有了很大的帮助。

版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:详解SpringBoot2.0的@Cacheable(Redis)缓存失效时间解决方案
下一篇:如何找到免费api(如何找到免费的麻将游戏)
相关文章

 发表评论

暂时没有评论,来抢沙发吧~