moved the examples

git-svn-id: https://smali.googlecode.com/svn/trunk@79 55b6fa8a-2a1e-11de-a435-ffa8d773f76a
This commit is contained in:
JesusFreke@JesusFreke.com
2009-06-04 04:39:25 +00:00
parent 20f261138f
commit c2b3b1457a
14 changed files with 1285 additions and 0 deletions

View File

@ -0,0 +1,6 @@
.class public L10;
.super Ljava/lang/Object;
.method public static 11()V
return-void
.end method

View File

@ -0,0 +1,67 @@
.class public abstract interface annotation LAnnotationWithValues;
.super Ljava/lang/Object;
.implements Ljava/lang/annotation/Annotation;
.method public abstract booleanValue()Z
.end method
.method public abstract byteValue()B
.end method
.method public abstract charValue()C
.end method
.method public abstract shortValue()S
.end method
.method public abstract intValue()I
.end method
.method public abstract longValue()J
.end method
.method public abstract floatValue()F
.end method
.method public abstract doubleValue()D
.end method
.method public abstract stringValue()Ljava/lang/String;
.end method
.method public abstract subAnnotationValue()LSubAnnotation;
.end method
.method public abstract typeValue()Ljava/lang/Class;
.end method
.method public abstract methodValue()Ljava/lang/reflect/Method;
.end method
;dalvik doesn't seem to like field values
;.method public abstract fieldValue()Ljava/lang/reflect/Field;
;.end method
.method public abstract enumValue()LEnum;
.end method
.annotation system Ldalvik/annotation/AnnotationDefault;
value = .subannotation LAnnotationWithValues;
booleanValue = false
byteValue = 1t
charValue = '2'
shortValue = 3s
intValue = 4
longValue = 5l
floatValue = 6.0f
doubleValue = 7.0
stringValue = "8"
subAnnotationValue = .subannotation LSubAnnotation;
stringValue = "9"
.end subannotation
typeValue = L10;
methodValue = L10;->11()V
enumValue = .enum LEnum;->12:LEnum;
.end subannotation
.end annotation

View File

