CodeTools proposal: "AsmTools"

Brian Kurotsuchi brian.kurotsuchi at
Thu Dec 4 21:02:35 UTC 2014

Name: AsmTools

Summary: A set of (Java class file) assembler/disassemblers, in order to facilitate the practice of verifying VM class-loader rejection of
invalid classfiles - for the purpose of OpenJDK development.

Proposed by: Brian Kurotsuchi, Oracle, Java Conformance Tools team


This proposal is to open the Java Assembler Tools (AsmTools) into the
CodeTools project of OpenJDK. The rationale for this is to provide
transparency to the process of testing Java Virtual machines.  The
advantage to promoting standard and methodical negative testing of Java VM class-loading  allows JDK developers to test their own VM and other environmental changes.  Publishing negative tests may also allow external OpenJDK users to contribute new tests for class file rejection that are not currently covered by SQE nor JCK test suites.

AsmTools consists of 2 sets of assembler/disassemblers:

Jasm/JDis - an assembler language that provides a Java-like declaration of member signatures, while providing Java VM specification compliant mnemonics for byte-code instructions. Jasm also provides high-level syntax for constructs often found within classfile attributes.   Jasm encoded tests are useful for sequencing byte codes in a way that Javac compiled code might not normally sequence byte-codes.

JCod/JDec - an assembler language that provides byte-code containers of class-file constructs. JCod encoded tests are useful for testing the well-formedness of class-files, as well as creating collections within a class-file construct that might be size-bounded by a normal Java compiler.   JCod can also be used to 'fuzz' class files in a methodical way that respects class-file constructs.

AsmTools are completely reflexive - Java binary (.class) files may be
disassembled into textual representations, which in turn can be
assembled back to the same binary file.

AsmTools are developed to support the latest class file formats, in
lock-step with JDK development.

Other open source Java assembler tools and binary classfile frameworks exist.  They can be used for the purpose of synthesizing classfiles for VM testing, however:

a.) they typically are designed to enforce the limits imposed by the VM specification of the class file format.  They are not designed to
produce classes that violate those limits.

b.) other assembler tools may not necessarily follow strict Java
mnemonics as defined in the Java VM spec.

c.) other assembler tools may not stay in lock-step with the current
generation of the JDK and VM specifications.

d.) class file libraries are harder to use for simple manipulations of any given class file.  Typically, one has to create a program in that framework to parse and modify a class for a specific change to a given class.

More information about the code-tools-dev mailing list