* Change RzList to RzPVector * Add annotations and doxygen comments for public API * Fix incorrect pointer assignment * Add macro and change return type * Add test for covering rz_analysis_reflines_middle
325 lines
19 KiB
Text
325 lines
19 KiB
Text
NAME=Dalvik HelloWorld afl
|
|
FILE=bins/dex/HelloWorld.dex
|
|
CMDS=aa; afl
|
|
EXPECT=<<EOF
|
|
0x100000238 1 20 method.public.constructor.Hello.void__init
|
|
0x10000025c 1 34 entry0
|
|
0x100000290 1 84 method.public.Hello.void_foo_int
|
|
0x1000002f4 1 20 method.public.constructor.World.void__init
|
|
0x100000318 1 68 method.public.World.void_foo_int
|
|
0x8000000000 1 2 sym.java.io.PrintStream.void_println_String
|
|
0x8000000002 1 2 sym.Integer.void__init__int
|
|
0x8000000004 1 2 sym.Integer.String_toString
|
|
0x8000000006 1 2 sym.Object.void__init
|
|
0x8000000008 1 2 sym.StringBuilder.void__init
|
|
0x800000000a 1 2 sym.StringBuilder.StringBuilder_append_String
|
|
0x800000000c 1 2 sym.StringBuilder.String_toString
|
|
EOF
|
|
RUN
|
|
|
|
NAME=Dalvik HelloWorld string xref
|
|
FILE=bins/dex/HelloWorld.dex
|
|
CMDS=aa; axt @ str.Findus
|
|
EXPECT=<<EOF
|
|
entry0 0x100000260 [DATA] const-string v1, str.Findus
|
|
EOF
|
|
RUN
|
|
|
|
NAME=Dalvik HelloWorld func xref
|
|
FILE=bins/dex/HelloWorld.dex
|
|
CMDS=aa; axt @ sym.Hello.void__init
|
|
EXPECT=<<EOF
|
|
entry0 0x10000026e [CALL] invoke-direct {v0}, LHello;-><init>()V
|
|
EOF
|
|
RUN
|
|
|
|
NAME=Dalvik HelloWorld func xref to super method
|
|
FILE=bins/dex/org.radare.radare2installer.dex
|
|
CMDS=aaa; axt @ sym.android.app.Activity.void_onDestroy~invoke-super
|
|
EXPECT=<<EOF
|
|
method.public.org.radare.radare2installer.ConsoleActivity.void_onDestroy; void onDestroy() 0x100019e50 [CALL] invoke-super {v1}, Landroid/app/Activity;->onDestroy()V
|
|
method.public.org.radare.radare2installer.LaunchActivity.void_onDestroy 0x10001a256 [CALL] invoke-super {v1}, Landroid/app/Activity;->onDestroy()V
|
|
method.public.org.radare.radare2installer.WebActivity.void_onDestroy; void onDestroy() 0x10001e574 [CALL] invoke-super {v2}, Landroid/app/Activity;->onDestroy()V
|
|
EOF
|
|
RUN
|
|
|
|
NAME=Dalvik resolve virtual methods called via invoke-virtual
|
|
FILE=apk://bins/dex/org.radare.radare2installer.apk
|
|
CMDS=aaa ; axt @ sym.com.ice.tar.TarEntry.String_getUserName
|
|
EXPECT=<<EOF
|
|
entry0 0x10000c8ba [CALL] invoke-virtual {v1}, Lcom/ice/tar/TarEntry;->getUserName()Ljava/lang/String;
|
|
entry0 0x10000c9e6 [CALL] invoke-virtual {v1}, Lcom/ice/tar/TarEntry;->getUserName()Ljava/lang/String;
|
|
method.public.com.ice.tar.TarEntry.String_toString 0x10000f04a [CALL] invoke-virtual {v4}, Lcom/ice/tar/TarEntry;->getUserName()Ljava/lang/String;
|
|
EOF
|
|
RUN
|
|
|
|
NAME=Dalvik resolve imports called via invoke-virtual
|
|
FILE=apk://bins/dex/org.radare.radare2installer.apk
|
|
CMDS=aaa ; axt @ sym.java.net.URL.java.io.InputStream_openStream
|
|
EXPECT=<<EOF
|
|
method.public.javax.activation.URLDataSource.java.io.InputStream_getInputStream 0x100021180 [CALL] invoke-virtual {v0}, Ljava/net/URL;->openStream()Ljava/io/InputStream;
|
|
EOF
|
|
RUN
|
|
|
|
NAME=Dalvik regs
|
|
FILE=
|
|
CMDS=<<EOF
|
|
e asm.arch=dalvik
|
|
ar
|
|
EOF
|
|
EXPECT=<<EOF
|
|
v0 = 0x00000000
|
|
v1 = 0x00000000
|
|
v2 = 0x00000000
|
|
v3 = 0x00000000
|
|
v4 = 0x00000000
|
|
v5 = 0x00000000
|
|
v6 = 0x00000000
|
|
v7 = 0x00000000
|
|
v8 = 0x00000000
|
|
v9 = 0x00000000
|
|
v10 = 0x00000000
|
|
v11 = 0x00000000
|
|
v12 = 0x00000000
|
|
v13 = 0x00000000
|
|
v14 = 0x00000000
|
|
v15 = 0x00000000
|
|
v16 = 0x00000000
|
|
v17 = 0x00000000
|
|
v18 = 0x00000000
|
|
v19 = 0x00000000
|
|
v20 = 0x00000000
|
|
v21 = 0x00000000
|
|
v22 = 0x00000000
|
|
v23 = 0x00000000
|
|
v24 = 0x00000000
|
|
v25 = 0x00000000
|
|
v26 = 0x00000000
|
|
v27 = 0x00000000
|
|
v28 = 0x00000000
|
|
v29 = 0x00000000
|
|
v30 = 0x00000000
|
|
v31 = 0x00000000
|
|
v32 = 0x00000000
|
|
v33 = 0x00000000
|
|
v34 = 0x00000000
|
|
ip = 0x00000000
|
|
sp = 0x00000000
|
|
bp = 0x00000000
|
|
EOF
|
|
RUN
|
|
|
|
NAME=Resolve also exception paths found after gotos/returns
|
|
FILE=apk://bins/dex/ade8bef0ac29fa363fc9afd958af0074478aef650adeb0318517b48bd996d5d5.apk
|
|
CMDS=<<EOF
|
|
aaa
|
|
axg @ 0x800000021c
|
|
EOF
|
|
EXPECT=<<EOF
|
|
- 0x800000021c fcn 0x800000021c sym.android.telephony.TelephonyManager.String_getDeviceId
|
|
- 0x100018936 fcn 0x1000186b0 method.public.static.com.network.android.SmsReceiver.void_a_org.xmlpull.v1.XmlSerializer__java.io.StringWriter__android.content.Context
|
|
- 0x1000186b0 fcn 0x1000186b0 method.public.static.com.network.android.SmsReceiver.void_a_org.xmlpull.v1.XmlSerializer__java.io.StringWriter__android.content.Context
|
|
- 0x100025f78 fcn 0x100025f70 fcn.100025f70
|
|
- 0x100025f70 fcn 0x100025f70 fcn.100025f70
|
|
- 0x10002666c fcn 0x10002653c method.public.static.com.network.android.g.a
|
|
- 0x10002653c fcn 0x10002653c method.public.static.com.network.android.g.a
|
|
- 0x100019cac fcn 0x100019c60 method.public.static.com.network.android.a.c.void_a_android.content.Context__int
|
|
- 0x100019c60 fcn 0x100019c60 method.public.static.com.network.android.a.c.void_a_android.content.Context__int
|
|
- 0x100019d1c fcn 0x100019c60 method.public.static.com.network.android.a.c.void_a_android.content.Context__int
|
|
- 0x100019e00 fcn 0x100019c60 method.public.static.com.network.android.a.c.void_a_android.content.Context__int
|
|
- 0x10001c7a0 fcn 0x10001c6f0 method.public.final.com.network.android.a.j.void_run
|
|
- 0x10001ac02 fcn 0x10001abb8 method.public.static.com.network.android.a.c.void_a_android.content.Context__byte____boolean__boolean
|
|
- 0x10001abb8 fcn 0x10001abb8 method.public.static.com.network.android.a.c.void_a_android.content.Context__byte____boolean__boolean
|
|
- 0x10001ab9e fcn 0x10001ab9c method.public.static.com.network.android.a.c.void_a_android.content.Context__byte
|
|
- 0x10001ab9c fcn 0x10001ab9c method.public.static.com.network.android.a.c.void_a_android.content.Context__byte
|
|
- 0x100027fe2 fcn 0x100027fb4 method.public.static.com.network.android.j.boolean_a_android.content.Context__boolean__boolean__short
|
|
- 0x100027fb4 fcn 0x100027fb4 method.public.static.com.network.android.j.boolean_a_android.content.Context__boolean__boolean__short
|
|
- 0x100027e8e fcn 0x100027df0 method.public.static.com.network.android.j.boolean_a_android.content.Context__boolean__boolean
|
|
- 0x100027df0 fcn 0x100027df0 method.public.static.com.network.android.j.boolean_a_android.content.Context__boolean__boolean
|
|
- 0x10001c948 fcn 0x10001c918 method.public.final.com.network.android.a.l.void_run
|
|
- 0x10001c918 fcn 0x10001c918 method.public.final.com.network.android.a.l.void_run
|
|
- 0x10000ed93 ???
|
|
- 0x10001dcd4 fcn 0x10001dcb0 method.public.static.com.network.android.agent.NetworkApp.void_b_android.content.Context
|
|
- 0x10001dcb0 fcn 0x10001dcb0 method.public.static.com.network.android.agent.NetworkApp.void_b_android.content.Context
|
|
- 0x10001dc44 fcn 0x10001daf4 method.static.synthetic.com.network.android.agent.NetworkApp.void_a_com.network.android.agent.NetworkApp
|
|
- 0x10001daf4 fcn 0x10001daf4 method.static.synthetic.com.network.android.agent.NetworkApp.void_a_com.network.android.agent.NetworkApp
|
|
- 0x10001e918 fcn 0x10001e914 method.public.final.com.network.android.agent.c.void_run
|
|
- 0x10001ea30 fcn 0x10001ea2c method.public.final.com.network.android.agent.e.void_run
|
|
- 0x10001dd60 fcn 0x10001dcb0 method.public.static.com.network.android.agent.NetworkApp.void_b_android.content.Context
|
|
- 0x10001ddb0 fcn 0x10001dcb0 method.public.static.com.network.android.agent.NetworkApp.void_b_android.content.Context
|
|
- 0x10001ed72 fcn 0x10001eca0 method.protected.final.com.network.android.android.monitor.AppServicePinger.void_onHandleIntent_android.content.Intent
|
|
- 0x1000285e2 fcn 0x1000285d4 method.public.static.com.network.android.j.boolean_c_android.content.Context
|
|
- 0x1000285d4 fcn 0x1000285d4 method.public.static.com.network.android.j.boolean_c_android.content.Context
|
|
- 0x100028322 fcn 0x1000282fc method.public.static.com.network.android.j.void_b_android.content.Context
|
|
- 0x1000282fc fcn 0x1000282fc method.public.static.com.network.android.j.void_b_android.content.Context
|
|
- 0x100028812 fcn 0x1000287f4 method.public.final.com.network.android.l.void_run
|
|
- 0x100028802 fcn 0x1000287f4 method.public.final.com.network.android.l.void_run
|
|
- 0x100045a44 fcn 0x100045a1c method.public.final.com.network.h.k.void_run
|
|
- 0x10002d7aa fcn 0x10002d714 method.protected.static.com.network.android.monitor.observer.BatteryReceiver.void_a_android.content.Intent__android.content.Context
|
|
- 0x10002d714 fcn 0x10002d714 method.protected.static.com.network.android.monitor.observer.BatteryReceiver.void_a_android.content.Intent__android.content.Context
|
|
- 0x10002d6f8 fcn 0x10002d6c4 method.public.static.com.network.android.monitor.observer.BatteryReceiver.String_a_android.content.Context
|
|
- 0x10002d6c4 fcn 0x10002d6c4 method.public.static.com.network.android.monitor.observer.BatteryReceiver.String_a_android.content.Context
|
|
- 0x1000188ec fcn 0x1000186b0 method.public.static.com.network.android.SmsReceiver.void_a_org.xmlpull.v1.XmlSerializer__java.io.StringWriter__android.content.Context
|
|
- 0x10002fc8c fcn 0x10002fc84 method.public.final.com.network.android.monitor.observer.s.void_run
|
|
- 0x10002811a fcn 0x100028064 method.public.static.com.network.android.j.boolean_a_android.telephony.TelephonyManager__android.content.Context__boolean__android.net.ConnectivityManager
|
|
- 0x100028064 fcn 0x100028064 method.public.static.com.network.android.j.boolean_a_android.telephony.TelephonyManager__android.content.Context__boolean__android.net.ConnectivityManager
|
|
- 0x10001eb52 fcn 0x10001eac4 method.public.final.com.network.android.agent.g.void_run
|
|
- 0x100027f7a fcn 0x100027df0 method.public.static.com.network.android.j.boolean_a_android.content.Context__boolean__boolean
|
|
- 0x10001c09c fcn 0x10001c074 method.private.static.com.network.android.a.c.void_g_android.content.Context
|
|
- 0x10001c074 fcn 0x10001c074 method.private.static.com.network.android.a.c.void_g_android.content.Context
|
|
- 0x100019eae fcn 0x100019e34 method.public.static.com.network.android.a.c.void_a_android.content.Context__int__int__int
|
|
- 0x100019e34 fcn 0x100019e34 method.public.static.com.network.android.a.c.void_a_android.content.Context__int__int__int
|
|
- 0x10001c440 fcn 0x10001c404 method.public.final.com.network.android.a.f.void_run
|
|
- 0x10001c48a fcn 0x10001c404 method.public.final.com.network.android.a.f.void_run
|
|
- 0x10001ea86 fcn 0x10001ea68 method.public.final.com.network.android.agent.f.void_run
|
|
- 0x100019f70 fcn 0x100019ed8 method.public.static.com.network.android.a.c.void_a_android.content.Context__int__String
|
|
- 0x100019ed8 fcn 0x100019ed8 method.public.static.com.network.android.a.c.void_a_android.content.Context__int__String
|
|
- 0x10001c8d0 fcn 0x10001c7f8 method.public.final.com.network.android.a.k.void_onReceive_android.content.Context__android.content.Intent
|
|
- 0x10001a1a2 fcn 0x100019f98 method.public.static.com.network.android.a.c.void_a_android.content.Context__int__String__int
|
|
- 0x100019f98 fcn 0x100019f98 method.public.static.com.network.android.a.c.void_a_android.content.Context__int__String__int
|
|
- 0x100019d90 fcn 0x100019c60 method.public.static.com.network.android.a.c.void_a_android.content.Context__int
|
|
- 0x100019de0 fcn 0x100019c60 method.public.static.com.network.android.a.c.void_a_android.content.Context__int
|
|
- 0x10001b088 fcn 0x10001b084 method.public.static.com.network.android.a.c.void_b_android.content.Context__int
|
|
- 0x10001b084 fcn 0x10001b084 method.public.static.com.network.android.a.c.void_b_android.content.Context__int
|
|
- 0x10001c2e2 fcn 0x10001c1c8 method.public.final.com.network.android.a.e.void_run
|
|
- 0x10001c39e fcn 0x10001c1c8 method.public.final.com.network.android.a.e.void_run
|
|
- 0x10001c41c fcn 0x10001c404 method.public.final.com.network.android.a.f.void_run
|
|
- 0x10001c74c fcn 0x10001c6f0 method.public.final.com.network.android.a.j.void_run
|
|
- 0x10001bf4a fcn 0x10001befc method.public.static.com.network.android.a.c.void_e_android.content.Context
|
|
- 0x10001befc fcn 0x10001befc method.public.static.com.network.android.a.c.void_e_android.content.Context
|
|
- 0x10001c9f4 fcn 0x10001c9f0 method.public.final.com.network.android.a.m.void_run
|
|
- 0x10001c6ba fcn 0x10001c6ac method.public.final.com.network.android.a.i.void_run
|
|
- 0x10001c962 fcn 0x10001c918 method.public.final.com.network.android.a.l.void_run
|
|
- 0x10001c248 fcn 0x10001c1c8 method.public.final.com.network.android.a.e.void_run
|
|
- 0x100028408 fcn 0x1000282fc method.public.static.com.network.android.j.void_b_android.content.Context
|
|
- 0x10001a24e fcn 0x100019f98 method.public.static.com.network.android.a.c.void_a_android.content.Context__int__String__int
|
|
EOF
|
|
RUN
|
|
|
|
NAME=Dalvik disassemble single opcode pdfj
|
|
FILE=malloc://32
|
|
CMDS=<<EOF
|
|
e asm.arch=dalvik
|
|
wx 0e00
|
|
af
|
|
pdfj
|
|
EOF
|
|
EXPECT=<<EOF
|
|
{"name":"fcn.00000000","size":2,"addr":0,"ops":[{"offset":0,"esil":"sp,[8],ip,=,8,sp,+=","refptr":false,"fcn_addr":0,"fcn_last":0,"size":2,"opcode":"return-void","disasm":"return-void","bytes":"0e00","family":"cpu","type":"ret","reloc":false,"type_num":5,"type2_num":0,"flags":["fcn.00000000"]}]}
|
|
EOF
|
|
RUN
|
|
|
|
NAME=Dalvik disassemble single opcode pdf
|
|
FILE=
|
|
CMDS=<<EOF
|
|
e asm.arch=dalvik
|
|
wx 0e00
|
|
af
|
|
pdf
|
|
EOF
|
|
EXPECT=<<EOF
|
|
/ fcn.00000000();
|
|
\ 0x00000000 return-void
|
|
EOF
|
|
RUN
|
|
|
|
NAME=Dalvik packed-switch
|
|
FILE=bins/dex/SwitchOp.dex
|
|
CMDS=<<EOF
|
|
aa
|
|
e asm.comments=false
|
|
pd 23 @ method.static.SwitchOp.void_denseSwitch_int
|
|
EOF
|
|
EXPECT=<<EOF
|
|
;-- sym.SwitchOp.void_denseSwitch_int:
|
|
/ method.static.SwitchOp.void_denseSwitch_int();
|
|
| 0x1000001d0 move v0, v3
|
|
| 0x1000001d2 move v1, v0
|
|
| ,,,,=< 0x1000001d4 packed-switch v1, 0x100000234
|
|
| |||| 0x1000001da sget-object v1, Ljava/lang/System;->out Ljava/io/PrintStream;
|
|
| |||| 0x1000001de const-string v2, str.dense_default
|
|
| |||| 0x1000001e2 invoke-virtual {v1, v2}, Ljava/io/PrintStream;->println(Ljava/lang/String;)V
|
|
\ ...-----> 0x1000001e8 return-void
|
|
:::`----> 0x1000001ea sget-object v1, Ljava/lang/System;->out Ljava/io/PrintStream;
|
|
::: ||| 0x1000001ee const-string v2, str.one
|
|
::: ||| 0x1000001f2 invoke-virtual {v1, v2}, Ljava/io/PrintStream;->println(Ljava/lang/String;)V
|
|
========< 0x1000001f8 goto 0x1000001e8
|
|
::: `---> 0x1000001fa sget-object v1, Ljava/lang/System;->out Ljava/io/PrintStream;
|
|
::: || 0x1000001fe const-string v2, str.two
|
|
::: || 0x100000202 invoke-virtual {v1, v2}, Ljava/io/PrintStream;->println(Ljava/lang/String;)V
|
|
`=======< 0x100000208 goto 0x1000001e8
|
|
:: `--> 0x10000020a sget-object v1, Ljava/lang/System;->out Ljava/io/PrintStream;
|
|
:: | 0x10000020e const-string v2, str.three
|
|
:: | 0x100000212 invoke-virtual {v1, v2}, Ljava/io/PrintStream;->println(Ljava/lang/String;)V
|
|
`======< 0x100000218 goto 0x1000001e8
|
|
: `-> 0x10000021a sget-object v1, Ljava/lang/System;->out Ljava/io/PrintStream;
|
|
: 0x10000021e const-string v2, str.four
|
|
: 0x100000222 invoke-virtual {v1, v2}, Ljava/io/PrintStream;->println(Ljava/lang/String;)V
|
|
`=====< 0x100000228 goto 0x1000001e8
|
|
EOF
|
|
RUN
|
|
|
|
NAME=Dalvik sparse-switch
|
|
FILE=bins/dex/SwitchOp.dex
|
|
CMDS=<<EOF
|
|
aa
|
|
e asm.comments=false
|
|
pd 19 @ method.static.SwitchOp.void_sparseSwitch_int
|
|
EOF
|
|
EXPECT=<<EOF
|
|
;-- sym.SwitchOp.void_sparseSwitch_int:
|
|
/ method.static.SwitchOp.void_sparseSwitch_int();
|
|
| 0x1000002b8 move v0, v3
|
|
| 0x1000002ba move v1, v0
|
|
| ,,,=< 0x1000002bc sparse-switch v1, 0x10000030c
|
|
| ||| 0x1000002c2 sget-object v1, Ljava/lang/System;->out Ljava/io/PrintStream;
|
|
| ||| 0x1000002c6 const-string v2, str.sparse_default
|
|
| ||| 0x1000002ca invoke-virtual {v1, v2}, Ljava/io/PrintStream;->println(Ljava/lang/String;)V
|
|
\ ...----> 0x1000002d0 return-void
|
|
:::`---> 0x1000002d2 sget-object v1, Ljava/lang/System;->out Ljava/io/PrintStream;
|
|
::: || 0x1000002d6 const-string v2, str.ten
|
|
::: || 0x1000002da invoke-virtual {v1, v2}, Ljava/io/PrintStream;->println(Ljava/lang/String;)V
|
|
`======< 0x1000002e0 goto 0x1000002d0
|
|
:: `--> 0x1000002e2 sget-object v1, Ljava/lang/System;->out Ljava/io/PrintStream;
|
|
:: | 0x1000002e6 const-string v2, str.thousand
|
|
:: | 0x1000002ea invoke-virtual {v1, v2}, Ljava/io/PrintStream;->println(Ljava/lang/String;)V
|
|
`=====< 0x1000002f0 goto 0x1000002d0
|
|
: `-> 0x1000002f2 sget-object v1, Ljava/lang/System;->out Ljava/io/PrintStream;
|
|
: 0x1000002f6 const-string v2, str.many
|
|
: 0x1000002fa invoke-virtual {v1, v2}, Ljava/io/PrintStream;->println(Ljava/lang/String;)V
|
|
`====< 0x100000300 goto 0x1000002d0
|
|
EOF
|
|
RUN
|
|
|
|
NAME=Dalvik sparse-switch enable asm.middle
|
|
FILE=bins/dex/SwitchOp.dex
|
|
CMDS=<<EOF
|
|
aa
|
|
e asm.comments=false
|
|
e asm.middle=true
|
|
pd 19 @ method.static.SwitchOp.void_sparseSwitch_int
|
|
EOF
|
|
EXPECT=<<EOF
|
|
;-- sym.SwitchOp.void_sparseSwitch_int:
|
|
/ method.static.SwitchOp.void_sparseSwitch_int();
|
|
| 0x1000002b8 move v0, v3
|
|
| 0x1000002ba move v1, v0
|
|
| ,,,=< 0x1000002bc sparse-switch v1, 0x10000030c
|
|
| ||| 0x1000002c2 sget-object v1, Ljava/lang/System;->out Ljava/io/PrintStream;
|
|
| ||| 0x1000002c6 const-string v2, str.sparse_default
|
|
| ||| 0x1000002ca invoke-virtual {v1, v2}, Ljava/io/PrintStream;->println(Ljava/lang/String;)V
|
|
\ ...----> 0x1000002d0 return-void ; *middle* 1
|
|
:::`---> 0x1000002d2 sget-object v1, Ljava/lang/System;->out Ljava/io/PrintStream; ; *middle* 3
|
|
::: || 0x1000002d6 const-string v2, str.ten ; *middle* 3
|
|
::: || 0x1000002da invoke-virtual {v1, v2}, Ljava/io/PrintStream;->println(Ljava/lang/String;)V ; *middle* 5
|
|
`======< 0x1000002e0 goto 0x1000002d0 ; *middle* 1
|
|
:: `--> 0x1000002e2 sget-object v1, Ljava/lang/System;->out Ljava/io/PrintStream; ; *middle* 3
|
|
:: | 0x1000002e6 const-string v2, str.thousand ; *middle* 3
|
|
:: | 0x1000002ea invoke-virtual {v1, v2}, Ljava/io/PrintStream;->println(Ljava/lang/String;)V ; *middle* 5
|
|
`=====< 0x1000002f0 goto 0x1000002d0 ; *middle* 1
|
|
: `-> 0x1000002f2 sget-object v1, Ljava/lang/System;->out Ljava/io/PrintStream; ; *middle* 3
|
|
: 0x1000002f6 const-string v2, str.many ; *middle* 3
|
|
: 0x1000002fa invoke-virtual {v1, v2}, Ljava/io/PrintStream;->println(Ljava/lang/String;)V ; *middle* 5
|
|
`====< 0x100000300 goto 0x1000002d0 ; *middle* 1
|
|
EOF
|
|
RUN
|