@ -0,0 +1,52 @@
.class public final enum LEnum;
.super Ljava/lang/Enum;
.field private static final synthetic $VALUES:[LEnum;
.field public static final enum 12:LEnum;
.method static constructor <clinit>()V
.registers 4
const/4 v3, 1
const/4 v2, 0
new-instance v0, LEnum;
const-string v1, "12"
invoke-direct {v0, v1, v2}, LEnum;-><init>(Ljava/lang/String;I)V
sput-object v0, LEnum;->12:LEnum;
const/4 v0, 1
new-array v0, v0, [LEnum;
sget-object v1, LEnum;->12:LEnum;
aput-object v1, v0, v2
sput-object v0, LEnum;->$VALUES:[LEnum;
return-void
.end method
.method private constructor <init>(Ljava/lang/String;I)V
.registers 3
invoke-direct {v0, v1, v2}, Ljava/lang/Enum;-><init>(Ljava/lang/String;I)V
return-void
.end method
.method public static valueOf(Ljava/lang/String;)LEnum;
.registers 2
const-class v0, LEnum;
invoke-static {v0, v1}, Ljava/lang/Enum;->valueOf(Ljava/lang/Class;Ljava/lang/String;)Ljava/lang/Enum;
move-result-object v1
check-cast v1, LEnum;
return-object v1
.end method
.method public static values()[LEnum;
.registers 1
sget-object v0, LEnum;->$VALUES:[LEnum;
invoke-virtual {v0}, [LEnum;->clone()Ljava/lang/Object;
move-result-object v0
check-cast v0, [LEnum;
return-object v0
.end method

View File

@ -0,0 +1,25 @@
.class public LMain;
.super Ljava/lang/Object;
;expected output:
;@AnnotationWithValues(booleanValue=false, byteValue=1, charValue=2, doubleValue=7.0, enumValue=12, floatValue=6.0, intValue=4, longValue=5, methodValue=public static void 10.11(), shortValue=3, stringValue=8, subAnnotationValue=@SubAnnotation(stringValue=9), typeValue=class 10)
.method public static main([Ljava/lang/String;)V
.registers 3
sget-object v0, Ljava/lang/System;->out:Ljava/io/PrintStream;
const-class v1, LMain;
const-class v2, LAnnotationWithValues;
invoke-virtual {v1, v2}, Ljava/lang/Class;->getAnnotation(Ljava/lang/Class;)Ljava/lang/annotation/Annotation;
move-result-object v1
invoke-virtual {v0, v1}, Ljava/io/PrintStream;->println(Ljava/lang/Object;)V
return-void
.end method
.annotation runtime LAnnotationWithValues;
.end annotation

View File

@ -0,0 +1,6 @@
.class public abstract interface annotation LSubAnnotation;
.super Ljava/lang/Object;
.implements Ljava/lang/annotation/Annotation;
.method public abstract stringValue()Ljava/lang/String;
.end method

97
examples/Constants.smali Normal file
View File

@ -0,0 +1,97 @@
.class public org/JesusFreke/HelloWorld2/HelloWorld2
.super android/app/Activity
.field private static final stringConstant1 Ljava/lang/String; = "Hello World!"
.field private static final stringConstant2 Ljava/lang/String; = ""
.field private static final stringConstant3 Ljava/lang/String; = "a\b\n\f\r\"\'\\\u1234\u0000\u000a\u000d"
.field private static final charConstant1 C = 'a'
.field private static final charConstant2 C = '\b' ;backspace
.field private static final charConstant3 C = '\n'
.field private static final charConstant4 C = '\f' ;formfeed
.field private static final charConstant5 C = '\r'
.field private static final charConstant6 C = '\"'
.field private static final charConstant7 C = '\''
.field private static final charConstant8 C = '\\'
.field private static final charConstant9 C = '\0'
.field private static final charConstant10 C = '\7'
.field private static final charConstant11 C = '\77'
.field private static final charConstant12 C = '\377'
.field private static final intDecConstant1 I = 0
.field private static final intDecConstant2 I = 1
.field private static final intDecConstant3 I = 1000
.field private static final intDecConstant4 I = 1024
.field private static final intDecConstant5 I = 2147483647
.field private static final intDecConstant6 I = -0
.field private static final intDecConstant7 I = -1
.field private static final intDecConstant8 I = -1000
.field private static final intDecConstant9 I = -1024
.field private static final intDecConstant10 I = -2147483648
.field private static final intHexConstant1 I = 0x0
.field private static final intHexConstant2 I = 0x00
.field private static final intHexConstant3 I = 0x1
.field private static final intHexConstant4 I = 0x01
.field private static final intHexConstant5 I = 0x3E8 ;1000
.field private static final intHexConstant6 I = 0x400 ;1024
.field private static final intHexConstant7 I = 0x7fffffff ;2147483647
.field private static final intHexConstant8 I = 0xFFFFFFFF ;-1
.field private static final intHexConstant9 I = 0xFFFFFC18 ;-1000
.field private static final intHexConstant10 I = 0xFFFFFC00 ;-1024
.field private static final intHexConstant11 I = 0x80000000 ;-2147483648
.field private static final longDecConstant1 J = 0L
.field private static final longDecConstant2 J = 1L
.field private static final longDecConstant3 J = 1000L
.field private static final longDecConstant4 J = 1024L
.field private static final longDecConstant5 J = 2147483647L
.field private static final longDecConstant5 J = 2147483648L
.field private static final longDecConstant5 J = 9223372036854775807L
.field private static final longDecConstant6 J = -0L
.field private static final longDecConstant7 J = -1L
.field private static final longDecConstant8 J = -1000L
.field private static final longDecConstant9 J = -1024L
.field private static final longDecConstant10 J = -2147483648L
.field private static final longDecConstant10 J = -2147483649L
.field private static final longDecConstant10 J = -9223372036854775808L
.field private static final longHexConstant1 J = 0x0L
.field private static final longHexConstant2 J = 0x00L
.field private static final longHexConstant3 J = 0x1L
.field private static final longHexConstant4 J = 0x01L
.field private static final longHexConstant5 J = 0x3E8L ;1000
.field private static final longHexConstant6 J = 0x400L ;1024
.field private static final longHexConstant7 J = 0x7fffffffL ;2147483647
.field private static final longHexConstant7 J = 0x80000000L ;2147483648
.field private static final longHexConstant7 J = 0x7fffffffffffffffL ;9223372036854775807
.field private static final longHexConstant8 J = 0xFFFFFFFFFFFFFFFFL ;-1
.field private static final longHexConstant9 J = 0xFFFFFFFFFFFFFC18L ;-1000
.field private static final longHexConstant10 J = 0xFFFFFFFFFFFFFC00L ;-1024
.field private static final longHexConstant11 J = 0xFFFFFFFF80000000L ;-2147483648
.field private static final longHexConstant11 J = 0xFFFFFFFF7FFFFFFFL ;-2147483649
.field private static final longHexConstant12 J = 0x8000000000000000L ;-9223372036854775808
.method public constructor <init>()V
.registers 1
invoke-direct {v0} android/app/Activity.<init>()V
return-void
.end method
.method public onCreate(Landroid/os/Bundle;)V
.registers 4
sget-object v0 java/lang/System.out Ljava/io/PrintStream;
invoke-super {v2,v3} android/app/Activity.onCreate(Landroid/os/Bundle;)V
new-instance v0 android/widget/TextView
invoke-direct {v0,v2} android/widget/TextView.<init>(Landroid/content/Context;)V
const-string v1 "Hello World!"
invoke-virtual {v0,v1} android/widget/TextView.setText(Ljava/lang/CharSequence;)V
invoke-virtual {v2,v0} org/JesusFreke/HelloWorld2/HelloWorld2.setContentView(Landroid/view/View;)V
return-void
.end method

73
examples/Enums/Enum.smali Normal file
View File

@ -0,0 +1,73 @@
.class public final enum LEnum;
.super Ljava/lang/Enum;
;This class is an example of how to define an enum. You have
;to do all of the work that java normally takes care of
.field private static final synthetic $VALUES:[LEnum;
.field public static final enum VALUE1:LEnum;
.field public static final enum VALUE2:LEnum;
.method static constructor <clinit>()V
.registers 4
;create an instance of this class for the VALUE1 value
new-instance v0, LEnum;
const-string v1, "VALUE1"
const/4 v2, 0
invoke-direct {v0, v1, v2}, LEnum;-><init>(Ljava/lang/String;I)V
;and store it in VALUE1
sput-object v0, LEnum;->VALUE1:LEnum;
;create an instance of this class for the VALUE2 value
new-instance v0, LEnum;
const-string v1, "VALUE2"
const/4 v3, 1
invoke-direct {v0, v1, v3}, LEnum;-><init>(Ljava/lang/String;I)V
;and store it in VALUE2
sput-object v0, LEnum;->VALUE2:LEnum;
;create an array of Enums, for the $VALUES member
const/4 v0, 2
new-array v0, v0, [LEnum;
;add VALUE1 to the array
sget-object v1, LEnum;->VALUE1:LEnum;
aput-object v1, v0, v2
;add VALUE2 to the array
sget-object v1, LEnum;->VALUE2:LEnum;
aput-object v1, v0, v3
;and store the array in $VALUES
sput-object v0, LEnum;->$VALUES:[LEnum;
return-void
.end method
.method private constructor <init>(Ljava/lang/String;I)V
.registers 3
invoke-direct {v0, v1, v2}, Ljava/lang/Enum;-><init>(Ljava/lang/String;I)V
return-void
.end method
.method public static valueof(Ljava/lang/String;)LEnum;
.registers 2
const-class v0, LEnum;
invoke-static {v0, v1}, Ljava/lang/Enum;->valueOf(Ljava/lang/Class;Ljava/lang/String;)Ljava/lang/Enum;
move-result-object v1
check-cast v1, LEnum;
return-object v1
.end method
.method public static values()[LEnum;
.registers 1
sget-object v0, LEnum;->$VALUES:[LEnum;
invoke-virtual {v0}, [LEnum;->clone()Ljava/lang/Object;
move-result-object v0
check-cast v0, [LEnum;
return-object v0
.end method

15
examples/Enums/Main.smali Normal file
View File

@ -0,0 +1,15 @@
.class public LMain;
.super Ljava/lang/Object;
.method public static main([Ljava/lang/String;)V
.registers 2
sget-object v0, Ljava/lang/System;->out:Ljava/io/PrintStream;
sget-object v1, LEnum;->VALUE1:LEnum;
invoke-virtual {v0, v1}, Ljava/io/PrintStream;->println(Ljava/lang/Object;)V
return-void
.end method

View File

@ -0,0 +1,23 @@
.class public LHelloWorld;
;Ye olde hello world application
;To assemble and run this on a phone or emulator:
;
;java -jar smali.jar --dex HelloWorld.smali
;zip HelloWorld.zip classes.dex
;adb push HelloWorld.zip /data/local
;adb shell dalvikvm -cp /data/local/HelloWorld.zip HelloWorld
.super Ljava/lang/Object;
.method public static main([Ljava/lang/String;)V
.registers 2
sget-object v0, Ljava/lang/System;->out:Ljava/io/PrintStream;
const-string v1, "Hello World!"
invoke-virtual {v0, v1}, Ljava/io/PrintStream;->println(Ljava/lang/String;)V
return-void
.end method

812
examples/HelloWorld2.smali Normal file
View File

@ -0,0 +1,812 @@
.class public Lorg/JesusFreke/HelloWorld2/HelloWorld2;
.super Landroid/app/Activity;
.source "HelloWorld2.smali"
;two random interfaces with only a single method to implement
.implements Landroid/util/Printer;
.implements Landroid/accounts/AccountMonitorListener;
.method public println(Ljava/lang/String;)V
.registers 2
return-void
.end method
.method public onAccountsUpdated([Ljava/lang/String;)V
.parameter "currentAccounts"
return-void
.registers 2
.end method
.method public static parameterNameTest(IIII)V
.registers 4
.parameter "test1"
.parameter "test2"
.parameter
.parameter "test4"
return-void
.end method
.field private helloWorld Ljava/lang/String;
.field private static helloWorldStatic Ljava/lang/String;
.field private static helloWorldStatic2 Ljava/lang/String; = "Static Initializer Hello World!"
;This class should display the following text to the screen:
;
;Hello World!
;Static Hello World!
;Static Initializer Hello World!
;org/JesusFreke/HelloWorld2/HelloWorld2
;[Lorg/JesusFreke/HelloWorld2/HelloWorld2;
;[I
;0
;-8
;7
;Format10t with a label
;Format10t with an offset
;Format20t with a label
;Format30t with a label
;Testing Format22x and Format32x
;Testing Format21t
;-32768
;-2147483648
;-9223372036854775808
;-1
;20
;1
;Testing Format22t
;20025
;286331153
;Testing Format31c
;5000000000
;5000000
;Label12
;Label13
;In the exception handler.
.method static constructor <clinit>()V ;test
.registers 1
const-string v0, "Static Hello World!"
sput-object v0, org/JesusFreke/HelloWorld2/HelloWorld2/helloWorldStatic Ljava/lang/String; ;test
return-void
.end method
.method public constructor <init>()V
.registers 2
invoke-direct {v1}, android/app/Activity/<init>()V
const-string v0, "Hello World!"
iput-object v0, v1, org/JesusFreke/HelloWorld2/HelloWorld2/helloWorld Ljava/lang/String;;test
return-void
.end method
.method public largeRegisterTest()Ljava/lang/String;
.registers 1235
const-string v1, "Testing Format22x and Format32x"
move-object/16 v1234, v1
const-string v1, "This shouldn't be displayed!"
move-object/from16 v1, v1234
return-object v1
.end method
.method public testFormat21t()Ljava/lang/String;
.registers 3
const-string v0, "Testing Format21t"
const-string v1, "This shouldn't be displayed!"
const/4 v2, 0
if-eqz v2, HERE:
return-object v1
HERE:
return-object v0
.end method
.method public testFormat21s()Ljava/lang/String;
.registers 2
const/16 v0, -32768
invoke-static {v0}, java/lang/Integer/toString(I)Ljava/lang/String;
move-result-object v1
return-object v1
.end method
.method public testFormat22s()Ljava/lang/String;
.registers 2
const/16 v0, 25
add-int/lit16 v1, v0, 20000
invoke-static {v1}, java/lang/Integer/toString(I)Ljava/lang/String;
move-result-object v0
return-object v0
.end method
.method public testFormat21h()Ljava/lang/String;
.registers 2
const/high16 v0, -32768
invoke-static {v0}, java/lang/Integer/toString(I)Ljava/lang/String;
move-result-object v1
return-object v1
.end method
.method public testFormat21h-wide()Ljava/lang/String;
.registers 3
const-wide/high16 v0, -32768
invoke-static {v0, v1}, java/lang/Long/toString(J)Ljava/lang/String;
move-result-object v2
return-object v2
.end method
.method public testFormat23x()Ljava/lang/String;
.registers 7
const-wide/16 v0, 1
const-wide/high16 v2, 1
cmp-long v4, v0, v2
invoke-static {v4}, java/lang/Integer/toString(I)Ljava/lang/String;
move-result-object v6
return-object v6
.end method
.method public testFormat22b()Ljava/lang/String;
.registers 2
const/16 v0, -10
add-int/lit8 v1, v0, 30
invoke-static {v1}, java/lang/Integer/toString(I)Ljava/lang/String;
move-result-object v0
return-object v0
.end method
.method public testFormat22cType()Ljava/lang/String;
.registers 2
const-string v0, "test"
instance-of v1, v0, Ljava/lang/String;
invoke-static {v1}, java/lang/Integer/toString(I)Ljava/lang/String;
move-result-object v0
return-object v0
.end method
.method public testFormat22t()Ljava/lang/String;
.registers 3
const/16 v1, 1
const/16 v2, 1
if-eq v1, v2, skip:
const-string v0, "This shouldn't be displayed!"
return-object v0
skip:
const-string v0, "Testing Format22t"
return-object v0
.end method
.method public testFormat31i()Ljava/lang/String;
.registers 3
const v0, 305419896
const v1, -19088743
add-int v2, v0, v1
invoke-static {v2}, java/lang/Integer/toString(I)Ljava/lang/String;
move-result-object v0
return-object v0
.end method
.method public testFormat31c()Ljava/lang/String;
.registers 1
const-string/jumbo v0, "Testing Format31c"
return-object v0
.end method
.method public testFormat51l()Ljava/lang/String;
.registers 2
const-wide v0, 5000000000L
invoke-static {v0, v1}, java/lang/Long/toString(J)Ljava/lang/String;
move-result-object v0
return-object v0
.end method
.method public testArrayFillData()Ljava/lang/String;
.registers 3
const v0, 7
new-array v0, v0, [I
fill-array-data v0, ArrayData:
const v1, 6
aget v2, v0, v1
invoke-static {v2}, java/lang/Integer/toString(I)Ljava/lang/String;
move-result-object v2
return-object v2
ArrayData:
.array-data 4
1
2
3
4 5 6
;5000000
;0x40T 0x4BT 0x4CT 0x00T
7.006492321624085e-39f
.end array-data
.end method
.method public testPackedSwitch()Ljava/lang/String;
.registers 2
const v0, 12
switch:
packed-switch v0, PackedSwitch:
Label10:
const-string v1, "Label10"
return-object v1
Label11:
const-string v1, "Label11"
return-object v1
Label12:
const-string v1, "Label12"
return-object v1
Label13:
const-string v1, "Label13"
return-object v1
PackedSwitch:
.packed-switch switch: 10
Label10:
Label11:
Label12:
Label13:
.end packed-switch
.end method
.method public testSparseSwitch()Ljava/lang/String;
.registers 2
const v0, 13
switch:
sparse-switch v0, SparseSwitch:
Label10:
const-string v1, "Label10"
return-object v1
Label20:
const-string v1, "Label20"
return-object v1
Label15:
const-string v1, "Label15"
return-object v1
Label13:
const-string v1, "Label13"
return-object v1
Label99:
const-string v1, "Label99"
return-object v1
SparseSwitch:
.sparse-switch switch:
10 -> Label10:
13 -> Label13:
15 -> Label15:
20 -> Label20:
99 -> Label99:
.end sparse-switch
.end method
.method public testTry()Ljava/lang/String;
.registers 2
.line 4
;0
const-string v0, "This shouldn't be displayed!"
.local v0, testVarName Ljava/lang/String;
.prologue
;2
tryStart:
new-instance v1, Ljava/lang/Exception;
.local v1, testVarName2 Ljava/lang/String;, "some weird type"
.line 2
;4
.end local v0
invoke-direct {v1}, java/lang/Exception/<init>()V
;7
throw v1
nop
nop
.restart local v0
.line 5
;10
tryEnd:
return-object v0
.source "blahblah.java"
.line 90
;11
.epilogue
.catch Ljava/lang/Exception; {tryStart: .. tryEnd:} handler:
handler:
const-string v0, "In the exception handler."
return-object v0
.end method
.method public onCreate(Landroid/os/Bundle;)V
.registers 6
.line 1
invoke-super {v4,v5}, android/app/Activity/onCreate(Landroid/os/Bundle;)V
const-string v3, "\n"
new-instance v0, Landroid/widget/TextView;
invoke-direct {v0,v4}, android/widget/TextView/<init>(Landroid/content/Context;)V
.line 3
iget-object v1, v4, org/JesusFreke/HelloWorld2/HelloWorld2/helloWorld Ljava/lang/String;
invoke-virtual {v1, v3}, java/lang/String/concat(Ljava/lang/String;)Ljava/lang/String;
move-result-object v1
sget-object v2, org/JesusFreke/HelloWorld2/HelloWorld2/helloWorldStatic Ljava/lang/String;
invoke-virtual {v1, v2}, java/lang/String/concat(Ljava/lang/String;)Ljava/lang/String;
move-result-object v1
invoke-virtual {v1, v3}, java/lang/String/concat(Ljava/lang/String;)Ljava/lang/String;
move-result-object v1
sget-object v2, org/JesusFreke/HelloWorld2/HelloWorld2/helloWorldStatic2 Ljava/lang/String;
invoke-virtual/range {v1 .. v2}, java/lang/String/concat(Ljava/lang/String;)Ljava/lang/String;
move-result-object v1
invoke-virtual {v1, v3}, java/lang/String/concat(Ljava/lang/String;)Ljava/lang/String;
move-result-object v1
const-class v2, Lorg/JesusFreke/HelloWorld2/HelloWorld2;
invoke-virtual {v2}, java/lang/Class/getName()Ljava/lang/String;
move-result-object v2
invoke-virtual/range {v1 .. v2}, java/lang/String/concat(Ljava/lang/String;)Ljava/lang/String;
move-result-object v1
invoke-virtual {v1, v3}, java/lang/String/concat(Ljava/lang/String;)Ljava/lang/String;
move-result-object v1
const-class v2, [Lorg/JesusFreke/HelloWorld2/HelloWorld2;
invoke-virtual {v2}, java/lang/Class/getName()Ljava/lang/String;
move-result-object v2
invoke-virtual/range {v1 .. v2}, java/lang/String/concat(Ljava/lang/String;)Ljava/lang/String;
move-result-object v1
invoke-virtual {v1, v3}, java/lang/String/concat(Ljava/lang/String;)Ljava/lang/String;
move-result-object v1
const-class v2, [I
invoke-virtual {v2}, java/lang/Class/getName()Ljava/lang/String;
move-result-object v2
invoke-virtual/range {v1 .. v2}, java/lang/String/concat(Ljava/lang/String;)Ljava/lang/String;
move-result-object v1
move-object v2, v1
invoke-virtual {v2, v3}, java/lang/String/concat(Ljava/lang/String;)Ljava/lang/String;
move-result-object v2
;test out Format11n, with various literals
;with 0
const/4 v1, 0
invoke-static {v1}, java/lang/Integer/toString(I)Ljava/lang/String;
move-result-object v1
invoke-virtual {v2, v1}, java/lang/String/concat(Ljava/lang/String;)Ljava/lang/String;
move-result-object v2
invoke-virtual {v2, v3}, java/lang/String/concat(Ljava/lang/String;)Ljava/lang/String;
move-result-object v2
;with -8
const/4 v1, -8
invoke-static {v1}, java/lang/Integer/toString(I)Ljava/lang/String;
move-result-object v1
invoke-virtual {v2, v1}, java/lang/String/concat(Ljava/lang/String;)Ljava/lang/String;
move-result-object v2
invoke-virtual {v2, v3}, java/lang/String/concat(Ljava/lang/String;)Ljava/lang/String;
move-result-object v2
;with 7
const/4 v1, 7
invoke-static {v1}, java/lang/Integer/toString(I)Ljava/lang/String;
move-result-object v1
invoke-virtual {v2, v1}, java/lang/String/concat(Ljava/lang/String;)Ljava/lang/String;
move-result-object v2
invoke-virtual {v2, v3}, java/lang/String/concat(Ljava/lang/String;)Ljava/lang/String;
move-result-object v2
;test format10t with a label
goto SKIP:
const-string v1, "This shouldn't be displayed!"
SKIP:
const-string v1,"Format10t with a label"
invoke-virtual {v2, v1}, java/lang/String/concat(Ljava/lang/String;)Ljava/lang/String;
move-result-object v2
invoke-virtual {v2, v3}, java/lang/String/concat(Ljava/lang/String;)Ljava/lang/String;
move-result-object v2
;test format10t with an offset
goto 3
const-string v1, "This shouldn't be displayed!"
const-string v1,"Format10t with an offset"
invoke-virtual {v2, v1}, java/lang/String/concat(Ljava/lang/String;)Ljava/lang/String;
move-result-object v2
invoke-virtual {v2, v3}, java/lang/String/concat(Ljava/lang/String;)Ljava/lang/String;
move-result-object v2
;test format20t with a label
goto/16 SKIP2:
const-string v1, "This shouldn't be displayed!"
SKIP2:
const-string v1,"Format20t with a label"
invoke-virtual {v2, v1}, java/lang/String/concat(Ljava/lang/String;)Ljava/lang/String;
move-result-object v2
invoke-virtual {v2, v3}, java/lang/String/concat(Ljava/lang/String;)Ljava/lang/String;
move-result-object v2
;test format30t with a label
goto/32 SKIP3:
const-string v1, "This shouldn't be displayed!"
SKIP3:
const-string v1,"Format30t with a label"
invoke-virtual {v2, v1}, java/lang/String/concat(Ljava/lang/String;)Ljava/lang/String;
move-result-object v2
invoke-virtual {v2, v3}, java/lang/String/concat(Ljava/lang/String;)Ljava/lang/String;
move-result-object v2
;test format22x and format32x
invoke-virtual {v4}, org/JesusFreke/HelloWorld2/HelloWorld2/largeRegisterTest()Ljava/lang/String;
move-result-object v1
invoke-virtual {v2, v1}, java/lang/String/concat(Ljava/lang/String;)Ljava/lang/String;
move-result-object v2
invoke-virtual {v2, v3}, java/lang/String/concat(Ljava/lang/String;)Ljava/lang/String;
move-result-object v2
;test format21t
invoke-virtual {v4}, org/JesusFreke/HelloWorld2/HelloWorld2/testFormat21t()Ljava/lang/String;
move-result-object v1
invoke-virtual {v2, v1}, java/lang/String/concat(Ljava/lang/String;)Ljava/lang/String;
move-result-object v2
invoke-virtual {v2, v3}, java/lang/String/concat(Ljava/lang/String;)Ljava/lang/String;
move-result-object v2
;test format21s
invoke-virtual {v4}, org/JesusFreke/HelloWorld2/HelloWorld2/testFormat21s()Ljava/lang/String;
move-result-object v1
invoke-virtual {v2, v1}, java/lang/String/concat(Ljava/lang/String;)Ljava/lang/String;
move-result-object v2
invoke-virtual {v2, v3}, java/lang/String/concat(Ljava/lang/String;)Ljava/lang/String;
move-result-object v2
;test format21h
invoke-virtual {v4}, org/JesusFreke/HelloWorld2/HelloWorld2/testFormat21h()Ljava/lang/String;
move-result-object v1
invoke-virtual {v2, v1}, java/lang/String/concat(Ljava/lang/String;)Ljava/lang/String;
move-result-object v2
invoke-virtual {v2, v3}, java/lang/String/concat(Ljava/lang/String;)Ljava/lang/String;
move-result-object v2
;test format21h
invoke-virtual {v4}, org/JesusFreke/HelloWorld2/HelloWorld2/testFormat21h-wide()Ljava/lang/String;
move-result-object v1
invoke-virtual {v2, v1}, java/lang/String/concat(Ljava/lang/String;)Ljava/lang/String;
move-result-object v2
invoke-virtual {v2, v3}, java/lang/String/concat(Ljava/lang/String;)Ljava/lang/String;
move-result-object v2
;test format23x
invoke-virtual {v4}, org/JesusFreke/HelloWorld2/HelloWorld2/testFormat23x()Ljava/lang/String;
move-result-object v1
invoke-virtual {v2, v1}, java/lang/String/concat(Ljava/lang/String;)Ljava/lang/String;
move-result-object v2
invoke-virtual {v2, v3}, java/lang/String/concat(Ljava/lang/String;)Ljava/lang/String;
move-result-object v2
;test format22b
invoke-virtual {v4}, org/JesusFreke/HelloWorld2/HelloWorld2/testFormat22b()Ljava/lang/String;
move-result-object v1
invoke-virtual {v2, v1}, java/lang/String/concat(Ljava/lang/String;)Ljava/lang/String;
move-result-object v2
invoke-virtual {v2, v3}, java/lang/String/concat(Ljava/lang/String;)Ljava/lang/String;
move-result-object v2
;test format22c-type
invoke-virtual {v4}, org/JesusFreke/HelloWorld2/HelloWorld2/testFormat22cType()Ljava/lang/String;
move-result-object v1
invoke-virtual {v2, v1}, java/lang/String/concat(Ljava/lang/String;)Ljava/lang/String;
move-result-object v2
invoke-virtual {v2, v3}, java/lang/String/concat(Ljava/lang/String;)Ljava/lang/String;
move-result-object v2
;test format22t
invoke-virtual {v4}, org/JesusFreke/HelloWorld2/HelloWorld2/testFormat22t()Ljava/lang/String;
move-result-object v1
invoke-virtual {v2, v1}, java/lang/String/concat(Ljava/lang/String;)Ljava/lang/String;
move-result-object v2
invoke-virtual {v2, v3}, java/lang/String/concat(Ljava/lang/String;)Ljava/lang/String;
move-result-object v2
;test format22s
invoke-virtual {v4}, org/JesusFreke/HelloWorld2/HelloWorld2/testFormat22s()Ljava/lang/String;
move-result-object v1
invoke-virtual {v2, v1}, java/lang/String/concat(Ljava/lang/String;)Ljava/lang/String;
move-result-object v2
invoke-virtual {v2, v3}, java/lang/String/concat(Ljava/lang/String;)Ljava/lang/String;
move-result-object v2
;test format31i
invoke-virtual {v4}, org/JesusFreke/HelloWorld2/HelloWorld2/testFormat31i()Ljava/lang/String;
move-result-object v1
invoke-virtual {v2, v1}, java/lang/String/concat(Ljava/lang/String;)Ljava/lang/String;
move-result-object v2
invoke-virtual {v2, v3}, java/lang/String/concat(Ljava/lang/String;)Ljava/lang/String;
move-result-object v2
;test format31c
invoke-virtual {v4}, org/JesusFreke/HelloWorld2/HelloWorld2/testFormat31c()Ljava/lang/String;
move-result-object v1
invoke-virtual {v2, v1}, java/lang/String/concat(Ljava/lang/String;)Ljava/lang/String;
move-result-object v2
invoke-virtual {v2, v3}, java/lang/String/concat(Ljava/lang/String;)Ljava/lang/String;
move-result-object v2
;test format51l
invoke-virtual {v4}, org/JesusFreke/HelloWorld2/HelloWorld2/testFormat51l()Ljava/lang/String;
move-result-object v1
invoke-virtual {v2, v1}, java/lang/String/concat(Ljava/lang/String;)Ljava/lang/String;
move-result-object v2
invoke-virtual {v2, v3}, java/lang/String/concat(Ljava/lang/String;)Ljava/lang/String;
move-result-object v2
;test array-fill-data
invoke-virtual {v4}, org/JesusFreke/HelloWorld2/HelloWorld2/testArrayFillData()Ljava/lang/String;
move-result-object v1
invoke-virtual {v2, v1}, java/lang/String/concat(Ljava/lang/String;)Ljava/lang/String;
move-result-object v2
invoke-virtual {v2, v3}, java/lang/String/concat(Ljava/lang/String;)Ljava/lang/String;
move-result-object v2
;test packed-switch
invoke-virtual {v4}, org/JesusFreke/HelloWorld2/HelloWorld2/testPackedSwitch()Ljava/lang/String;
move-result-object v1
invoke-virtual {v2, v1}, java/lang/String/concat(Ljava/lang/String;)Ljava/lang/String;
move-result-object v2
invoke-virtual {v2, v3}, java/lang/String/concat(Ljava/lang/String;)Ljava/lang/String;
move-result-object v2
;test sparse-switch
invoke-virtual {v4}, org/JesusFreke/HelloWorld2/HelloWorld2/testSparseSwitch()Ljava/lang/String;
move-result-object v1
invoke-virtual {v2, v1}, java/lang/String/concat(Ljava/lang/String;)Ljava/lang/String;
move-result-object v2
invoke-virtual {v2, v3}, java/lang/String/concat(Ljava/lang/String;)Ljava/lang/String;
move-result-object v2
;test try-catch block
invoke-virtual {v4}, org/JesusFreke/HelloWorld2/HelloWorld2/testTry()Ljava/lang/String;
move-result-object v1
invoke-virtual {v2, v1}, java/lang/String/concat(Ljava/lang/String;)Ljava/lang/String;
move-result-object v2
invoke-virtual {v2, v3}, java/lang/String/concat(Ljava/lang/String;)Ljava/lang/String;
move-result-object v2
check-cast v4, Landroid/app/Activity;
invoke-virtual {v0,v2}, android/widget/TextView/setText(Ljava/lang/CharSequence;)V
new-instance v1, Landroid/widget/ScrollView;
invoke-direct {v1,v4}, android/widget/ScrollView/<init>(Landroid/content/Context;)V
invoke-virtual {v1, v0}, android/widget/ScrollView/addView(Landroid/view/View;)V
invoke-virtual {v4,v1}, org/JesusFreke/HelloWorld2/HelloWorld2/setContentView(Landroid/view/View;)V
return-void
.end method

View File

@ -0,0 +1,39 @@
.class public org/JesusFreke/HelloWorld2/HelloWorld2
.super android/app/Activity
.field private static final final Ljava/lang/String;
.field private static final static I
.field private static final 1234 I
.field private static final 1234-5678 I
.field private static final 1E1000 I
.field private static final 1E-1000 I
.field private static final return I
.field private static final new-instance I
.field private static final <test> I
.field private static final <test$abcd> I
.field private static final test$abcd I
.method public constructor <init>()V
.registers 1
invoke-direct {v0} android/app/Activity.<init>()V
return-void
.end method
.method public 1E-2000(Landroid/os/Bundle;)V
.registers 4
sget-object v0 java/lang/System.out Ljava/io/PrintStream;
invoke-super {v2,v3} android/app/Activity.onCreate(Landroid/os/Bundle;)V
new-instance v0 android/widget/TextView
invoke-direct {v0,v2} android/widget/TextView.<init>(Landroid/content/Context;)V
const-string v1 "Hello World!"
invoke-virtual {v0,v1} android/widget/TextView.setText(Ljava/lang/CharSequence;)V
invoke-virtual {v2,v0} org/JesusFreke/HelloWorld2/HelloWorld2.setContentView(Landroid/view/View;)V
return-void
.end method

28
examples/NoFields.smali Normal file
View File

@ -0,0 +1,28 @@
.class public org/JesusFreke/HelloWorld2/HelloWorld2
.super android/app/Activity
.method public constructor <init>()V
.registers 1
invoke-direct {v1} android/app/Activity.<init>()V
return-void
.end method
.method public onCreate(Landroid/os/Bundle;)V
.registers 5
invoke-super {v3,v4} android/app/Activity.onCreate(Landroid/os/Bundle;)V
const-string v1 "Hello World!"
new-instance v0 android/widget/TextView
invoke-direct {v0,v3} android/widget/TextView.<init>(Landroid/content/Context;)V
invoke-virtual {v0,v1} android/widget/TextView.setText(Ljava/lang/CharSequence;)V
invoke-virtual {v3,v0} org/JesusFreke/HelloWorld2/HelloWorld2.setContentView(Landroid/view/View;)V
return-void
.end method

View File

@ -0,0 +1,24 @@
.class public LMain;
.super Ljava/lang/Object;
;expected output (using the dalvik's default stack size)
;@RecursiveAnnotation(value=@RecursiveAnnotation(value=@RecursiveAnnotation(value=@RecursiveAnnotation(value=@RecursiveAnnotation(value=@RecursiveAnnotation(value=@RecursiveAnnotation(value=@RecursiveAnnotation(value=@RecursiveAnnotation(value=@RecursiveAnnotation(value=@RecursiveAnnotation(value=@RecursiveAnnotation(value=@RecursiveAnnotation(value=@RecursiveAnnotation(value=@RecursiveAnnotation(value=@RecursiveAnnotation(value=@RecursiveAnnotation(value=@RecursiveAnnotation(value=@RecursiveAnnotation(value=@RecursiveAnnotation(value=@RecursiveAnnotation(value=@RecursiveAnnotation(value=@RecursiveAnnotation(value=@RecursiveAnnotation(value=@RecursiveAnnotation(value=@RecursiveAnnotation(value=@RecursiveAnnotation(value=@RecursiveAnnotation(value=@RecursiveAnnotation(value=@RecursiveAnnotation(value=java.lang.StackOverflowError))))))))))))))))))))))))))))))
.method public static main([Ljava/lang/String;)V
.registers 3
sget-object v0, Ljava/lang/System;->out:Ljava/io/PrintStream;
const-class v1, LMain;
const-class v2, LRecursiveAnnotation;
invoke-virtual {v1, v2}, Ljava/lang/Class;->getAnnotation(Ljava/lang/Class;)Ljava/lang/annotation/Annotation;
move-result-object v1
invoke-virtual {v0, v1}, Ljava/io/PrintStream;->println(Ljava/lang/Object;)V
return-void
.end method
.annotation runtime LRecursiveAnnotation;
.end annotation

View File

@ -0,0 +1,18 @@
.class public abstract interface annotation LRecursiveAnnotation;
.super Ljava/lang/Object;
.implements Ljava/lang/annotation/Annotation;
;this is a recursive annotation that has a default value of itself.
;Trying to print .toString() on an instance of this annotation
;will cause a stack overflow
.method public abstract value()LRecursiveAnnotation;
.end method
.annotation system Ldalvik/annotation/AnnotationDefault;
value = .subannotation LRecursiveAnnotation;
value = .subannotation LRecursiveAnnotation;
.end subannotation
.end subannotation
.end annotation