Jasmin-Java汇编语言
来源:互联网 发布:数控铣床编程代码d01 编辑:程序博客网 时间:2024/06/07 00:24
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 ::= ( <DSOURCE> <Word> <SEP> )? class_spec ::= <DCLASS> access classname <SEP> | <DINTERFACE> access classname <SEP> classname ::= <Word> access ::= access_list access_list ::= ( access_item )* access_item ::= <PUBLIC> | <PRIVATE> | <PROTECTED> | <STATIC> | <FINAL> | <SYNCHRONIZED> | <VOLATILE> | <TRANSIENT> | <NATIVE> | <INTERFACE> | <ABSTRACT> super_spec ::= <DSUPER> classname <SEP> implements_list ::= ( implements_spec | <SEP> )* implements_spec ::= <DIMPLEMENTS> classname <SEP> fields ::= ( field_spec )* field_spec ::= <DFIELD> access <Word> <Word> optional_default <SEP> optional_default ::= ( <EQ> item )? item ::= <Int> | <Num> | <Str> methods ::= ( method_spec )* method_spec ::= defmethod statements endmethod defmethod ::= <DMETHOD> access <Word> <SEP> endmethod ::= <DEND> <METHOD> <SEP> statements ::= ( statement )* statement ::= stmnt <SEP> stmnt ::= ( label | directive | instruction )? label ::= <Word> <COLON> directive ::= <DVAR> var_expr | <DLIMIT> limit_expr | <DLINE> line_expr | <DTHROWS> throws_expr | <DCATCH> catch_expr | <DSET> set_expr var_expr ::= <Int> <IS> <Word> <Word> ( <FROM> <Word> <TO> <Word> )? limit_expr ::= <Word> <Int> line_expr ::= <Int> throws_expr ::= classname catch_expr ::= classname <FROM> <Word> <TO> <Word> <USING> <Word> set_expr ::= <Word> <Int> | <Word> <Word> | <Word> <Num> | <Word> <Str> instruction ::= simple_instruction | complex_instruction simple_instruction ::= <Word> <Int> <Int> | <Word> <Word> <Int> | <Word> <Word> <Word> | <Word> <Int> | <Word> <Num> | <Word> <Word> | <Word> <Str> | <Word> complex_instruction ::= <LOOKUPSWITCH> lookup | <TABLESWITCH> table lookup ::= lookup_args lookup_list lookup_default lookup_args ::= <SEP> lookup_list ::= ( lookup_entry )+ lookup_entry ::= <Int> <COLON> <Word> <SEP> lookup_default ::= <DEFAULT_BRANCH> <COLON> <Word> table ::= table_args table_list table_default table_args ::= <Int> <SEP> | <Int> <Int> <SEP> table_list ::= ( table_entry )+ table_entry ::= <Word> <SEP> table_default ::= <DEFAULT_BRANCH> <COLON> <Word>
- Jasmin-Java汇编语言
- Java bytecode assembler : jasmin
- Jasmin
- ASM + JASMIN combination for java class file editing in bytecode level
- Jasmin HelloWorld的实现
- Another Look at Events by Jasmin Blanchette
- 汇编语言
- 汇编语言
- 汇编语言
- 汇编语言
- 汇编语言
- 汇编语言
- 汇编语言
- 汇编语言
- 汇编语言
- 汇编语言
- 汇编语言
- 汇编语言
- OCI学习之 Makefile
- ARM MPlayer移植过程
- WINDOWS常见问题的最佳解决方案
- 催人泪下的十大经典爱情对白
- 命令行修改ip地址网关和DNS
- Jasmin-Java汇编语言
- 有时候,放弃也是一种解脱
- Struts HOW-TO 系列 之 数据库访问
- asp.net 2.0下的petshop出来了
- [翻译]-Windows CE 程序设计 (3rd 版)--5.2 公共控件(三)
- 初识ArcGIS9.0
- 小和大的关系-Donews 6周年感想
- C#学习摘要之(一)
- VxWorks基本概念及常见问题(转贴)