- Loading...
...
Code Block | ||||||
---|---|---|---|---|---|---|
| ||||||
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.
...