设为首页 - 加入收藏 焦点技术网
热搜:java
当前位置:首页 >

Jasmin-Java汇编语言

2006-03-09 00:32:00.0 Java技术 汇编 access table java list branch  
导读:Jasmin-Java汇编语言(http://blog.csdn.net/kingspider/)(http://blog.sina.com.cn/u/1163490885)Jasmin是Java汇编语言,以文本方式来描述JVM的指令集以及Java Class的结构,Jasmin编译器可以把汇编语言转换成二进制的字节码,使JVM可以调入执行。Jasmin最初是由Jon Meyer和Troy Dow...。。。

Jasmin-Java汇编语言
http://blog.csdn.net/kingspider/
http://blog.sina.com.cn/u/1163490885

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

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

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

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

下面是用JavaCC导出的Jasmin BNF范式:

BNF for JasminParser.jj

NON-TERMINALS

jas_file::=source_spec class_spec super_spec implements_list fields methods
source_spec::=( )?
class_spec::= access classname
 | access classname
classname::=
access::=access_list
access_list::=( access_item )*
access_item::=
 |
 |
 |
 |
 |
 |
 |
 |
 |
 |
super_spec::= classname
implements_list::=( implements_spec | )*
implements_spec::= classname
fields::=( field_spec )*
field_spec::= access optional_default
optional_default::=( item )?
item::=
 |
 |
methods::=( method_spec )*
method_spec::=defmethod statements endmethod
defmethod::= access
endmethod::=
statements::=( statement )*
statement::=stmnt
stmnt::=( label | directive | instruction )?
label::=
directive::= var_expr
 | limit_expr
 | line_expr
 | throws_expr
 | catch_expr
 | set_expr
var_expr::= ( )?
limit_expr::=
line_expr::=
throws_expr::=classname
catch_expr::=classname
set_expr::=
 |
 |
 |
instruction::=simple_instruction
 |complex_instruction
simple_instruction::=
 |
 |
 |
 |
 |
 |
 |
complex_instruction::= lookup
 | table
lookup::=lookup_args lookup_list lookup_default
lookup_args::=
lookup_list::=( lookup_entry )+
lookup_entry::=
lookup_default::=
table::=table_args table_list table_default
table_args::=
 |
table_list::=( table_entry )+
table_entry::=
table_default::=

(编辑: kingspider)

网友评论