rizin/test/db/analysis/java
Rot127 bdd913ab5e
Fix definition of alignment
* Fix definition of alignment.

Alignments for code and data is not defind for 0, bubt nonetheless it
was assigned this value everytwhere. This changes the default value to 1.

* Enforce an alignment of at least 1.

* Fix alignment checks (default is now 1).

* Fix alignment check. 1 was assumed to be valid.

* Fix places where an alignment of 0 is considered still a valid value.

* Fix integration test with invalid alignment

* Remove debug printf

* Remove addrmod member.

It was pressumingly used to indicate aligned addresses in print mode.
But it wasn't documented and the usefulness is dubious.
Since it is easy to spot for users to see if addresses are aligned or not anyways.

* Fix tests after cherry-pick

* Fix rz-find test which consumed the '-X' as number value for '-a'.

* Fix case of arch module not defining value alignments.
2025-02-14 01:27:47 +08:00

1697 lines
80 KiB
Text

NAME=java simple switch statement 4 values no breaks
FILE=malloc://128
CMDS=<<EOF
e asm.arch=java
wx 033b043ca700371a08703d1caa00000000000029000000000000000300000020000000230000002900000026840202840203840209033c1b1c823c1a100aa1ffc91bac
pi 29 @ 0
EOF
EXPECT=<<EOF
iconst_0
istore_0
iconst_1
istore_1
goto 0x3b
iload_0
iconst_5
irem
istore_2
iload_2
tableswitch default: 0x35
case 0: goto 0x2c
case 1: goto 0x2f
case 2: goto 0x35
case 3: goto 0x32
iinc 2 2
iinc 2 3
iinc 2 9
iconst_0
istore_1
iload_1
iload_2
ixor
istore_1
iload_0
bipush 10
if_icmplt 0x7
iload_1
ireturn
EOF
RUN
NAME=java simple switch statement 3 values no breaks
FILE=malloc://128
CMDS=<<EOF
e asm.arch=java
wx 033b043ca7002c1a08703d1caa0000000000001e0000000000000001000000180000001b8402fe8402ff033c1b1c823c1a100aa1ffd41bac00000003000a0000
pi 26 @ 0
EOF
EXPECT=<<EOF
iconst_0
istore_0
iconst_1
istore_1
goto 0x30
iload_0
iconst_5
irem
istore_2
iload_2
tableswitch default: 0x2a
case 0: goto 0x24
case 1: goto 0x27
iinc 2 254
iinc 2 255
iconst_0
istore_1
iload_1
iload_2
ixor
istore_1
iload_0
bipush 10
if_icmplt 0x7
iload_1
ireturn
EOF
RUN
NAME=java simple switch statement 4 values
FILE=malloc://128
CMDS=<<EOF
e asm.arch=java
wx 033b033ca7003c1a08703d1caa0000000000003200000000000000030000002000000026000000320000002c840202a70011840203a7000b840209a70005033c1a100aa1ffc41bac00000003000a0000
pi 28 @ 0
EOF
EXPECT=<<EOF
iconst_0
istore_0
iconst_0
istore_1
goto 0x40
iload_0
iconst_5
irem
istore_2
iload_2
tableswitch default: 0x3e
case 0: goto 0x2c
case 1: goto 0x32
case 2: goto 0x3e
case 3: goto 0x38
iinc 2 2
goto 0x40
iinc 2 3
goto 0x40
iinc 2 9
goto 0x40
iconst_0
istore_1
iload_0
bipush 10
if_icmplt 0x7
iload_1
ireturn
EOF
RUN
NAME=java simple switch statement 3 values
FILE=malloc://128
CMDS=<<EOF
e asm.arch=java
wx 033b033ca7003c1a08703d1caa0000000000003200000000000000030000002000000026000000320000002c840202a70011840203a7000b840209a70005033c1a100aa1ffc41bac00000003000a0000
pi 28 @ 0
EOF
EXPECT=<<EOF
iconst_0
istore_0
iconst_0
istore_1
goto 0x40
iload_0
iconst_5
irem
istore_2
iload_2
tableswitch default: 0x3e
case 0: goto 0x2c
case 1: goto 0x32
case 2: goto 0x3e
case 3: goto 0x38
iinc 2 2
goto 0x40
iinc 2 3
goto 0x40
iinc 2 9
goto 0x40
iconst_0
istore_1
iload_0
bipush 10
if_icmplt 0x7
iload_1
ireturn
EOF
RUN
NAME=af java multiple classes loaded via malloc and ib
FILE=malloc://1024
CMDS=<<EOF
e asm.calls=false
e asm.comments=false
e asm.cmt.flgrefs=false
e scr.color=false
e asm.lines.bb=false
e asm.xrefs=false
e asm.flags.middle=0
wx cafebabe00000033001707000201001b7261646172655f746573745f63617365732f6368616c6c656e67650700040100106a6176612f6c616e672f4f626a6563740100063c696e69743e010003282956010004436f64650a000300090c0005000601000f4c696e654e756d6265725461626c650100124c6f63616c5661726961626c655461626c650100047468697301001d4c7261646172655f746573745f63617365732f6368616c6c656e67653b01001573696d706c655f636173655f73746d745f3476616c01000328294901000169010001490100016a0100016b01000d537461636b4d61705461626c6501000a536f7572636546696c6501000e6368616c6c656e67652e6a617661002100010003000000000002000100050006000100070000002f00010001000000052ab70008b100000002000a00000006000100000003000b0000000c000100000005000c000d00000008000e000f00010007000000c10002000300000048033b033ca7003c1a08703d1caa0000000000003200000000000000030000002000000026000000320000002c840202a70011840203a7000b840209a70005033c1a100aa1ffc41bac00000003000a0000002a000a000000050004000600070007000b0008002c00090032000a0038000b003e000c004000060046000f000b0000002000030002004600100011000000040044001200110001000b00350013001100020014000000110006fd00070101fc002401050505fa000100010015000000020016
obR
i
pd 3 @ sym.radare_test_cases.challenge.void__init
o malloc://1024 0xa00~a
s 0xa00
wx cafebabe0000003300180700020100177261646172655f746573745f63617365732f6c6f6f70730700040100106a6176612f6c616e672f4f626a6563740100063c696e69743e010003282956010004436f64650a000300090c0005000601000f4c696e654e756d6265725461626c650100124c6f63616c5661726961626c655461626c65010004746869730100194c7261646172655f746573745f63617365732f6c6f6f70733b01000f73696d706c655f666f725f6c6f6f7001000328294201000169010001490100016a0100016b01000d537461636b4d61705461626c6501001c73696d706c655f666f725f6c6f6f705f6d756c74695f72657475726e01000a536f7572636546696c6501000a6c6f6f70732e6a617661002100010003000000000003000100050006000100070000002f00010001000000052ab70008b100000002000a00000006000100000003000b0000000c000100000005000c000d00000008000e000f000100070000006c0002000300000017033d033b043d10643ca700068400011a1ba1fffb1c91ac00000003000a0000000e000300000006000200080014000b000b000000200003000400130010001100000009000e001200110001000200150013001100020014000000090002fe000c0101010200080015000f0001000700000095000200030000002b033d033b043d10643ca7001a1c1a823d1c1100ffa000061c91ac1c1100ff703d8400011a1ba1ffe71c91ac00000003000a0000002200080000000e00020010000c00110010001300170014001a00150020001000280018000b00000020000300040027001000110000000900220012001100010002002900130011000200140000000a0003fe000c0101010d0800010016000000020017
oba 0xa00
pdf
obR
af
s sym.radare_test_cases.loops.byte_simple_for_loop_multi_return
pdf
EOF
EXPECT=<<EOF
fd 3
file malloc://1024
size 0x400
humansz 1K
mode rwx
format java
iorw true
block 0x100
type JAVA CLASS
arch java
cpu N/A
features N/A
baddr 0x00000000
binsz 0x00000400
bintype class
bits 32
retguard false
class Java SE 1.7
compiler N/A
dbg_file N/A
endian BE
hdr.csum N/A
guid N/A
intrp N/A
laddr 0x00000000
lang java
machine jvm
maxopsz 16
minopsz 1
os any
cc N/A
pcalign 1
rpath N/A
subsys any
stripped false
crypto false
havecode true
va false
sanitiz false
static false
linenum true
lsyms true
canary false
PIE false
RELROCS false
NX false
;-- entry0:
;-- section.class.methods._init_.attr.0.code:
;-- sym.radare_test_cases.challenge.void__init:
;-- method.public.radare_test_cases.challenge.void__init:
0x0000012d aload_0
0x0000012e invokespecial Ljava/lang/Object;.<init>()V
0x00000131 return
;-- entry2:
;-- section.class.methods.simple_for_loop_multi_return.attr.0.code:
;-- sym.radare_test_cases.loops.byte_simple_for_loop_multi_return:
/ method.static.radare_test_cases.loops.byte_simple_for_loop_multi_return();
| 0x000001f1 iconst_0
| 0x000001f2 istore_2
| 0x000001f3 iconst_0
| 0x000001f4 istore_0
| 0x000001f5 iconst_1
| 0x000001f6 istore_2
| 0x000001f7 bipush 100
| 0x000001f9 istore_1
| 0x000001fa goto 0x214
| 0x000001fd iload_2
| 0x000001fe iload_0
| 0x000001ff ixor
| 0x00000200 istore_2
| 0x00000201 iload_2
| 0x00000202 sipush 255
| 0x00000205 if_icmpne 0x20b
| 0x00000208 iload_2
| 0x00000209 i2b
| 0x0000020a ireturn
| 0x0000020b iload_2
| 0x0000020c sipush 255
| 0x0000020f irem
| 0x00000210 istore_2
| 0x00000211 iinc 0 1
| 0x00000214 iload_0
| 0x00000215 iload_1
| 0x00000216 if_icmplt 0x1fd
| 0x00000219 iload_2
| 0x0000021a i2b
\ 0x0000021b ireturn
EOF
RUN
NAME=Output java class source-code-like
FILE=bins/java/jdwpexeccmd.class
CMDS=javas ; icc
EXPECT=<<EOF
import java.lang.Object;
import java.lang.StringBuilder;
import java.lang.Runtime;
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.lang.Process;
import java.lang.String;
import java.lang.Exception;
import JDWPExecCmd;
class public JDWPExecCmd {
public void <init>();
public static String run(String);
}
package defpackage;
public class JDWPExecCmd {
public void JDWPExecCmd();
public static String run(String);
}
EOF
RUN
NAME=Output java class source-code-like from a zip
FILE=zip://bins/java/example.zip::0
CMDS=javas
EXPECT=<<EOF
import java.lang.Object;
import java.lang.String;
import c;
import sun.misc.BASE64Decoder;
import sun.misc.BASE64Encoder;
import a;
import java.lang.NumberFormatException;
import [C;
class public c {
public void <init>();
public static String a(String);
public static String b(String);
static void <clinit>();
public static a Z
private static final z Ljava.lang.String;
}
EOF
RUN
NAME=Output java class structure
FILE=bins/java/jdwpexeccmd.class
CMDS=javac
EXPECT=<<EOF
Version: (51.0) Java SE 1.7
Flags: (0x0021) public super
Class: (#18) LJDWPExecCmd;
Super: (#19) Ljava/lang/Object;
Constant pool: 71
#1 = Methodref #19:#33 // void Object.<init>()
#2 = Class #34 // StringBuilder
#3 = Methodref #2:#33 // void StringBuilder.<init>()
#4 = Methodref #2:#35 // StringBuilder StringBuilder.append(String)
#5 = String #36 // " output:\n"
#6 = Methodref #2:#37 // String StringBuilder.toString()
#7 = Methodref #38:#39 // Runtime Runtime.getRuntime()
#8 = Methodref #38:#40 // Process Runtime.exec(String)
#9 = Class #41 // java.io.BufferedReader
#10 = Class #42 // java.io.InputStreamReader
#11 = Methodref #43:#44 // java.io.InputStream Process.getInputStream()
#12 = Methodref #10:#45 // void java.io.InputStreamReader.<init>(java.io.InputStream)
#13 = Methodref #9:#46 // void java.io.BufferedReader.<init>(java.io.Reader)
#14 = Methodref #9:#47 // String java.io.BufferedReader.readLine()
#15 = Methodref #48:#49 // String String.trim()
#16 = String #50 // "\n"
#17 = Class #51 // Exception
#18 = Class #52 // JDWPExecCmd
#19 = Class #53 // Object
#20 = Utf8 <init>
#21 = Utf8 ()V
#22 = Utf8 Code
#23 = Utf8 LineNumberTable
#24 = Utf8 run
#25 = Utf8 (Ljava/lang/String;)Ljava/lang/String;
#26 = Utf8 StackMapTable
#27 = Class #54 // String
#28 = Class #55 // Process
#29 = Class #41 // java.io.BufferedReader
#30 = Class #51 // Exception
#31 = Utf8 SourceFile
#32 = Utf8 JDWPExecCmd.java
#33 = NameAndType #20:#21 // void <init>()
#34 = Utf8 java/lang/StringBuilder
#35 = NameAndType #56:#57 // StringBuilder append(String)
#36 = Utf8 output:\n
#37 = NameAndType #58:#59 // String toString()
#38 = Class #60 // Runtime
#39 = NameAndType #61:#62 // Runtime getRuntime()
#40 = NameAndType #63:#64 // Process exec(String)
#41 = Utf8 java/io/BufferedReader
#42 = Utf8 java/io/InputStreamReader
#43 = Class #55 // Process
#44 = NameAndType #65:#66 // java.io.InputStream getInputStream()
#45 = NameAndType #20:#67 // void <init>(java.io.InputStream)
#46 = NameAndType #20:#68 // void <init>(java.io.Reader)
#47 = NameAndType #69:#59 // String readLine()
#48 = Class #54 // String
#49 = NameAndType #70:#59 // String trim()
#50 = Utf8 \n
#51 = Utf8 java/lang/Exception
#52 = Utf8 JDWPExecCmd
#53 = Utf8 java/lang/Object
#54 = Utf8 java/lang/String
#55 = Utf8 java/lang/Process
#56 = Utf8 append
#57 = Utf8 (Ljava/lang/String;)Ljava/lang/StringBuilder;
#58 = Utf8 toString
#59 = Utf8 ()Ljava/lang/String;
#60 = Utf8 java/lang/Runtime
#61 = Utf8 getRuntime
#62 = Utf8 ()Ljava/lang/Runtime;
#63 = Utf8 exec
#64 = Utf8 (Ljava/lang/String;)Ljava/lang/Process;
#65 = Utf8 getInputStream
#66 = Utf8 ()Ljava/io/InputStream;
#67 = Utf8 (Ljava/io/InputStream;)V
#68 = Utf8 (Ljava/io/Reader;)V
#69 = Utf8 readLine
#70 = Utf8 trim
Interfaces: 0
Methods: 2
public <init>()V;
name: <init>
descriptor: ()V
flags: (0x0001) public
attributes: 1
#0 = #22 size: 29 Code
public static run(Ljava/lang/String;)Ljava/lang/String;;
name: run
descriptor: (Ljava/lang/String;)Ljava/lang/String;
flags: (0x0009) public static
attributes: 1
#0 = #22 size: 233 Code
Fields: 0
Attributes: 1
#0 = #31 size: 2 SourceFile
EOF
RUN
NAME=Output java class structure (json)
FILE=bins/java/jdwpexeccmd.class
CMDS=javacj
EXPECT=<<EOF
{"version":{"minor":0,"major":51,"version":"Java SE 1.7"},"constant_pool_count":71,"constant_pool":[{"index":1,"tag_n":10,"tag_s":"Methodref","value":"#19:#33","resolved":"Ljava/lang/Object;.<init>()V"},{"index":2,"tag_n":7,"tag_s":"Class","value":"#34","resolved":"Ljava/lang/StringBuilder;"},{"index":3,"tag_n":10,"tag_s":"Methodref","value":"#2:#33","resolved":"Ljava/lang/StringBuilder;.<init>()V"},{"index":4,"tag_n":10,"tag_s":"Methodref","value":"#2:#35","resolved":"Ljava/lang/StringBuilder;.append(Ljava/lang/String;)Ljava/lang/StringBuilder;"},{"index":5,"tag_n":8,"tag_s":"String","value":"#36","resolved":"\" output:\\n\""},{"index":6,"tag_n":10,"tag_s":"Methodref","value":"#2:#37","resolved":"Ljava/lang/StringBuilder;.toString()Ljava/lang/String;"},{"index":7,"tag_n":10,"tag_s":"Methodref","value":"#38:#39","resolved":"Ljava/lang/Runtime;.getRuntime()Ljava/lang/Runtime;"},{"index":8,"tag_n":10,"tag_s":"Methodref","value":"#38:#40","resolved":"Ljava/lang/Runtime;.exec(Ljava/lang/String;)Ljava/lang/Process;"},{"index":9,"tag_n":7,"tag_s":"Class","value":"#41","resolved":"Ljava/io/BufferedReader;"},{"index":10,"tag_n":7,"tag_s":"Class","value":"#42","resolved":"Ljava/io/InputStreamReader;"},{"index":11,"tag_n":10,"tag_s":"Methodref","value":"#43:#44","resolved":"Ljava/lang/Process;.getInputStream()Ljava/io/InputStream;"},{"index":12,"tag_n":10,"tag_s":"Methodref","value":"#10:#45","resolved":"Ljava/io/InputStreamReader;.<init>(Ljava/io/InputStream;)V"},{"index":13,"tag_n":10,"tag_s":"Methodref","value":"#9:#46","resolved":"Ljava/io/BufferedReader;.<init>(Ljava/io/Reader;)V"},{"index":14,"tag_n":10,"tag_s":"Methodref","value":"#9:#47","resolved":"Ljava/io/BufferedReader;.readLine()Ljava/lang/String;"},{"index":15,"tag_n":10,"tag_s":"Methodref","value":"#48:#49","resolved":"Ljava/lang/String;.trim()Ljava/lang/String;"},{"index":16,"tag_n":8,"tag_s":"String","value":"#50","resolved":"\"\\n\""},{"index":17,"tag_n":7,"tag_s":"Class","value":"#51","resolved":"Ljava/lang/Exception;"},{"index":18,"tag_n":7,"tag_s":"Class","value":"#52","resolved":"LJDWPExecCmd;"},{"index":19,"tag_n":7,"tag_s":"Class","value":"#53","resolved":"Ljava/lang/Object;"},{"index":20,"tag_n":1,"tag_s":"Utf8","value":"<init>"},{"index":21,"tag_n":1,"tag_s":"Utf8","value":"()V"},{"index":22,"tag_n":1,"tag_s":"Utf8","value":"Code"},{"index":23,"tag_n":1,"tag_s":"Utf8","value":"LineNumberTable"},{"index":24,"tag_n":1,"tag_s":"Utf8","value":"run"},{"index":25,"tag_n":1,"tag_s":"Utf8","value":"(Ljava/lang/String;)Ljava/lang/String;"},{"index":26,"tag_n":1,"tag_s":"Utf8","value":"StackMapTable"},{"index":27,"tag_n":7,"tag_s":"Class","value":"#54","resolved":"Ljava/lang/String;"},{"index":28,"tag_n":7,"tag_s":"Class","value":"#55","resolved":"Ljava/lang/Process;"},{"index":29,"tag_n":7,"tag_s":"Class","value":"#41","resolved":"Ljava/io/BufferedReader;"},{"index":30,"tag_n":7,"tag_s":"Class","value":"#51","resolved":"Ljava/lang/Exception;"},{"index":31,"tag_n":1,"tag_s":"Utf8","value":"SourceFile"},{"index":32,"tag_n":1,"tag_s":"Utf8","value":"JDWPExecCmd.java"},{"index":33,"tag_n":12,"tag_s":"NameAndType","value":"#20:#21","resolved":"<init>()V"},{"index":34,"tag_n":1,"tag_s":"Utf8","value":"java/lang/StringBuilder"},{"index":35,"tag_n":12,"tag_s":"NameAndType","value":"#56:#57","resolved":"append(Ljava/lang/String;)Ljava/lang/StringBuilder;"},{"index":36,"tag_n":1,"tag_s":"Utf8","value":" output:\\n"},{"index":37,"tag_n":12,"tag_s":"NameAndType","value":"#58:#59","resolved":"toString()Ljava/lang/String;"},{"index":38,"tag_n":7,"tag_s":"Class","value":"#60","resolved":"Ljava/lang/Runtime;"},{"index":39,"tag_n":12,"tag_s":"NameAndType","value":"#61:#62","resolved":"getRuntime()Ljava/lang/Runtime;"},{"index":40,"tag_n":12,"tag_s":"NameAndType","value":"#63:#64","resolved":"exec(Ljava/lang/String;)Ljava/lang/Process;"},{"index":41,"tag_n":1,"tag_s":"Utf8","value":"java/io/BufferedReader"},{"index":42,"tag_n":1,"tag_s":"Utf8","value":"java/io/InputStreamReader"},{"index":43,"tag_n":7,"tag_s":"Class","value":"#55","resolved":"Ljava/lang/Process;"},{"index":44,"tag_n":12,"tag_s":"NameAndType","value":"#65:#66","resolved":"getInputStream()Ljava/io/InputStream;"},{"index":45,"tag_n":12,"tag_s":"NameAndType","value":"#20:#67","resolved":"<init>(Ljava/io/InputStream;)V"},{"index":46,"tag_n":12,"tag_s":"NameAndType","value":"#20:#68","resolved":"<init>(Ljava/io/Reader;)V"},{"index":47,"tag_n":12,"tag_s":"NameAndType","value":"#69:#59","resolved":"readLine()Ljava/lang/String;"},{"index":48,"tag_n":7,"tag_s":"Class","value":"#54","resolved":"Ljava/lang/String;"},{"index":49,"tag_n":12,"tag_s":"NameAndType","value":"#70:#59","resolved":"trim()Ljava/lang/String;"},{"index":50,"tag_n":1,"tag_s":"Utf8","value":"\\n"},{"index":51,"tag_n":1,"tag_s":"Utf8","value":"java/lang/Exception"},{"index":52,"tag_n":1,"tag_s":"Utf8","value":"JDWPExecCmd"},{"index":53,"tag_n":1,"tag_s":"Utf8","value":"java/lang/Object"},{"index":54,"tag_n":1,"tag_s":"Utf8","value":"java/lang/String"},{"index":55,"tag_n":1,"tag_s":"Utf8","value":"java/lang/Process"},{"index":56,"tag_n":1,"tag_s":"Utf8","value":"append"},{"index":57,"tag_n":1,"tag_s":"Utf8","value":"(Ljava/lang/String;)Ljava/lang/StringBuilder;"},{"index":58,"tag_n":1,"tag_s":"Utf8","value":"toString"},{"index":59,"tag_n":1,"tag_s":"Utf8","value":"()Ljava/lang/String;"},{"index":60,"tag_n":1,"tag_s":"Utf8","value":"java/lang/Runtime"},{"index":61,"tag_n":1,"tag_s":"Utf8","value":"getRuntime"},{"index":62,"tag_n":1,"tag_s":"Utf8","value":"()Ljava/lang/Runtime;"},{"index":63,"tag_n":1,"tag_s":"Utf8","value":"exec"},{"index":64,"tag_n":1,"tag_s":"Utf8","value":"(Ljava/lang/String;)Ljava/lang/Process;"},{"index":65,"tag_n":1,"tag_s":"Utf8","value":"getInputStream"},{"index":66,"tag_n":1,"tag_s":"Utf8","value":"()Ljava/io/InputStream;"},{"index":67,"tag_n":1,"tag_s":"Utf8","value":"(Ljava/io/InputStream;)V"},{"index":68,"tag_n":1,"tag_s":"Utf8","value":"(Ljava/io/Reader;)V"},{"index":69,"tag_n":1,"tag_s":"Utf8","value":"readLine"},{"index":70,"tag_n":1,"tag_s":"Utf8","value":"trim"}],"access_flags_n":33,"access_flags_s":"public super","class_n":18,"class_s":"LJDWPExecCmd;","super_n":19,"super_s":"Ljava/lang/Object;","interfaces_count":0,"interfaces":[],"methods_count":2,"methods":[{"offset":803,"access_flags_n":1,"access_flags_s":"public","name_n":20,"name_s":"<init>","descriptor_n":21,"descriptor_s":"()V","attributes_count":1,"attributes":[{"offset":811,"size":29,"name_n":22,"name_s":"Code"}]},{"offset":846,"access_flags_n":9,"access_flags_s":"public static","name_n":24,"name_s":"run","descriptor_n":25,"descriptor_s":"(Ljava/lang/String;)Ljava/lang/String;","attributes_count":1,"attributes":[{"offset":854,"size":233,"name_n":22,"name_s":"Code"}]}],"fields_count":0,"fields":[],"attributes_count":1,"attributes":[{"offset":1095,"size":2,"name_n":31,"name_s":"SourceFile"}]}
EOF
RUN
NAME=Output OAK class structure
FILE=bins/java/invisible.class
CMDS=javac
EXPECT=<<EOF
Version: (45.2) Java SE 1.0.2
Flags: (0x0001) public
Class: (#2) LTest;
Super: (#3) Ljava/lang/Object;
Constant pool: 22
#1 = String #21 // "See if you can decompile/disassemble me!"
#2 = Class #20 // Test
#3 = Class #19 // Object
#4 = Utf8 main
#5 = Utf8 ([Ljava/lang/String;)V
#6 = Utf8 Code
#7 = Fieldref #14:#15 // System.out:java.io.PrintStream
#8 = Methodref #9:#10 // void java.io.PrintStream.println(String)
#9 = Class #13 // java.io.PrintStream
#10 = NameAndType #11:#12 // void println(String)
#11 = Utf8 println
#12 = Utf8 (Ljava/lang/String;)V
#13 = Utf8 java/io/PrintStream
#14 = Class #18 // System
#15 = NameAndType #16:#17 // out:java.io.PrintStream
#16 = Utf8 out
#17 = Utf8 Ljava/io/PrintStream;
#18 = Utf8 java/lang/System
#19 = Utf8 java/lang/Object
#20 = Utf8 Test
#21 = Utf8 See if you can decompile/disassemble me!
Interfaces: 0
Methods: 1
public static main([Ljava/lang/String;)V;
name: main
descriptor: ([Ljava/lang/String;)V
flags: (0x0009) public static
attributes: 1
#0 = #6 size: 17 Code
Fields: 0
Attributes: 0
EOF
RUN
NAME=Output OAK class structure (json)
FILE=bins/java/invisible.class
CMDS=javacj
EXPECT=<<EOF
{"version":{"minor":2,"major":45,"version":"Java SE 1.0.2"},"constant_pool_count":22,"constant_pool":[{"index":1,"tag_n":8,"tag_s":"String","value":"#21","resolved":"\"See if you can decompile/disassemble me!\""},{"index":2,"tag_n":7,"tag_s":"Class","value":"#20","resolved":"LTest;"},{"index":3,"tag_n":7,"tag_s":"Class","value":"#19","resolved":"Ljava/lang/Object;"},{"index":4,"tag_n":1,"tag_s":"Utf8","value":"main"},{"index":5,"tag_n":1,"tag_s":"Utf8","value":"([Ljava/lang/String;)V"},{"index":6,"tag_n":1,"tag_s":"Utf8","value":"Code"},{"index":7,"tag_n":9,"tag_s":"Fieldref","value":"#14:#15","resolved":"Ljava/lang/System;.out.Ljava/io/PrintStream;"},{"index":8,"tag_n":10,"tag_s":"Methodref","value":"#9:#10","resolved":"Ljava/io/PrintStream;.println(Ljava/lang/String;)V"},{"index":9,"tag_n":7,"tag_s":"Class","value":"#13","resolved":"Ljava/io/PrintStream;"},{"index":10,"tag_n":12,"tag_s":"NameAndType","value":"#11:#12","resolved":"println(Ljava/lang/String;)V"},{"index":11,"tag_n":1,"tag_s":"Utf8","value":"println"},{"index":12,"tag_n":1,"tag_s":"Utf8","value":"(Ljava/lang/String;)V"},{"index":13,"tag_n":1,"tag_s":"Utf8","value":"java/io/PrintStream"},{"index":14,"tag_n":7,"tag_s":"Class","value":"#18","resolved":"Ljava/lang/System;"},{"index":15,"tag_n":12,"tag_s":"NameAndType","value":"#16:#17","resolved":"out.Ljava/io/PrintStream;"},{"index":16,"tag_n":1,"tag_s":"Utf8","value":"out"},{"index":17,"tag_n":1,"tag_s":"Utf8","value":"Ljava/io/PrintStream;"},{"index":18,"tag_n":1,"tag_s":"Utf8","value":"java/lang/System"},{"index":19,"tag_n":1,"tag_s":"Utf8","value":"java/lang/Object"},{"index":20,"tag_n":1,"tag_s":"Utf8","value":"Test"},{"index":21,"tag_n":1,"tag_s":"Utf8","value":"See if you can decompile/disassemble me!"}],"access_flags_n":1,"access_flags_s":"public","class_n":2,"class_s":"LTest;","super_n":3,"super_s":"Ljava/lang/Object;","interfaces_count":0,"interfaces":[],"methods_count":1,"methods":[{"offset":270,"access_flags_n":9,"access_flags_s":"public static","name_n":4,"name_s":"main","descriptor_n":5,"descriptor_s":"([Ljava/lang/String;)V","attributes_count":1,"attributes":[{"offset":278,"size":17,"name_n":6,"name_s":"Code"}]}],"fields_count":0,"fields":[],"attributes_count":0,"attributes":[]}
EOF
RUN
NAME=Output OAK main code
FILE=bins/java/invisible.class
CMDS=af ; pdf
EXPECT=<<EOF
;-- main:
;-- entry0:
;-- section.class.methods.main.attr.0.code:
;-- sym.Test.void_main_String:
/ method.public.static.Test.void_main_String();
| 0x00000120 getstatic Ljava/lang/System;.out.Ljava/io/PrintStream; ; [03] -r-x section size 17 named class.methods.main.attr.0.code
| 0x00000123 ldc "See if you can decompile/disassemble me!"
| 0x00000125 invokevirtual Ljava/io/PrintStream;.println(Ljava/lang/String;)V
\ 0x00000128 return
EOF
RUN
NAME=Output Java 1.7 class structure
FILE=bins/java/Main.java.1.7.class
CMDS=javac
EXPECT=<<EOF
Version: (51.0) Java SE 1.7
Flags: (0x0021) public super
Class: (#65) LMain;
Super: (#2) Ljava/lang/Object;
Constant pool: 78
#1 = Methodref #2:#3 // void Object.<init>()
#2 = Class #4 // Object
#3 = NameAndType #5:#6 // void <init>()
#4 = Utf8 java/lang/Object
#5 = Utf8 <init>
#6 = Utf8 ()V
#7 = Fieldref #8:#9 // System.out:java.io.PrintStream
#8 = Class #10 // System
#9 = NameAndType #11:#12 // out:java.io.PrintStream
#10 = Utf8 java/lang/System
#11 = Utf8 out
#12 = Utf8 Ljava/io/PrintStream;
#13 = String #14 // "Hello World"
#14 = Utf8 Hello World
#15 = Methodref #16:#17 // void java.io.PrintStream.println(String)
#16 = Class #18 // java.io.PrintStream
#17 = NameAndType #19:#20 // void println(String)
#18 = Utf8 java/io/PrintStream
#19 = Utf8 println
#20 = Utf8 (Ljava/lang/String;)V
#21 = String #22 // "/etc/services"
#22 = Utf8 /etc/services
#23 = Class #24 // java.io.BufferedReader
#24 = Utf8 java/io/BufferedReader
#25 = Class #26 // java.io.FileReader
#26 = Utf8 java/io/FileReader
#27 = Methodref #25:#28 // void java.io.FileReader.<init>(String)
#28 = NameAndType #5:#20 // void <init>(String)
#29 = Methodref #23:#30 // void java.io.BufferedReader.<init>(java.io.Reader)
#30 = NameAndType #5:#31 // void <init>(java.io.Reader)
#31 = Utf8 (Ljava/io/Reader;)V
#32 = Methodref #23:#33 // String java.io.BufferedReader.readLine()
#33 = NameAndType #34:#35 // String readLine()
#34 = Utf8 readLine
#35 = Utf8 ()Ljava/lang/String;
#36 = Class #37 // StringBuilder
#37 = Utf8 java/lang/StringBuilder
#38 = Methodref #36:#3 // void StringBuilder.<init>()
#39 = String #40 // "Line: "
#40 = Utf8 Line:
#41 = Methodref #36:#42 // StringBuilder StringBuilder.append(String)
#42 = NameAndType #43:#44 // StringBuilder append(String)
#43 = Utf8 append
#44 = Utf8 (Ljava/lang/String;)Ljava/lang/StringBuilder;
#45 = Methodref #36:#46 // String StringBuilder.toString()
#46 = NameAndType #47:#35 // String toString()
#47 = Utf8 toString
#48 = Methodref #23:#49 // void java.io.BufferedReader.close()
#49 = NameAndType #50:#6 // void close()
#50 = Utf8 close
#51 = Class #52 // Exception
#52 = Utf8 java/lang/Exception
#53 = Fieldref #8:#54 // System.err:java.io.PrintStream
#54 = NameAndType #55:#12 // err:java.io.PrintStream
#55 = Utf8 err
#56 = String #57 // "Exception occurred trying to read '%s'."
#57 = Utf8 Exception occurred trying to read '%s'.
#58 = Methodref #16:#59 // java.io.PrintStream java.io.PrintStream.format(String, Object[])
#59 = NameAndType #60:#61 // java.io.PrintStream format(String, Object[])
#60 = Utf8 format
#61 = Utf8 (Ljava/lang/String;[Ljava/lang/Object;)Ljava/io/PrintStream;
#62 = Methodref #51:#63 // void Exception.printStackTrace()
#63 = NameAndType #64:#6 // void printStackTrace()
#64 = Utf8 printStackTrace
#65 = Class #66 // Main
#66 = Utf8 Main
#67 = Utf8 Code
#68 = Utf8 LineNumberTable
#69 = Utf8 main
#70 = Utf8 ([Ljava/lang/String;)V
#71 = Utf8 StackMapTable
#72 = Class #73 // String
#73 = Utf8 java/lang/String
#74 = Class #75 // String[]
#75 = Utf8 [Ljava/lang/String;
#76 = Utf8 SourceFile
#77 = Utf8 Main.java
Interfaces: 0
Methods: 2
public <init>()V;
name: <init>
descriptor: ()V
flags: (0x0001) public
attributes: 1
#0 = #67 size: 29 Code
public static main([Ljava/lang/String;)V;
name: main
descriptor: ([Ljava/lang/String;)V
flags: (0x0009) public static
attributes: 1
#0 = #67 size: 206 Code
Fields: 0
Attributes: 1
#0 = #76 size: 2 SourceFile
EOF
RUN
NAME=Output Java 1.8 class structure
FILE=bins/java/Main.java.1.8.class
CMDS=javac
EXPECT=<<EOF
Version: (52.0) Java SE 1.8
Flags: (0x0021) public super
Class: (#65) LMain;
Super: (#2) Ljava/lang/Object;
Constant pool: 78
#1 = Methodref #2:#3 // void Object.<init>()
#2 = Class #4 // Object
#3 = NameAndType #5:#6 // void <init>()
#4 = Utf8 java/lang/Object
#5 = Utf8 <init>
#6 = Utf8 ()V
#7 = Fieldref #8:#9 // System.out:java.io.PrintStream
#8 = Class #10 // System
#9 = NameAndType #11:#12 // out:java.io.PrintStream
#10 = Utf8 java/lang/System
#11 = Utf8 out
#12 = Utf8 Ljava/io/PrintStream;
#13 = String #14 // "Hello World"
#14 = Utf8 Hello World
#15 = Methodref #16:#17 // void java.io.PrintStream.println(String)
#16 = Class #18 // java.io.PrintStream
#17 = NameAndType #19:#20 // void println(String)
#18 = Utf8 java/io/PrintStream
#19 = Utf8 println
#20 = Utf8 (Ljava/lang/String;)V
#21 = String #22 // "/etc/services"
#22 = Utf8 /etc/services
#23 = Class #24 // java.io.BufferedReader
#24 = Utf8 java/io/BufferedReader
#25 = Class #26 // java.io.FileReader
#26 = Utf8 java/io/FileReader
#27 = Methodref #25:#28 // void java.io.FileReader.<init>(String)
#28 = NameAndType #5:#20 // void <init>(String)
#29 = Methodref #23:#30 // void java.io.BufferedReader.<init>(java.io.Reader)
#30 = NameAndType #5:#31 // void <init>(java.io.Reader)
#31 = Utf8 (Ljava/io/Reader;)V
#32 = Methodref #23:#33 // String java.io.BufferedReader.readLine()
#33 = NameAndType #34:#35 // String readLine()
#34 = Utf8 readLine
#35 = Utf8 ()Ljava/lang/String;
#36 = Class #37 // StringBuilder
#37 = Utf8 java/lang/StringBuilder
#38 = Methodref #36:#3 // void StringBuilder.<init>()
#39 = String #40 // "Line: "
#40 = Utf8 Line:
#41 = Methodref #36:#42 // StringBuilder StringBuilder.append(String)
#42 = NameAndType #43:#44 // StringBuilder append(String)
#43 = Utf8 append
#44 = Utf8 (Ljava/lang/String;)Ljava/lang/StringBuilder;
#45 = Methodref #36:#46 // String StringBuilder.toString()
#46 = NameAndType #47:#35 // String toString()
#47 = Utf8 toString
#48 = Methodref #23:#49 // void java.io.BufferedReader.close()
#49 = NameAndType #50:#6 // void close()
#50 = Utf8 close
#51 = Class #52 // Exception
#52 = Utf8 java/lang/Exception
#53 = Fieldref #8:#54 // System.err:java.io.PrintStream
#54 = NameAndType #55:#12 // err:java.io.PrintStream
#55 = Utf8 err
#56 = String #57 // "Exception occurred trying to read '%s'."
#57 = Utf8 Exception occurred trying to read '%s'.
#58 = Methodref #16:#59 // java.io.PrintStream java.io.PrintStream.format(String, Object[])
#59 = NameAndType #60:#61 // java.io.PrintStream format(String, Object[])
#60 = Utf8 format
#61 = Utf8 (Ljava/lang/String;[Ljava/lang/Object;)Ljava/io/PrintStream;
#62 = Methodref #51:#63 // void Exception.printStackTrace()
#63 = NameAndType #64:#6 // void printStackTrace()
#64 = Utf8 printStackTrace
#65 = Class #66 // Main
#66 = Utf8 Main
#67 = Utf8 Code
#68 = Utf8 LineNumberTable
#69 = Utf8 main
#70 = Utf8 ([Ljava/lang/String;)V
#71 = Utf8 StackMapTable
#72 = Class #73 // String
#73 = Utf8 java/lang/String
#74 = Class #75 // String[]
#75 = Utf8 [Ljava/lang/String;
#76 = Utf8 SourceFile
#77 = Utf8 Main.java
Interfaces: 0
Methods: 2
public <init>()V;
name: <init>
descriptor: ()V
flags: (0x0001) public
attributes: 1
#0 = #67 size: 29 Code
public static main([Ljava/lang/String;)V;
name: main
descriptor: ([Ljava/lang/String;)V
flags: (0x0009) public static
attributes: 1
#0 = #67 size: 206 Code
Fields: 0
Attributes: 1
#0 = #76 size: 2 SourceFile
EOF
RUN
NAME=Output Java 1.9 class structure
FILE=bins/java/Main.java.1.9.class
CMDS=javac
EXPECT=<<EOF
Version: (53.0) Java SE 1.9
Flags: (0x0021) public super
Class: (#57) LMain;
Super: (#2) Ljava/lang/Object;
Constant pool: 85
#1 = Methodref #2:#3 // void Object.<init>()
#2 = Class #4 // Object
#3 = NameAndType #5:#6 // void <init>()
#4 = Utf8 java/lang/Object
#5 = Utf8 <init>
#6 = Utf8 ()V
#7 = Fieldref #8:#9 // System.out:java.io.PrintStream
#8 = Class #10 // System
#9 = NameAndType #11:#12 // out:java.io.PrintStream
#10 = Utf8 java/lang/System
#11 = Utf8 out
#12 = Utf8 Ljava/io/PrintStream;
#13 = String #14 // "Hello World"
#14 = Utf8 Hello World
#15 = Methodref #16:#17 // void java.io.PrintStream.println(String)
#16 = Class #18 // java.io.PrintStream
#17 = NameAndType #19:#20 // void println(String)
#18 = Utf8 java/io/PrintStream
#19 = Utf8 println
#20 = Utf8 (Ljava/lang/String;)V
#21 = String #22 // "/etc/services"
#22 = Utf8 /etc/services
#23 = Class #24 // java.io.BufferedReader
#24 = Utf8 java/io/BufferedReader
#25 = Class #26 // java.io.FileReader
#26 = Utf8 java/io/FileReader
#27 = Methodref #25:#28 // void java.io.FileReader.<init>(String)
#28 = NameAndType #5:#20 // void <init>(String)
#29 = Methodref #23:#30 // void java.io.BufferedReader.<init>(java.io.Reader)
#30 = NameAndType #5:#31 // void <init>(java.io.Reader)
#31 = Utf8 (Ljava/io/Reader;)V
#32 = Methodref #23:#33 // String java.io.BufferedReader.readLine()
#33 = NameAndType #34:#35 // String readLine()
#34 = Utf8 readLine
#35 = Utf8 ()Ljava/lang/String;
#36 = InvokeDynamic #0:#37 // String makeConcatWithConstants(String)
#37 = NameAndType #38:#39 // String makeConcatWithConstants(String)
#38 = Utf8 makeConcatWithConstants
#39 = Utf8 (Ljava/lang/String;)Ljava/lang/String;
#40 = Methodref #23:#41 // void java.io.BufferedReader.close()
#41 = NameAndType #42:#6 // void close()
#42 = Utf8 close
#43 = Class #44 // Exception
#44 = Utf8 java/lang/Exception
#45 = Fieldref #8:#46 // System.err:java.io.PrintStream
#46 = NameAndType #47:#12 // err:java.io.PrintStream
#47 = Utf8 err
#48 = String #49 // "Exception occurred trying to read '%s'."
#49 = Utf8 Exception occurred trying to read '%s'.
#50 = Methodref #16:#51 // java.io.PrintStream java.io.PrintStream.format(String, Object[])
#51 = NameAndType #52:#53 // java.io.PrintStream format(String, Object[])
#52 = Utf8 format
#53 = Utf8 (Ljava/lang/String;[Ljava/lang/Object;)Ljava/io/PrintStream;
#54 = Methodref #43:#55 // void Exception.printStackTrace()
#55 = NameAndType #56:#6 // void printStackTrace()
#56 = Utf8 printStackTrace
#57 = Class #58 // Main
#58 = Utf8 Main
#59 = Utf8 Code
#60 = Utf8 LineNumberTable
#61 = Utf8 main
#62 = Utf8 ([Ljava/lang/String;)V
#63 = Utf8 StackMapTable
#64 = Class #65 // String
#65 = Utf8 java/lang/String
#66 = Class #67 // String[]
#67 = Utf8 [Ljava/lang/String;
#68 = Utf8 SourceFile
#69 = Utf8 Main.java
#70 = Utf8 BootstrapMethods
#71 = MethodHandle 6:#72
#72 = Methodref #73:#74 // java.lang.invoke.CallSite java.lang.invoke.StringConcatFactory.makeConcatWithConstants(java.lang.invoke.MethodHandles$Lookup, String, java.lang.invoke.MethodType, String, Object[])
#73 = Class #75 // java.lang.invoke.StringConcatFactory
#74 = NameAndType #38:#76 // java.lang.invoke.CallSite makeConcatWithConstants(java.lang.invoke.MethodHandles$Lookup, String, java.lang.invoke.MethodType, String, Object[])
#75 = Utf8 java/lang/invoke/StringConcatFactory
#76 = Utf8 (Ljava/lang/invoke/MethodHandles$Lookup;Ljava/lang/String;Ljava/lang/invoke/MethodType;Ljava/lang/String;[Ljava/lang/Object;)Ljava/lang/invoke/CallSite;
#77 = String #78 // "Line: \u0001"
#78 = Utf8 Line: \u0001
#79 = Utf8 InnerClasses
#80 = Class #81 // java.lang.invoke.MethodHandles$Lookup
#81 = Utf8 java/lang/invoke/MethodHandles$Lookup
#82 = Class #83 // java.lang.invoke.MethodHandles
#83 = Utf8 java/lang/invoke/MethodHandles
#84 = Utf8 Lookup
Interfaces: 0
Methods: 2
public <init>()V;
name: <init>
descriptor: ()V
flags: (0x0001) public
attributes: 1
#0 = #59 size: 29 Code
public static main([Ljava/lang/String;)V;
name: main
descriptor: ([Ljava/lang/String;)V
flags: (0x0009) public static
attributes: 1
#0 = #59 size: 193 Code
Fields: 0
Attributes: 3
#0 = #68 size: 2 SourceFile
#1 = #70 size: 8 BootstrapMethods
#2 = #79 size: 10 InnerClasses
EOF
RUN
NAME=Output Java 10 class structure
FILE=bins/java/Main.java.10.class
CMDS=javac
EXPECT=<<EOF
Version: (54.0) Java SE 10
Flags: (0x0021) public super
Class: (#57) LMain;
Super: (#2) Ljava/lang/Object;
Constant pool: 85
#1 = Methodref #2:#3 // void Object.<init>()
#2 = Class #4 // Object
#3 = NameAndType #5:#6 // void <init>()
#4 = Utf8 java/lang/Object
#5 = Utf8 <init>
#6 = Utf8 ()V
#7 = Fieldref #8:#9 // System.out:java.io.PrintStream
#8 = Class #10 // System
#9 = NameAndType #11:#12 // out:java.io.PrintStream
#10 = Utf8 java/lang/System
#11 = Utf8 out
#12 = Utf8 Ljava/io/PrintStream;
#13 = String #14 // "Hello World"
#14 = Utf8 Hello World
#15 = Methodref #16:#17 // void java.io.PrintStream.println(String)
#16 = Class #18 // java.io.PrintStream
#17 = NameAndType #19:#20 // void println(String)
#18 = Utf8 java/io/PrintStream
#19 = Utf8 println
#20 = Utf8 (Ljava/lang/String;)V
#21 = String #22 // "/etc/services"
#22 = Utf8 /etc/services
#23 = Class #24 // java.io.BufferedReader
#24 = Utf8 java/io/BufferedReader
#25 = Class #26 // java.io.FileReader
#26 = Utf8 java/io/FileReader
#27 = Methodref #25:#28 // void java.io.FileReader.<init>(String)
#28 = NameAndType #5:#20 // void <init>(String)
#29 = Methodref #23:#30 // void java.io.BufferedReader.<init>(java.io.Reader)
#30 = NameAndType #5:#31 // void <init>(java.io.Reader)
#31 = Utf8 (Ljava/io/Reader;)V
#32 = Methodref #23:#33 // String java.io.BufferedReader.readLine()
#33 = NameAndType #34:#35 // String readLine()
#34 = Utf8 readLine
#35 = Utf8 ()Ljava/lang/String;
#36 = InvokeDynamic #0:#37 // String makeConcatWithConstants(String)
#37 = NameAndType #38:#39 // String makeConcatWithConstants(String)
#38 = Utf8 makeConcatWithConstants
#39 = Utf8 (Ljava/lang/String;)Ljava/lang/String;
#40 = Methodref #23:#41 // void java.io.BufferedReader.close()
#41 = NameAndType #42:#6 // void close()
#42 = Utf8 close
#43 = Class #44 // Exception
#44 = Utf8 java/lang/Exception
#45 = Fieldref #8:#46 // System.err:java.io.PrintStream
#46 = NameAndType #47:#12 // err:java.io.PrintStream
#47 = Utf8 err
#48 = String #49 // "Exception occurred trying to read '%s'."
#49 = Utf8 Exception occurred trying to read '%s'.
#50 = Methodref #16:#51 // java.io.PrintStream java.io.PrintStream.format(String, Object[])
#51 = NameAndType #52:#53 // java.io.PrintStream format(String, Object[])
#52 = Utf8 format
#53 = Utf8 (Ljava/lang/String;[Ljava/lang/Object;)Ljava/io/PrintStream;
#54 = Methodref #43:#55 // void Exception.printStackTrace()
#55 = NameAndType #56:#6 // void printStackTrace()
#56 = Utf8 printStackTrace
#57 = Class #58 // Main
#58 = Utf8 Main
#59 = Utf8 Code
#60 = Utf8 LineNumberTable
#61 = Utf8 main
#62 = Utf8 ([Ljava/lang/String;)V
#63 = Utf8 StackMapTable
#64 = Class #65 // String
#65 = Utf8 java/lang/String
#66 = Class #67 // String[]
#67 = Utf8 [Ljava/lang/String;
#68 = Utf8 SourceFile
#69 = Utf8 Main.java
#70 = Utf8 BootstrapMethods
#71 = MethodHandle 6:#72
#72 = Methodref #73:#74 // java.lang.invoke.CallSite java.lang.invoke.StringConcatFactory.makeConcatWithConstants(java.lang.invoke.MethodHandles$Lookup, String, java.lang.invoke.MethodType, String, Object[])
#73 = Class #75 // java.lang.invoke.StringConcatFactory
#74 = NameAndType #38:#76 // java.lang.invoke.CallSite makeConcatWithConstants(java.lang.invoke.MethodHandles$Lookup, String, java.lang.invoke.MethodType, String, Object[])
#75 = Utf8 java/lang/invoke/StringConcatFactory
#76 = Utf8 (Ljava/lang/invoke/MethodHandles$Lookup;Ljava/lang/String;Ljava/lang/invoke/MethodType;Ljava/lang/String;[Ljava/lang/Object;)Ljava/lang/invoke/CallSite;
#77 = String #78 // "Line: \u0001"
#78 = Utf8 Line: \u0001
#79 = Utf8 InnerClasses
#80 = Class #81 // java.lang.invoke.MethodHandles$Lookup
#81 = Utf8 java/lang/invoke/MethodHandles$Lookup
#82 = Class #83 // java.lang.invoke.MethodHandles
#83 = Utf8 java/lang/invoke/MethodHandles
#84 = Utf8 Lookup
Interfaces: 0
Methods: 2
public <init>()V;
name: <init>
descriptor: ()V
flags: (0x0001) public
attributes: 1
#0 = #59 size: 29 Code
public static main([Ljava/lang/String;)V;
name: main
descriptor: ([Ljava/lang/String;)V
flags: (0x0009) public static
attributes: 1
#0 = #59 size: 193 Code
Fields: 0
Attributes: 3
#0 = #68 size: 2 SourceFile
#1 = #70 size: 8 BootstrapMethods
#2 = #79 size: 10 InnerClasses
EOF
RUN
NAME=Output Java 11 class structure
FILE=bins/java/Main.java.11.class
CMDS=javac
EXPECT=<<EOF
Version: (55.0) Java SE 11
Flags: (0x0021) public super
Class: (#57) LMain;
Super: (#2) Ljava/lang/Object;
Constant pool: 85
#1 = Methodref #2:#3 // void Object.<init>()
#2 = Class #4 // Object
#3 = NameAndType #5:#6 // void <init>()
#4 = Utf8 java/lang/Object
#5 = Utf8 <init>
#6 = Utf8 ()V
#7 = Fieldref #8:#9 // System.out:java.io.PrintStream
#8 = Class #10 // System
#9 = NameAndType #11:#12 // out:java.io.PrintStream
#10 = Utf8 java/lang/System
#11 = Utf8 out
#12 = Utf8 Ljava/io/PrintStream;
#13 = String #14 // "Hello World"
#14 = Utf8 Hello World
#15 = Methodref #16:#17 // void java.io.PrintStream.println(String)
#16 = Class #18 // java.io.PrintStream
#17 = NameAndType #19:#20 // void println(String)
#18 = Utf8 java/io/PrintStream
#19 = Utf8 println
#20 = Utf8 (Ljava/lang/String;)V
#21 = String #22 // "/etc/services"
#22 = Utf8 /etc/services
#23 = Class #24 // java.io.BufferedReader
#24 = Utf8 java/io/BufferedReader
#25 = Class #26 // java.io.FileReader
#26 = Utf8 java/io/FileReader
#27 = Methodref #25:#28 // void java.io.FileReader.<init>(String)
#28 = NameAndType #5:#20 // void <init>(String)
#29 = Methodref #23:#30 // void java.io.BufferedReader.<init>(java.io.Reader)
#30 = NameAndType #5:#31 // void <init>(java.io.Reader)
#31 = Utf8 (Ljava/io/Reader;)V
#32 = Methodref #23:#33 // String java.io.BufferedReader.readLine()
#33 = NameAndType #34:#35 // String readLine()
#34 = Utf8 readLine
#35 = Utf8 ()Ljava/lang/String;
#36 = InvokeDynamic #0:#37 // String makeConcatWithConstants(String)
#37 = NameAndType #38:#39 // String makeConcatWithConstants(String)
#38 = Utf8 makeConcatWithConstants
#39 = Utf8 (Ljava/lang/String;)Ljava/lang/String;
#40 = Methodref #23:#41 // void java.io.BufferedReader.close()
#41 = NameAndType #42:#6 // void close()
#42 = Utf8 close
#43 = Class #44 // Exception
#44 = Utf8 java/lang/Exception
#45 = Fieldref #8:#46 // System.err:java.io.PrintStream
#46 = NameAndType #47:#12 // err:java.io.PrintStream
#47 = Utf8 err
#48 = String #49 // "Exception occurred trying to read '%s'."
#49 = Utf8 Exception occurred trying to read '%s'.
#50 = Methodref #16:#51 // java.io.PrintStream java.io.PrintStream.format(String, Object[])
#51 = NameAndType #52:#53 // java.io.PrintStream format(String, Object[])
#52 = Utf8 format
#53 = Utf8 (Ljava/lang/String;[Ljava/lang/Object;)Ljava/io/PrintStream;
#54 = Methodref #43:#55 // void Exception.printStackTrace()
#55 = NameAndType #56:#6 // void printStackTrace()
#56 = Utf8 printStackTrace
#57 = Class #58 // Main
#58 = Utf8 Main
#59 = Utf8 Code
#60 = Utf8 LineNumberTable
#61 = Utf8 main
#62 = Utf8 ([Ljava/lang/String;)V
#63 = Utf8 StackMapTable
#64 = Class #65 // String
#65 = Utf8 java/lang/String
#66 = Class #67 // String[]
#67 = Utf8 [Ljava/lang/String;
#68 = Utf8 SourceFile
#69 = Utf8 Main.java
#70 = Utf8 BootstrapMethods
#71 = MethodHandle 6:#72
#72 = Methodref #73:#74 // java.lang.invoke.CallSite java.lang.invoke.StringConcatFactory.makeConcatWithConstants(java.lang.invoke.MethodHandles$Lookup, String, java.lang.invoke.MethodType, String, Object[])
#73 = Class #75 // java.lang.invoke.StringConcatFactory
#74 = NameAndType #38:#76 // java.lang.invoke.CallSite makeConcatWithConstants(java.lang.invoke.MethodHandles$Lookup, String, java.lang.invoke.MethodType, String, Object[])
#75 = Utf8 java/lang/invoke/StringConcatFactory
#76 = Utf8 (Ljava/lang/invoke/MethodHandles$Lookup;Ljava/lang/String;Ljava/lang/invoke/MethodType;Ljava/lang/String;[Ljava/lang/Object;)Ljava/lang/invoke/CallSite;
#77 = String #78 // "Line: \u0001"
#78 = Utf8 Line: \u0001
#79 = Utf8 InnerClasses
#80 = Class #81 // java.lang.invoke.MethodHandles$Lookup
#81 = Utf8 java/lang/invoke/MethodHandles$Lookup
#82 = Class #83 // java.lang.invoke.MethodHandles
#83 = Utf8 java/lang/invoke/MethodHandles
#84 = Utf8 Lookup
Interfaces: 0
Methods: 2
public <init>()V;
name: <init>
descriptor: ()V
flags: (0x0001) public
attributes: 1
#0 = #59 size: 29 Code
public static main([Ljava/lang/String;)V;
name: main
descriptor: ([Ljava/lang/String;)V
flags: (0x0009) public static
attributes: 1
#0 = #59 size: 193 Code
Fields: 0
Attributes: 3
#0 = #68 size: 2 SourceFile
#1 = #70 size: 8 BootstrapMethods
#2 = #79 size: 10 InnerClasses
EOF
RUN
NAME=Output Java 12 class structure
FILE=bins/java/Main.java.12.class
CMDS=javac
EXPECT=<<EOF
Version: (56.0) Java SE 12
Flags: (0x0021) public super
Class: (#57) LMain;
Super: (#2) Ljava/lang/Object;
Constant pool: 85
#1 = Methodref #2:#3 // void Object.<init>()
#2 = Class #4 // Object
#3 = NameAndType #5:#6 // void <init>()
#4 = Utf8 java/lang/Object
#5 = Utf8 <init>
#6 = Utf8 ()V
#7 = Fieldref #8:#9 // System.out:java.io.PrintStream
#8 = Class #10 // System
#9 = NameAndType #11:#12 // out:java.io.PrintStream
#10 = Utf8 java/lang/System
#11 = Utf8 out
#12 = Utf8 Ljava/io/PrintStream;
#13 = String #14 // "Hello World"
#14 = Utf8 Hello World
#15 = Methodref #16:#17 // void java.io.PrintStream.println(String)
#16 = Class #18 // java.io.PrintStream
#17 = NameAndType #19:#20 // void println(String)
#18 = Utf8 java/io/PrintStream
#19 = Utf8 println
#20 = Utf8 (Ljava/lang/String;)V
#21 = String #22 // "/etc/services"
#22 = Utf8 /etc/services
#23 = Class #24 // java.io.BufferedReader
#24 = Utf8 java/io/BufferedReader
#25 = Class #26 // java.io.FileReader
#26 = Utf8 java/io/FileReader
#27 = Methodref #25:#28 // void java.io.FileReader.<init>(String)
#28 = NameAndType #5:#20 // void <init>(String)
#29 = Methodref #23:#30 // void java.io.BufferedReader.<init>(java.io.Reader)
#30 = NameAndType #5:#31 // void <init>(java.io.Reader)
#31 = Utf8 (Ljava/io/Reader;)V
#32 = Methodref #23:#33 // String java.io.BufferedReader.readLine()
#33 = NameAndType #34:#35 // String readLine()
#34 = Utf8 readLine
#35 = Utf8 ()Ljava/lang/String;
#36 = InvokeDynamic #0:#37 // String makeConcatWithConstants(String)
#37 = NameAndType #38:#39 // String makeConcatWithConstants(String)
#38 = Utf8 makeConcatWithConstants
#39 = Utf8 (Ljava/lang/String;)Ljava/lang/String;
#40 = Methodref #23:#41 // void java.io.BufferedReader.close()
#41 = NameAndType #42:#6 // void close()
#42 = Utf8 close
#43 = Class #44 // Exception
#44 = Utf8 java/lang/Exception
#45 = Fieldref #8:#46 // System.err:java.io.PrintStream
#46 = NameAndType #47:#12 // err:java.io.PrintStream
#47 = Utf8 err
#48 = String #49 // "Exception occurred trying to read '%s'."
#49 = Utf8 Exception occurred trying to read '%s'.
#50 = Methodref #16:#51 // java.io.PrintStream java.io.PrintStream.format(String, Object[])
#51 = NameAndType #52:#53 // java.io.PrintStream format(String, Object[])
#52 = Utf8 format
#53 = Utf8 (Ljava/lang/String;[Ljava/lang/Object;)Ljava/io/PrintStream;
#54 = Methodref #43:#55 // void Exception.printStackTrace()
#55 = NameAndType #56:#6 // void printStackTrace()
#56 = Utf8 printStackTrace
#57 = Class #58 // Main
#58 = Utf8 Main
#59 = Utf8 Code
#60 = Utf8 LineNumberTable
#61 = Utf8 main
#62 = Utf8 ([Ljava/lang/String;)V
#63 = Utf8 StackMapTable
#64 = Class #65 // String
#65 = Utf8 java/lang/String
#66 = Class #67 // String[]
#67 = Utf8 [Ljava/lang/String;
#68 = Utf8 SourceFile
#69 = Utf8 Main.java
#70 = Utf8 BootstrapMethods
#71 = MethodHandle 6:#72
#72 = Methodref #73:#74 // java.lang.invoke.CallSite java.lang.invoke.StringConcatFactory.makeConcatWithConstants(java.lang.invoke.MethodHandles$Lookup, String, java.lang.invoke.MethodType, String, Object[])
#73 = Class #75 // java.lang.invoke.StringConcatFactory
#74 = NameAndType #38:#76 // java.lang.invoke.CallSite makeConcatWithConstants(java.lang.invoke.MethodHandles$Lookup, String, java.lang.invoke.MethodType, String, Object[])
#75 = Utf8 java/lang/invoke/StringConcatFactory
#76 = Utf8 (Ljava/lang/invoke/MethodHandles$Lookup;Ljava/lang/String;Ljava/lang/invoke/MethodType;Ljava/lang/String;[Ljava/lang/Object;)Ljava/lang/invoke/CallSite;
#77 = String #78 // "Line: \u0001"
#78 = Utf8 Line: \u0001
#79 = Utf8 InnerClasses
#80 = Class #81 // java.lang.invoke.MethodHandles$Lookup
#81 = Utf8 java/lang/invoke/MethodHandles$Lookup
#82 = Class #83 // java.lang.invoke.MethodHandles
#83 = Utf8 java/lang/invoke/MethodHandles
#84 = Utf8 Lookup
Interfaces: 0
Methods: 2
public <init>()V;
name: <init>
descriptor: ()V
flags: (0x0001) public
attributes: 1
#0 = #59 size: 29 Code
public static main([Ljava/lang/String;)V;
name: main
descriptor: ([Ljava/lang/String;)V
flags: (0x0009) public static
attributes: 1
#0 = #59 size: 193 Code
Fields: 0
Attributes: 3
#0 = #68 size: 2 SourceFile
#1 = #70 size: 8 BootstrapMethods
#2 = #79 size: 10 InnerClasses
EOF
RUN
NAME=Output Java 13 class structure
FILE=bins/java/Main.java.13.class
CMDS=javac
EXPECT=<<EOF
Version: (57.0) Java SE 13
Flags: (0x0021) public super
Class: (#57) LMain;
Super: (#2) Ljava/lang/Object;
Constant pool: 85
#1 = Methodref #2:#3 // void Object.<init>()
#2 = Class #4 // Object
#3 = NameAndType #5:#6 // void <init>()
#4 = Utf8 java/lang/Object
#5 = Utf8 <init>
#6 = Utf8 ()V
#7 = Fieldref #8:#9 // System.out:java.io.PrintStream
#8 = Class #10 // System
#9 = NameAndType #11:#12 // out:java.io.PrintStream
#10 = Utf8 java/lang/System
#11 = Utf8 out
#12 = Utf8 Ljava/io/PrintStream;
#13 = String #14 // "Hello World"
#14 = Utf8 Hello World
#15 = Methodref #16:#17 // void java.io.PrintStream.println(String)
#16 = Class #18 // java.io.PrintStream
#17 = NameAndType #19:#20 // void println(String)
#18 = Utf8 java/io/PrintStream
#19 = Utf8 println
#20 = Utf8 (Ljava/lang/String;)V
#21 = String #22 // "/etc/services"
#22 = Utf8 /etc/services
#23 = Class #24 // java.io.BufferedReader
#24 = Utf8 java/io/BufferedReader
#25 = Class #26 // java.io.FileReader
#26 = Utf8 java/io/FileReader
#27 = Methodref #25:#28 // void java.io.FileReader.<init>(String)
#28 = NameAndType #5:#20 // void <init>(String)
#29 = Methodref #23:#30 // void java.io.BufferedReader.<init>(java.io.Reader)
#30 = NameAndType #5:#31 // void <init>(java.io.Reader)
#31 = Utf8 (Ljava/io/Reader;)V
#32 = Methodref #23:#33 // String java.io.BufferedReader.readLine()
#33 = NameAndType #34:#35 // String readLine()
#34 = Utf8 readLine
#35 = Utf8 ()Ljava/lang/String;
#36 = InvokeDynamic #0:#37 // String makeConcatWithConstants(String)
#37 = NameAndType #38:#39 // String makeConcatWithConstants(String)
#38 = Utf8 makeConcatWithConstants
#39 = Utf8 (Ljava/lang/String;)Ljava/lang/String;
#40 = Methodref #23:#41 // void java.io.BufferedReader.close()
#41 = NameAndType #42:#6 // void close()
#42 = Utf8 close
#43 = Class #44 // Exception
#44 = Utf8 java/lang/Exception
#45 = Fieldref #8:#46 // System.err:java.io.PrintStream
#46 = NameAndType #47:#12 // err:java.io.PrintStream
#47 = Utf8 err
#48 = String #49 // "Exception occurred trying to read '%s'."
#49 = Utf8 Exception occurred trying to read '%s'.
#50 = Methodref #16:#51 // java.io.PrintStream java.io.PrintStream.format(String, Object[])
#51 = NameAndType #52:#53 // java.io.PrintStream format(String, Object[])
#52 = Utf8 format
#53 = Utf8 (Ljava/lang/String;[Ljava/lang/Object;)Ljava/io/PrintStream;
#54 = Methodref #43:#55 // void Exception.printStackTrace()
#55 = NameAndType #56:#6 // void printStackTrace()
#56 = Utf8 printStackTrace
#57 = Class #58 // Main
#58 = Utf8 Main
#59 = Utf8 Code
#60 = Utf8 LineNumberTable
#61 = Utf8 main
#62 = Utf8 ([Ljava/lang/String;)V
#63 = Utf8 StackMapTable
#64 = Class #65 // String
#65 = Utf8 java/lang/String
#66 = Class #67 // String[]
#67 = Utf8 [Ljava/lang/String;
#68 = Utf8 SourceFile
#69 = Utf8 Main.java
#70 = Utf8 BootstrapMethods
#71 = MethodHandle 6:#72
#72 = Methodref #73:#74 // java.lang.invoke.CallSite java.lang.invoke.StringConcatFactory.makeConcatWithConstants(java.lang.invoke.MethodHandles$Lookup, String, java.lang.invoke.MethodType, String, Object[])
#73 = Class #75 // java.lang.invoke.StringConcatFactory
#74 = NameAndType #38:#76 // java.lang.invoke.CallSite makeConcatWithConstants(java.lang.invoke.MethodHandles$Lookup, String, java.lang.invoke.MethodType, String, Object[])
#75 = Utf8 java/lang/invoke/StringConcatFactory
#76 = Utf8 (Ljava/lang/invoke/MethodHandles$Lookup;Ljava/lang/String;Ljava/lang/invoke/MethodType;Ljava/lang/String;[Ljava/lang/Object;)Ljava/lang/invoke/CallSite;
#77 = String #78 // "Line: \u0001"
#78 = Utf8 Line: \u0001
#79 = Utf8 InnerClasses
#80 = Class #81 // java.lang.invoke.MethodHandles$Lookup
#81 = Utf8 java/lang/invoke/MethodHandles$Lookup
#82 = Class #83 // java.lang.invoke.MethodHandles
#83 = Utf8 java/lang/invoke/MethodHandles
#84 = Utf8 Lookup
Interfaces: 0
Methods: 2
public <init>()V;
name: <init>
descriptor: ()V
flags: (0x0001) public
attributes: 1
#0 = #59 size: 29 Code
public static main([Ljava/lang/String;)V;
name: main
descriptor: ([Ljava/lang/String;)V
flags: (0x0009) public static
attributes: 1
#0 = #59 size: 193 Code
Fields: 0
Attributes: 3
#0 = #68 size: 2 SourceFile
#1 = #70 size: 8 BootstrapMethods
#2 = #79 size: 10 InnerClasses
EOF
RUN
NAME=Output Java 14 class structure
FILE=bins/java/Main.java.14.class
CMDS=javac
EXPECT=<<EOF
Version: (58.0) Java SE 14
Flags: (0x0021) public super
Class: (#57) LMain;
Super: (#2) Ljava/lang/Object;
Constant pool: 85
#1 = Methodref #2:#3 // void Object.<init>()
#2 = Class #4 // Object
#3 = NameAndType #5:#6 // void <init>()
#4 = Utf8 java/lang/Object
#5 = Utf8 <init>
#6 = Utf8 ()V
#7 = Fieldref #8:#9 // System.out:java.io.PrintStream
#8 = Class #10 // System
#9 = NameAndType #11:#12 // out:java.io.PrintStream
#10 = Utf8 java/lang/System
#11 = Utf8 out
#12 = Utf8 Ljava/io/PrintStream;
#13 = String #14 // "Hello World"
#14 = Utf8 Hello World
#15 = Methodref #16:#17 // void java.io.PrintStream.println(String)
#16 = Class #18 // java.io.PrintStream
#17 = NameAndType #19:#20 // void println(String)
#18 = Utf8 java/io/PrintStream
#19 = Utf8 println
#20 = Utf8 (Ljava/lang/String;)V
#21 = String #22 // "/etc/services"
#22 = Utf8 /etc/services
#23 = Class #24 // java.io.BufferedReader
#24 = Utf8 java/io/BufferedReader
#25 = Class #26 // java.io.FileReader
#26 = Utf8 java/io/FileReader
#27 = Methodref #25:#28 // void java.io.FileReader.<init>(String)
#28 = NameAndType #5:#20 // void <init>(String)
#29 = Methodref #23:#30 // void java.io.BufferedReader.<init>(java.io.Reader)
#30 = NameAndType #5:#31 // void <init>(java.io.Reader)
#31 = Utf8 (Ljava/io/Reader;)V
#32 = Methodref #23:#33 // String java.io.BufferedReader.readLine()
#33 = NameAndType #34:#35 // String readLine()
#34 = Utf8 readLine
#35 = Utf8 ()Ljava/lang/String;
#36 = InvokeDynamic #0:#37 // String makeConcatWithConstants(String)
#37 = NameAndType #38:#39 // String makeConcatWithConstants(String)
#38 = Utf8 makeConcatWithConstants
#39 = Utf8 (Ljava/lang/String;)Ljava/lang/String;
#40 = Methodref #23:#41 // void java.io.BufferedReader.close()
#41 = NameAndType #42:#6 // void close()
#42 = Utf8 close
#43 = Class #44 // Exception
#44 = Utf8 java/lang/Exception
#45 = Fieldref #8:#46 // System.err:java.io.PrintStream
#46 = NameAndType #47:#12 // err:java.io.PrintStream
#47 = Utf8 err
#48 = String #49 // "Exception occurred trying to read '%s'."
#49 = Utf8 Exception occurred trying to read '%s'.
#50 = Methodref #16:#51 // java.io.PrintStream java.io.PrintStream.format(String, Object[])
#51 = NameAndType #52:#53 // java.io.PrintStream format(String, Object[])
#52 = Utf8 format
#53 = Utf8 (Ljava/lang/String;[Ljava/lang/Object;)Ljava/io/PrintStream;
#54 = Methodref #43:#55 // void Exception.printStackTrace()
#55 = NameAndType #56:#6 // void printStackTrace()
#56 = Utf8 printStackTrace
#57 = Class #58 // Main
#58 = Utf8 Main
#59 = Utf8 Code
#60 = Utf8 LineNumberTable
#61 = Utf8 main
#62 = Utf8 ([Ljava/lang/String;)V
#63 = Utf8 StackMapTable
#64 = Class #65 // String
#65 = Utf8 java/lang/String
#66 = Class #67 // String[]
#67 = Utf8 [Ljava/lang/String;
#68 = Utf8 SourceFile
#69 = Utf8 Main.java
#70 = Utf8 BootstrapMethods
#71 = MethodHandle 6:#72
#72 = Methodref #73:#74 // java.lang.invoke.CallSite java.lang.invoke.StringConcatFactory.makeConcatWithConstants(java.lang.invoke.MethodHandles$Lookup, String, java.lang.invoke.MethodType, String, Object[])
#73 = Class #75 // java.lang.invoke.StringConcatFactory
#74 = NameAndType #38:#76 // java.lang.invoke.CallSite makeConcatWithConstants(java.lang.invoke.MethodHandles$Lookup, String, java.lang.invoke.MethodType, String, Object[])
#75 = Utf8 java/lang/invoke/StringConcatFactory
#76 = Utf8 (Ljava/lang/invoke/MethodHandles$Lookup;Ljava/lang/String;Ljava/lang/invoke/MethodType;Ljava/lang/String;[Ljava/lang/Object;)Ljava/lang/invoke/CallSite;
#77 = String #78 // "Line: \u0001"
#78 = Utf8 Line: \u0001
#79 = Utf8 InnerClasses
#80 = Class #81 // java.lang.invoke.MethodHandles$Lookup
#81 = Utf8 java/lang/invoke/MethodHandles$Lookup
#82 = Class #83 // java.lang.invoke.MethodHandles
#83 = Utf8 java/lang/invoke/MethodHandles
#84 = Utf8 Lookup
Interfaces: 0
Methods: 2
public <init>()V;
name: <init>
descriptor: ()V
flags: (0x0001) public
attributes: 1
#0 = #59 size: 29 Code
public static main([Ljava/lang/String;)V;
name: main
descriptor: ([Ljava/lang/String;)V
flags: (0x0009) public static
attributes: 1
#0 = #59 size: 193 Code
Fields: 0
Attributes: 3
#0 = #68 size: 2 SourceFile
#1 = #70 size: 8 BootstrapMethods
#2 = #79 size: 10 InnerClasses
EOF
RUN
NAME=Output Java 15 class structure
FILE=bins/java/Main.java.15.class
CMDS=javac
EXPECT=<<EOF
Version: (59.0) Java SE 15
Flags: (0x0021) public super
Class: (#57) LMain;
Super: (#2) Ljava/lang/Object;
Constant pool: 85
#1 = Methodref #2:#3 // void Object.<init>()
#2 = Class #4 // Object
#3 = NameAndType #5:#6 // void <init>()
#4 = Utf8 java/lang/Object
#5 = Utf8 <init>
#6 = Utf8 ()V
#7 = Fieldref #8:#9 // System.out:java.io.PrintStream
#8 = Class #10 // System
#9 = NameAndType #11:#12 // out:java.io.PrintStream
#10 = Utf8 java/lang/System
#11 = Utf8 out
#12 = Utf8 Ljava/io/PrintStream;
#13 = String #14 // "Hello World"
#14 = Utf8 Hello World
#15 = Methodref #16:#17 // void java.io.PrintStream.println(String)
#16 = Class #18 // java.io.PrintStream
#17 = NameAndType #19:#20 // void println(String)
#18 = Utf8 java/io/PrintStream
#19 = Utf8 println
#20 = Utf8 (Ljava/lang/String;)V
#21 = String #22 // "/etc/services"
#22 = Utf8 /etc/services
#23 = Class #24 // java.io.BufferedReader
#24 = Utf8 java/io/BufferedReader
#25 = Class #26 // java.io.FileReader
#26 = Utf8 java/io/FileReader
#27 = Methodref #25:#28 // void java.io.FileReader.<init>(String)
#28 = NameAndType #5:#20 // void <init>(String)
#29 = Methodref #23:#30 // void java.io.BufferedReader.<init>(java.io.Reader)
#30 = NameAndType #5:#31 // void <init>(java.io.Reader)
#31 = Utf8 (Ljava/io/Reader;)V
#32 = Methodref #23:#33 // String java.io.BufferedReader.readLine()
#33 = NameAndType #34:#35 // String readLine()
#34 = Utf8 readLine
#35 = Utf8 ()Ljava/lang/String;
#36 = InvokeDynamic #0:#37 // String makeConcatWithConstants(String)
#37 = NameAndType #38:#39 // String makeConcatWithConstants(String)
#38 = Utf8 makeConcatWithConstants
#39 = Utf8 (Ljava/lang/String;)Ljava/lang/String;
#40 = Methodref #23:#41 // void java.io.BufferedReader.close()
#41 = NameAndType #42:#6 // void close()
#42 = Utf8 close
#43 = Class #44 // Exception
#44 = Utf8 java/lang/Exception
#45 = Fieldref #8:#46 // System.err:java.io.PrintStream
#46 = NameAndType #47:#12 // err:java.io.PrintStream
#47 = Utf8 err
#48 = String #49 // "Exception occurred trying to read '%s'."
#49 = Utf8 Exception occurred trying to read '%s'.
#50 = Methodref #16:#51 // java.io.PrintStream java.io.PrintStream.format(String, Object[])
#51 = NameAndType #52:#53 // java.io.PrintStream format(String, Object[])
#52 = Utf8 format
#53 = Utf8 (Ljava/lang/String;[Ljava/lang/Object;)Ljava/io/PrintStream;
#54 = Methodref #43:#55 // void Exception.printStackTrace()
#55 = NameAndType #56:#6 // void printStackTrace()
#56 = Utf8 printStackTrace
#57 = Class #58 // Main
#58 = Utf8 Main
#59 = Utf8 Code
#60 = Utf8 LineNumberTable
#61 = Utf8 main
#62 = Utf8 ([Ljava/lang/String;)V
#63 = Utf8 StackMapTable
#64 = Class #65 // String
#65 = Utf8 java/lang/String
#66 = Class #67 // String[]
#67 = Utf8 [Ljava/lang/String;
#68 = Utf8 SourceFile
#69 = Utf8 Main.java
#70 = Utf8 BootstrapMethods
#71 = MethodHandle 6:#72
#72 = Methodref #73:#74 // java.lang.invoke.CallSite java.lang.invoke.StringConcatFactory.makeConcatWithConstants(java.lang.invoke.MethodHandles$Lookup, String, java.lang.invoke.MethodType, String, Object[])
#73 = Class #75 // java.lang.invoke.StringConcatFactory
#74 = NameAndType #38:#76 // java.lang.invoke.CallSite makeConcatWithConstants(java.lang.invoke.MethodHandles$Lookup, String, java.lang.invoke.MethodType, String, Object[])
#75 = Utf8 java/lang/invoke/StringConcatFactory
#76 = Utf8 (Ljava/lang/invoke/MethodHandles$Lookup;Ljava/lang/String;Ljava/lang/invoke/MethodType;Ljava/lang/String;[Ljava/lang/Object;)Ljava/lang/invoke/CallSite;
#77 = String #78 // "Line: \u0001"
#78 = Utf8 Line: \u0001
#79 = Utf8 InnerClasses
#80 = Class #81 // java.lang.invoke.MethodHandles$Lookup
#81 = Utf8 java/lang/invoke/MethodHandles$Lookup
#82 = Class #83 // java.lang.invoke.MethodHandles
#83 = Utf8 java/lang/invoke/MethodHandles
#84 = Utf8 Lookup
Interfaces: 0
Methods: 2
public <init>()V;
name: <init>
descriptor: ()V
flags: (0x0001) public
attributes: 1
#0 = #59 size: 29 Code
public static main([Ljava/lang/String;)V;
name: main
descriptor: ([Ljava/lang/String;)V
flags: (0x0009) public static
attributes: 1
#0 = #59 size: 193 Code
Fields: 0
Attributes: 3
#0 = #68 size: 2 SourceFile
#1 = #70 size: 8 BootstrapMethods
#2 = #79 size: 10 InnerClasses
EOF
RUN
NAME=Output Java 1.7 main code
FILE=bins/java/Main.java.1.7.class
CMDS=af ; pdf
EXPECT=<<EOF
;-- entry0:
;-- section.class.methods._init_.attr.0.code:
;-- sym.Main.void__init:
/ method.public.Main.void__init();
| 0x00000383 aload_0 ; [03] -r-x section size 29 named class.methods._init_.attr.0.code
| 0x00000384 invokespecial Ljava/lang/Object;.<init>()V
\ 0x00000387 return
EOF
RUN
NAME=Output Java 1.8 main code
FILE=bins/java/Main.java.1.8.class
CMDS=af ; pdf
EXPECT=<<EOF
;-- entry0:
;-- section.class.methods._init_.attr.0.code:
;-- sym.Main.void__init:
/ method.public.Main.void__init();
| 0x00000383 aload_0 ; [03] -r-x section size 29 named class.methods._init_.attr.0.code
| 0x00000384 invokespecial Ljava/lang/Object;.<init>()V
\ 0x00000387 return
EOF
RUN
NAME=Output Java 1.9 main code
FILE=bins/java/Main.java.1.9.class
CMDS=af ; pdf
EXPECT=<<EOF
;-- entry0:
;-- section.class.methods._init_.attr.0.code:
;-- sym.Main.void__init:
/ method.public.Main.void__init();
| 0x000004a4 aload_0 ; [03] -r-x section size 29 named class.methods._init_.attr.0.code
| 0x000004a5 invokespecial Ljava/lang/Object;.<init>()V
\ 0x000004a8 return
EOF
RUN
NAME=Output Java 10 main code
FILE=bins/java/Main.java.10.class
CMDS=af ; pdf
EXPECT=<<EOF
;-- entry0:
;-- section.class.methods._init_.attr.0.code:
;-- sym.Main.void__init:
/ method.public.Main.void__init();
| 0x000004a4 aload_0 ; [03] -r-x section size 29 named class.methods._init_.attr.0.code
| 0x000004a5 invokespecial Ljava/lang/Object;.<init>()V
\ 0x000004a8 return
EOF
RUN
NAME=Output Java 11 main code
FILE=bins/java/Main.java.11.class
CMDS=af ; pdf
EXPECT=<<EOF
;-- entry0:
;-- section.class.methods._init_.attr.0.code:
;-- sym.Main.void__init:
/ method.public.Main.void__init();
| 0x000004a4 aload_0 ; [03] -r-x section size 29 named class.methods._init_.attr.0.code
| 0x000004a5 invokespecial Ljava/lang/Object;.<init>()V
\ 0x000004a8 return
EOF
RUN
NAME=Output Java 12 main code
FILE=bins/java/Main.java.12.class
CMDS=af ; pdf
EXPECT=<<EOF
;-- entry0:
;-- section.class.methods._init_.attr.0.code:
;-- sym.Main.void__init:
/ method.public.Main.void__init();
| 0x000004a4 aload_0 ; [03] -r-x section size 29 named class.methods._init_.attr.0.code
| 0x000004a5 invokespecial Ljava/lang/Object;.<init>()V
\ 0x000004a8 return
EOF
RUN
NAME=Output Java 13 main code
FILE=bins/java/Main.java.13.class
CMDS=af ; pdf
EXPECT=<<EOF
;-- entry0:
;-- section.class.methods._init_.attr.0.code:
;-- sym.Main.void__init:
/ method.public.Main.void__init();
| 0x000004a4 aload_0 ; [03] -r-x section size 29 named class.methods._init_.attr.0.code
| 0x000004a5 invokespecial Ljava/lang/Object;.<init>()V
\ 0x000004a8 return
EOF
RUN
NAME=Output Java 14 main code
FILE=bins/java/Main.java.14.class
CMDS=af ; pdf
EXPECT=<<EOF
;-- entry0:
;-- section.class.methods._init_.attr.0.code:
;-- sym.Main.void__init:
/ method.public.Main.void__init();
| 0x000004a4 aload_0 ; [03] -r-x section size 29 named class.methods._init_.attr.0.code
| 0x000004a5 invokespecial Ljava/lang/Object;.<init>()V
\ 0x000004a8 return
EOF
RUN
NAME=Output Java 15 main code
FILE=bins/java/Main.java.15.class
CMDS=af ; pdf
EXPECT=<<EOF
;-- entry0:
;-- section.class.methods._init_.attr.0.code:
;-- sym.Main.void__init:
/ method.public.Main.void__init();
| 0x000004a4 aload_0 ; [03] -r-x section size 29 named class.methods._init_.attr.0.code
| 0x000004a5 invokespecial Ljava/lang/Object;.<init>()V
\ 0x000004a8 return
EOF
RUN
NAME=Resolve java constant pool index
FILE=bins/java/Pig.class
CMDS=javar 15
EXPECT=<<EOF
void java.io.PrintStream.println(java.lang.String)
EOF
RUN
NAME=Crash on analysis
FILE=bins/java/fba022731cfdd80bc65a899afefead1e
CMDS=e scr.prompt=false ; aaa
REGEXP_FILTER_OUT=ignoreme
EXPECT=
RUN
NAME=Java Regs
FILE=
CMDS=<<EOF
e asm.arch=java
ar~!garbage
EOF
EXPECT=<<EOF
pc = 0x00000000
EOF
EXPECT_ERR=
RUN