c语言sscanf函数的用法是什么
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
aload_0
invokenonvirtual java/lang/Object/
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小时内删除侵权内容。
发表评论
暂时没有评论,来抢沙发吧~