Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.

...

Code Block
themeFadeToGrey
languagecpp
titleHelloWorld.jasm
class HelloWorld {
  0xCAFEBABE;
  0; // minor version
  50; // version
  [] { // Constant Pool
    ; // first element is empty
    Method #6 #15; // #1   
    Field #16 #17; // #2   
    String #18; // #3   
    Method #19 #20; // #4   
    class #21; // #5   
    class #22; // #6   
    Utf8 "<init>"; // #7   
    Utf8 "()V"; // #8   
    Utf8 "Code"; // #9   
    Utf8 "LineNumberTable"; // #10   
    Utf8 "main"; // #11   
    Utf8 "([Ljava/lang/String;)V"; // #12   
    Utf8 "SourceFile"; // #13   
    Utf8 "HelloWorld.java"; // #14   
    NameAndType #7 #8; // #15   
    class #23; // #16   
    NameAndType #24 #25; // #17   
    Utf8 "Hello, world!"; // #18   
    class #26; // #19   
    NameAndType #27 #28; // #20   
    Utf8 "HelloWorld"; // #21   
    Utf8 "java/lang/Object"; // #22   
    Utf8 "java/lang/System"; // #23   
    Utf8 "out"; // #24   
    Utf8 "Ljava/io/PrintStream;"; // #25   
    Utf8 "java/io/PrintStream"; // #26   
    Utf8 "println"; // #27   
    Utf8 "(Ljava/lang/String;)V"; // #28   
  } // Constant Pool

  0x0021; // access
  #5;// this_cpx
  #6;// super_cpx

  [] { // Interfaces
  } // Interfaces

  [] { // fields
  } // fields

  [] { // methods
    { // Member
      0x0001; // access
      #7; // name_cpx
      #8; // sig_cpx
      [] { // Attributes
        Attr(#9) { // Code
          1; // max_stack
          1; // max_locals
          Bytes[]{
            0x2AB70001B1;
          };
          [] { // Traps
          } // end Traps
          [] { // Attributes
            Attr(#10) { // LineNumberTable
              [] { // LineNumberTable
                0  1;
              }
            } // end LineNumberTable
          } // Attributes
        } // end Code
      } // Attributes
    } // Member
    ;
    { // Member
      0x0009; // access
      #11; // name_cpx
      #12; // sig_cpx
      [] { // Attributes
        Attr(#9) { // Code
          2; // max_stack
          1; // max_locals
          Bytes[]{
            0xB200021203B60004;
            0xB1;
          };
          [] { // Traps
          } // end Traps
          [] { // Attributes
            Attr(#10) { // LineNumberTable
              [] { // LineNumberTable
                0  3;
                8  4;
              }
            } // end LineNumberTable
          } // Attributes
        } // end Code
      } // Attributes
    } // Member
  } // methods

  [] { // Attributes
    Attr(#13) { // SourceFile
      #14;
    } // end SourceFile
  } // Attributes
} // end class HelloWorld
 

In this listing, you can see how the syntax more directly correlates to the structure of a class file, in the same order and manner which a class file is described in Chapter 4 of the VM specification.   Instructions themselves are not decoded (as they are in the JASM format), and appear as raw byte strings.  Also, notice how references to the constant pool are treated as indexes (instead of being encoded as strings).  As well, the constant pool is layed-out in the beginning of the listing.

...