Skip to content

Commit e0793b7

Browse files
committed
[DEX] Abstracting InstructionOpcode
1 parent b9c2266 commit e0793b7

2 files changed

Lines changed: 68 additions & 0 deletions

File tree

‎src/main/java/com/reandroid/dex/ins/Opcode.java‎

Lines changed: 35 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1010,119 +1010,152 @@ public ProgramType programType() {
10101010
public boolean hasOutRegisters() {
10111011
return getRegisterFormat().isOut();
10121012
}
1013+
@Override
10131014
public boolean isConstString() {
10141015
int value = this.value;
10151016
return value == 0x1a || value == 0x1b;
10161017
}
1018+
@Override
10171019
public boolean isArrayGet() {
10181020
int value = this.value;
10191021
return value >= 0x44 && value <= 0x4a;
10201022
}
1023+
@Override
10211024
public boolean isArrayPut() {
10221025
int value = this.value;
10231026
return value >= 0x4b && value <= 0x51;
10241027
}
1028+
@Override
10251029
public boolean isArrayOp() {
10261030
int value = this.value;
10271031
return value >= 0x44 && value <= 0x51;
10281032
}
1033+
@Override
10291034
public boolean isFieldOp() {
10301035
int value = this.value;
10311036
return value >= 0x52 && value <= 0x6d;
10321037
}
1038+
@Override
10331039
public boolean isFieldInstanceOp() {
10341040
int value = this.value;
10351041
return value >= 0x52 && value <= 0x5f;
10361042
}
1043+
@Override
10371044
public boolean isFieldInstanceGet() {
10381045
int value = this.value;
10391046
return value >= 0x52 && value <= 0x58;
10401047
}
1048+
@Override
10411049
public boolean isFieldInstancePut() {
10421050
int value = this.value;
10431051
return value >= 0x59 && value <= 0x5f;
10441052
}
1053+
@Override
10451054
public boolean isFieldStaticOp() {
10461055
int value = this.value;
10471056
return value >= 0x60 && value <= 0x6d;
10481057
}
1058+
@Override
10491059
public boolean isFieldStaticGet() {
10501060
int value = this.value;
10511061
return value >= 0x60 && value <= 0x66;
10521062
}
1063+
@Override
10531064
public boolean isFieldStaticPut() {
10541065
int value = this.value;
10551066
return value >= 0x67 && value <= 0x6d;
10561067
}
1068+
@Override
10571069
public boolean isFieldGet() {
10581070
return isFieldInstanceGet() || isFieldStaticGet();
10591071
}
1072+
@Override
10601073
public boolean isFieldPut() {
10611074
return isFieldInstancePut() || isFieldStaticPut();
10621075
}
1076+
@Override
10631077
public boolean isMethodInvokeVirtual() {
10641078
int value = this.value;
10651079
return value == 0x6e || value == 0x74;
10661080
}
1081+
@Override
10671082
public boolean isMethodInvokeSuper() {
10681083
int value = this.value;
10691084
return value == 0x6f || value == 0x75;
10701085
}
1086+
@Override
10711087
public boolean isMethodInvokeDirect() {
10721088
int value = this.value;
10731089
return value == 0x70 || value == 0x76;
10741090
}
1091+
@Override
10751092
public boolean isMethodInvokeStatic() {
10761093
int value = this.value;
10771094
return value == 0x71 || value == 0x77;
10781095
}
1096+
@Override
10791097
public boolean isMethodInvokeInterface() {
10801098
int value = this.value;
10811099
return value == 0x72 || value == 0x78;
10821100
}
1101+
@Override
10831102
public boolean isMethodInvoke() {
10841103
int value = this.value;
10851104
return value != 0x73 && value >= 0x6e && value <= 0x78;
10861105
}
1106+
@Override
1107+
public boolean isConst() {
1108+
return isConstNumber() || isConstString() || this == CONST_CLASS;
1109+
}
1110+
@Override
10871111
public boolean isConstNumber() {
10881112
int value = this.value;
10891113
return value >= 0x12 && value <= 0x19;
10901114
}
1115+
@Override
10911116
public boolean isConstInteger() {
10921117
int value = this.value;
10931118
return value >= 0x12 && value <= 0x15;
10941119
}
1120+
@Override
10951121
public boolean isConstWide() {
10961122
int value = this.value;
10971123
return value >= 0x16 && value <= 0x19;
10981124
}
1125+
@Override
10991126
public boolean isReturn() {
11001127
int value = this.value;
11011128
if (value >= 0x0e && value <= 0x11) {
11021129
return true;
11031130
}
11041131
return value == 0xf1 || value == 0x73;
11051132
}
1133+
@Override
11061134
public boolean isMoveResult() {
11071135
int value = this.value;
11081136
return value == 0x0a || value == 0x0b || value == 0x0c;
11091137
}
1138+
@Override
11101139
public boolean isMove() {
11111140
int value = this.value;
11121141
return value >= 0x1 && value <= 0x9;
11131142
}
1143+
@Override
11141144
public boolean isIfTest() {
11151145
int value = this.value;
11161146
return value >= 0x32 && value <= 0x3d;
11171147
}
1148+
@Override
11181149
public boolean isGoto() {
11191150
int value = this.value;
11201151
return value == 0x28 || value == 0x29 || value == 0x2a;
11211152
}
1153+
@Override
11221154
public boolean isSwitch() {
11231155
int value = this.value;
11241156
return value == 0x2b || value == 0x2c;
11251157
}
1158+
@Override
11261159
public boolean isPayload() {
11271160
int value = this.value;
11281161
return value == 0x100 || value == 0x200 || value == 0x300;
@@ -1133,9 +1166,11 @@ public boolean isInsBranching() {
11331166
public boolean isBranching() {
11341167
return isInsBranching() || isSwitch();
11351168
}
1169+
@Override
11361170
public boolean isMethodExit() {
11371171
return isReturn() || this == THROW;
11381172
}
1173+
@Override
11391174
public boolean isRange() {
11401175
return getRegisterFormat().isRange();
11411176
}

‎src/main/java/com/reandroid/dex/program/InstructionOpcode.java‎

Lines changed: 33 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -18,4 +18,37 @@
1818
public interface InstructionOpcode extends ProgramTypeDescriptor {
1919
int getValue();
2020
String getName();
21+
22+
boolean isArrayGet();
23+
boolean isArrayOp();
24+
boolean isArrayPut();
25+
boolean isConst();
26+
boolean isConstInteger();
27+
boolean isConstNumber();
28+
boolean isConstString();
29+
boolean isConstWide();
30+
boolean isFieldGet();
31+
boolean isFieldInstanceGet();
32+
boolean isFieldInstanceOp();
33+
boolean isFieldInstancePut();
34+
boolean isFieldOp();
35+
boolean isFieldPut();
36+
boolean isFieldStaticGet();
37+
boolean isFieldStaticOp();
38+
boolean isFieldStaticPut();
39+
boolean isGoto();
40+
boolean isIfTest();
41+
boolean isMethodExit();
42+
boolean isMethodInvoke();
43+
boolean isMethodInvokeDirect();
44+
boolean isMethodInvokeInterface();
45+
boolean isMethodInvokeStatic();
46+
boolean isMethodInvokeSuper();
47+
boolean isMethodInvokeVirtual();
48+
boolean isMove();
49+
boolean isMoveResult();
50+
boolean isPayload();
51+
boolean isRange();
52+
boolean isReturn();
53+
boolean isSwitch();
2154
}

0 commit comments

Comments
 (0)