Package soot.dexpler
Class DalvikThrowAnalysis
- java.lang.Object
-
- soot.toolkits.exceptions.AbstractThrowAnalysis
-
- soot.toolkits.exceptions.UnitThrowAnalysis
-
- soot.dexpler.DalvikThrowAnalysis
-
- All Implemented Interfaces:
ThrowAnalysis
public class DalvikThrowAnalysis extends UnitThrowAnalysis
- Author:
- alex According to https://android.googlesource.com/platform/dalvik/+/2988c4f272f62af2e96f1e6161d4e99bc1dc1b16/opcode-gen/bytecode.txt the following Dalvik bytecode instructions might throw an exception: op 1a const-string 21c y string-ref continue|throw op 1b const-string/jumbo 31c y string-ref continue|throw op 1c const-class 21c y type-ref continue|throw op 1d monitor-enter 11x n none continue|throw op 1e monitor-exit 11x n none continue|throw op 1f check-cast 21c y type-ref continue|throw op 20 instance-of 22c y type-ref continue|throw op 21 array-length 12x y none continue|throw op 22 new-instance 21c y type-ref continue|throw op 23 new-array 22c y type-ref continue|throw op 24 filled-new-array 35c n type-ref continue|throw op 25 filled-new-array/range 3rc n type-ref continue|throw op 27 throw 11x n none throw op 44 aget 23x y none continue|throw op 45 aget-wide 23x y none continue|throw op 46 aget-object 23x y none continue|throw op 47 aget-boolean 23x y none continue|throw op 48 aget-byte 23x y none continue|throw op 49 aget-char 23x y none continue|throw op 4a aget-short 23x y none continue|throw op 4b aput 23x n none continue|throw op 4c aput-wide 23x n none continue|throw op 4d aput-object 23x n none continue|throw op 4e aput-boolean 23x n none continue|throw op 4f aput-byte 23x n none continue|throw op 50 aput-char 23x n none continue|throw op 51 aput-short 23x n none continue|throw op 52 iget 22c y field-ref continue|throw op 53 iget-wide 22c y field-ref continue|throw op 54 iget-object 22c y field-ref continue|throw op 55 iget-boolean 22c y field-ref continue|throw op 56 iget-byte 22c y field-ref continue|throw op 57 iget-char 22c y field-ref continue|throw op 58 iget-short 22c y field-ref continue|throw op 59 iput 22c n field-ref continue|throw op 5a iput-wide 22c n field-ref continue|throw op 5b iput-object 22c n field-ref continue|throw op 5c iput-boolean 22c n field-ref continue|throw op 5d iput-byte 22c n field-ref continue|throw op 5e iput-char 22c n field-ref continue|throw op 5f iput-short 22c n field-ref continue|throw op 60 sget 21c y field-ref continue|throw op 61 sget-wide 21c y field-ref continue|throw op 62 sget-object 21c y field-ref continue|throw op 63 sget-boolean 21c y field-ref continue|throw op 64 sget-byte 21c y field-ref continue|throw op 65 sget-char 21c y field-ref continue|throw op 66 sget-short 21c y field-ref continue|throw op 67 sput 21c n field-ref continue|throw op 68 sput-wide 21c n field-ref continue|throw op 69 sput-object 21c n field-ref continue|throw op 6a sput-boolean 21c n field-ref continue|throw op 6b sput-byte 21c n field-ref continue|throw op 6c sput-char 21c n field-ref continue|throw op 6d sput-short 21c n field-ref continue|throw op 6e invoke-virtual 35c n method-ref continue|throw|invoke op 6f invoke-super 35c n method-ref continue|throw|invoke op 70 invoke-direct 35c n method-ref continue|throw|invoke op 71 invoke-static 35c n method-ref continue|throw|invoke op 72 invoke-interface 35c n method-ref continue|throw|invoke # unused: op 73 op 74 invoke-virtual/range 3rc n method-ref continue|throw|invoke op 75 invoke-super/range 3rc n method-ref continue|throw|invoke op 76 invoke-direct/range 3rc n method-ref continue|throw|invoke op 77 invoke-static/range 3rc n method-ref continue|throw|invoke op 78 invoke-interface/range 3rc n method-ref continue|throw|invoke op 93 div-int 23x y none continue|throw op 94 rem-int 23x y none continue|throw op 9e div-long 23x y none continue|throw op 9f rem-long 23x y none continue|throw op b3 div-int/2addr 12x y none continue|throw op b4 rem-int/2addr 12x y none continue|throw op be div-long/2addr 12x y none continue|throw op bf rem-long/2addr 12x y none continue|throw op d3 div-int/lit16 22s y none continue|throw op d4 rem-int/lit16 22s y none continue|throw op db div-int/lit8 22b y none continue|throw op dc rem-int/lit8 22b y none continue|throw op e3 +iget-volatile 22c y field-ref optimized|continue|throw op e4 +iput-volatile 22c n field-ref optimized|continue|throw op e5 +sget-volatile 21c y field-ref optimized|continue|throw op e6 +sput-volatile 21c n field-ref optimized|continue|throw op e7 +iget-object-volatile 22c y field-ref optimized|continue|throw op e8 +iget-wide-volatile 22c y field-ref optimized|continue|throw op e9 +iput-wide-volatile 22c n field-ref optimized|continue|throw op ea +sget-wide-volatile 21c y field-ref optimized|continue|throw op eb +sput-wide-volatile 21c n field-ref optimized|continue|throw op ed ^throw-verification-error 20bc n varies optimized|throw op ee +execute-inline 35mi n inline-method optimized|continue|throw op ef +execute-inline/range 3rmi n inline-method optimized|continue|throw op f0 +invoke-object-init/range 35c n method-ref optimized|continue|throw|invoke op f2 +iget-quick 22cs y field-offset optimized|continue|throw op f3 +iget-wide-quick 22cs y field-offset optimized|continue|throw op f4 +iget-object-quick 22cs y field-offset optimized|continue|throw op f5 +iput-quick 22cs n field-offset optimized|continue|throw op f6 +iput-wide-quick 22cs n field-offset optimized|continue|throw op f7 +iput-object-quick 22cs n field-offset optimized|continue|throw op f8 +invoke-virtual-quick 35ms n vtable-offset optimized|continue|throw|invoke op f9 +invoke-virtual-quick/range 3rms n vtable-offset optimized|continue|throw|invoke op fa +invoke-super-quick 35ms n vtable-offset optimized|continue|throw|invoke op fb +invoke-super-quick/range 3rms n vtable-offset optimized|continue|throw|invoke op fc +iput-object-volatile 22c n field-ref optimized|continue|throw op fd +sget-object-volatile 21c y field-ref optimized|continue|throw op fe +sput-object-volatile 21c n field-ref optimized|continue|throw In brief: - const [string|class] - monitor [enter|exit] already handled in UnitThrowAnalysis - check cast already handled in UnitThrowAnalysis - instanceof already handled in UnitThrowAnalysis - array length already handled in UnitThrowAnalysis - new [instance|array] already handled in UnitThrowAnalysis - filled new array - throw already handled in UnitThrowAnalysis - invoke* already handled in UnitThrowAnalysis - [ais][get|put] already handled in UnitThrowAnalysis - div/rem already handled in UnitThrowAnalysis For a reference manual, look at https://code.google.com/p/android-source-browsing
-
-
Nested Class Summary
-
Nested classes/interfaces inherited from class soot.toolkits.exceptions.UnitThrowAnalysis
UnitThrowAnalysis.UnitSwitch, UnitThrowAnalysis.ValueSwitch
-
-
Field Summary
Fields Modifier and Type Field Description static DalvikThrowAnalysisinterproceduralAnalysis-
Fields inherited from class soot.toolkits.exceptions.UnitThrowAnalysis
isInterproc, methodToThrowSet, mgr
-
-
Constructor Summary
Constructors Modifier Constructor Description protectedDalvikThrowAnalysis(boolean isInterproc)DalvikThrowAnalysis(Singletons.Global g)Constructs aDalvikThrowAnalysisfor inclusion in Soot's global variable manager,G.DalvikThrowAnalysis(Singletons.Global g, boolean isInterproc)
-
Method Summary
All Methods Static Methods Instance Methods Concrete Methods Modifier and Type Method Description protected ThrowableSetdefaultResult()static DalvikThrowAnalysisinterproc()protected UnitThrowAnalysis.UnitSwitchunitSwitch(SootMethod sm)static DalvikThrowAnalysisv()Returns the single instance ofDalvikThrowAnalysis.protected UnitThrowAnalysis.ValueSwitchvalueSwitch()-
Methods inherited from class soot.toolkits.exceptions.UnitThrowAnalysis
mightThrow, mightThrow, mightThrow, mightThrow, mightThrow, mightThrowImplicitly, mightThrowImplicitly
-
Methods inherited from class soot.toolkits.exceptions.AbstractThrowAnalysis
mightThrowExplicitly, mightThrowExplicitly, mightThrowExplicitly
-
-
-
-
Field Detail
-
interproceduralAnalysis
public static DalvikThrowAnalysis interproceduralAnalysis
-
-
Constructor Detail
-
DalvikThrowAnalysis
public DalvikThrowAnalysis(Singletons.Global g)
Constructs aDalvikThrowAnalysisfor inclusion in Soot's global variable manager,G.- Parameters:
g- guarantees that the constructor may only be called fromSingletons.
-
DalvikThrowAnalysis
protected DalvikThrowAnalysis(boolean isInterproc)
-
DalvikThrowAnalysis
public DalvikThrowAnalysis(Singletons.Global g, boolean isInterproc)
-
-
Method Detail
-
v
public static DalvikThrowAnalysis v()
Returns the single instance ofDalvikThrowAnalysis.- Returns:
- Soot's
UnitThrowAnalysis.
-
interproc
public static DalvikThrowAnalysis interproc()
-
defaultResult
protected ThrowableSet defaultResult()
- Overrides:
defaultResultin classUnitThrowAnalysis
-
unitSwitch
protected UnitThrowAnalysis.UnitSwitch unitSwitch(SootMethod sm)
- Overrides:
unitSwitchin classUnitThrowAnalysis
-
valueSwitch
protected UnitThrowAnalysis.ValueSwitch valueSwitch()
- Overrides:
valueSwitchin classUnitThrowAnalysis
-
-