rizin/test/db/analysis/java
Riccardo Schirone 1c78aee3cd
Convert i commands to rzshell (#1238)
* Start to create some RzBinObject specific API

Adding some unit tests

Fix for new relocs storage system

Fix test_bin unit test for oob-write

* Add `iA` command to newshell

Add `ie`/`iee` commands

Add support for `is`/`iE` commands

Add support for `ii` command

Add support for `il` command

Add support for `iM` command

Add support for `ir` command

Add support for `iS`/`iSS` commands

Add support for `iz` command

Add support for `i` command

Add support for `ic` command

Add support for `iC` command

Add support for `ih` and `iHH` commands

Add support for `iI` command

Add support for `iL` command

Fix descriptions of commands already converted

Add support for `idp` commands

Add support for `iD` command

Add support for `im` commands

Add support for `iR` command

Add support for `it` command

Add support for `iV` commands

Add support for `iw` command

Add support for `ix` commands

Add support for `iZ` command

Add support for `ik` command

Add support for `is.` command

Add support for `iS.` command

Reduce arguments in print_arch

Few Doxygen and ownership annotations

Add support for `iS=` command

Add support for `izz` and `izzz` commands

Add support for `ib` command

Add support for `ic*` command

Put section flags as the last field of the table

* Proper language detection.

* Rewritten blang.c

* implemented `icc/icm/icf <class name>`

* ignore blocks when printing langs

Remove num from `iA` output

* Fixed flags on java and added class column

Add support for `ia` commands

Fix `iCj` command

* RzBin: add rz_bin_object_sections_mapping_list API

* Fix rz-bin for new API

Remove unused va var in rz-bin.c

Fix `iA`/`-A` output

* implemented classdump_cpp

* Support namespaces

Use `icc`, `icl` does not exist anymore

Update output of broken tests for `icc`

Add `rz_return_*()` asserts in new `*_print()` functions

* Provide rz_core_bin_print API

* Select which parts to print also based on the mode

* Return bool from all `rz_core_bin_*_print()` API

* Use RzBinFile in new `rz_core_bin_*_print()` API

* Restore `dbg_dmi` test

* Remove oldshell handlers for `i` commands

* Remove `ieq` call in rizin, not needed

* Allow NULL `bf` in `rz_cmd_info_handler()`

* Re-add support for RZ_BIN_PREFIX for symbols/sections/segments/imports/relocs

* Move `ib` command to `obR`

* Show 'N/A' in `i` command when info are not available

* Assert on bf->o, just to be sure

* Make error messages clearer in `idp` commands

Co-authored-by: wargio <wargio@libero.it>
Co-authored-by: Giovanni <561184+wargio@users.noreply.github.com>
2021-09-04 22:37:05 +08:00

1684 lines
No EOL
79 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.Lradare_test_cases_challenge_._init___V
o malloc://1024 0xa00~a
s 0xa00
wx cafebabe0000003300180700020100177261646172655f746573745f63617365732f6c6f6f70730700040100106a6176612f6c616e672f4f626a6563740100063c696e69743e010003282956010004436f64650a000300090c0005000601000f4c696e654e756d6265725461626c650100124c6f63616c5661726961626c655461626c65010004746869730100194c7261646172655f746573745f63617365732f6c6f6f70733b01000f73696d706c655f666f725f6c6f6f7001000328294201000169010001490100016a0100016b01000d537461636b4d61705461626c6501001c73696d706c655f666f725f6c6f6f705f6d756c74695f72657475726e01000a536f7572636546696c6501000a6c6f6f70732e6a617661002100010003000000000003000100050006000100070000002f00010001000000052ab70008b100000002000a00000006000100000003000b0000000c000100000005000c000d00000008000e000f000100070000006c0002000300000017033d033b043d10643ca700068400011a1ba1fffb1c91ac00000003000a0000000e000300000006000200080014000b000b000000200003000400130010001100000009000e001200110001000200150013001100020014000000090002fe000c0101010200080015000f0001000700000095000200030000002b033d033b043d10643ca7001a1c1a823d1c1100ffa000061c91ac1c1100ff703d8400011a1ba1ffe71c91ac00000003000a0000002200080000000e00020010000c00110010001300170014001a00150020001000280018000b00000020000300040027001000110000000900220012001100010002002900130011000200140000000a0003fe000c0101010d0800010016000000020017
oba 0xa00
pdf
obR
af
s sym.Lradare_test_cases_loops_.simple_for_loop_multi_return__B; 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
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 0
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.Lradare_test_cases_challenge_._init___V:
;-- method.public.Lradare_test_cases_challenge_._init___V:
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.Lradare_test_cases_loops_.simple_for_loop_multi_return__B:
/ method.static.Lradare_test_cases_loops_.simple_for_loop_multi_return__B ();
| 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) java/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":"java/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) java/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":"java/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.LTest_.main__Ljava_lang_String__V:
/ method.public.static.LTest_.main__Ljava_lang_String__V ();
| 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) java/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) java/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) java/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 // invoke.CallSite invoke.StringConcatFactory.makeConcatWithConstants(invoke.MethodHandles$Lookup, String, invoke.MethodType, String, Object[])
#73 = Class #75 // invoke.StringConcatFactory
#74 = NameAndType #38:#76 // invoke.CallSite makeConcatWithConstants(invoke.MethodHandles$Lookup, String, 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 // invoke.MethodHandles$Lookup
#81 = Utf8 java/lang/invoke/MethodHandles$Lookup
#82 = Class #83 // 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) java/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 // invoke.CallSite invoke.StringConcatFactory.makeConcatWithConstants(invoke.MethodHandles$Lookup, String, invoke.MethodType, String, Object[])
#73 = Class #75 // invoke.StringConcatFactory
#74 = NameAndType #38:#76 // invoke.CallSite makeConcatWithConstants(invoke.MethodHandles$Lookup, String, 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 // invoke.MethodHandles$Lookup
#81 = Utf8 java/lang/invoke/MethodHandles$Lookup
#82 = Class #83 // 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) java/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 // invoke.CallSite invoke.StringConcatFactory.makeConcatWithConstants(invoke.MethodHandles$Lookup, String, invoke.MethodType, String, Object[])
#73 = Class #75 // invoke.StringConcatFactory
#74 = NameAndType #38:#76 // invoke.CallSite makeConcatWithConstants(invoke.MethodHandles$Lookup, String, 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 // invoke.MethodHandles$Lookup
#81 = Utf8 java/lang/invoke/MethodHandles$Lookup
#82 = Class #83 // 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) java/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 // invoke.CallSite invoke.StringConcatFactory.makeConcatWithConstants(invoke.MethodHandles$Lookup, String, invoke.MethodType, String, Object[])
#73 = Class #75 // invoke.StringConcatFactory
#74 = NameAndType #38:#76 // invoke.CallSite makeConcatWithConstants(invoke.MethodHandles$Lookup, String, 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 // invoke.MethodHandles$Lookup
#81 = Utf8 java/lang/invoke/MethodHandles$Lookup
#82 = Class #83 // 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) java/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 // invoke.CallSite invoke.StringConcatFactory.makeConcatWithConstants(invoke.MethodHandles$Lookup, String, invoke.MethodType, String, Object[])
#73 = Class #75 // invoke.StringConcatFactory
#74 = NameAndType #38:#76 // invoke.CallSite makeConcatWithConstants(invoke.MethodHandles$Lookup, String, 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 // invoke.MethodHandles$Lookup
#81 = Utf8 java/lang/invoke/MethodHandles$Lookup
#82 = Class #83 // 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) java/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 // invoke.CallSite invoke.StringConcatFactory.makeConcatWithConstants(invoke.MethodHandles$Lookup, String, invoke.MethodType, String, Object[])
#73 = Class #75 // invoke.StringConcatFactory
#74 = NameAndType #38:#76 // invoke.CallSite makeConcatWithConstants(invoke.MethodHandles$Lookup, String, 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 // invoke.MethodHandles$Lookup
#81 = Utf8 java/lang/invoke/MethodHandles$Lookup
#82 = Class #83 // 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) java/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 // invoke.CallSite invoke.StringConcatFactory.makeConcatWithConstants(invoke.MethodHandles$Lookup, String, invoke.MethodType, String, Object[])
#73 = Class #75 // invoke.StringConcatFactory
#74 = NameAndType #38:#76 // invoke.CallSite makeConcatWithConstants(invoke.MethodHandles$Lookup, String, 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 // invoke.MethodHandles$Lookup
#81 = Utf8 java/lang/invoke/MethodHandles$Lookup
#82 = Class #83 // 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.LMain_._init___V:
/ method.public.LMain_._init___V ();
| 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.LMain_._init___V:
/ method.public.LMain_._init___V ();
| 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.LMain_._init___V:
/ method.public.LMain_._init___V ();
| 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.LMain_._init___V:
/ method.public.LMain_._init___V ();
| 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.LMain_._init___V:
/ method.public.LMain_._init___V ();
| 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.LMain_._init___V:
/ method.public.LMain_._init___V ();
| 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.LMain_._init___V:
/ method.public.LMain_._init___V ();
| 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.LMain_._init___V:
/ method.public.LMain_._init___V ();
| 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.LMain_._init___V:
/ method.public.LMain_._init___V ();
| 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(String)
EOF
RUN
NAME=Crash on analysis
FILE=bins/java/fba022731cfdd80bc65a899afefead1e
CMDS=e scr.prompt=false ; aaa
REGEXP_FILTER_OUT=ignoreme
EXPECT=<<EOF
EOF
RUN