@futpib/parser 1.0.3 → 1.0.6
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.claude/settings.local.json +24 -0
- package/.github/workflows/main.yml +1 -0
- package/build/androidPackageParser.js +30 -32
- package/build/arbitraryDalvikBytecode.d.ts +3 -3
- package/build/arbitraryDalvikBytecode.js +33 -27
- package/build/arbitraryDalvikExecutable.js +55 -17
- package/build/arbitraryJava.d.ts +31 -0
- package/build/arbitraryJava.js +532 -0
- package/build/arbitraryJavaScript.d.ts +3 -0
- package/build/arbitraryJavaScript.js +263 -0
- package/build/arbitraryJavascript.d.ts +3 -0
- package/build/arbitraryJavascript.js +263 -0
- package/build/arbitraryZig.d.ts +3 -0
- package/build/arbitraryZig.js +240 -0
- package/build/arbitraryZipStream.d.ts +1 -1
- package/build/arrayParser.js +72 -13
- package/build/backsmali.d.ts +4 -3
- package/build/backsmali.js +26 -6
- package/build/bash.d.ts +89 -0
- package/build/bash.js +1 -0
- package/build/bashParser.d.ts +6 -0
- package/build/bashParser.js +335 -0
- package/build/bashParser.test.d.ts +1 -0
- package/build/bashParser.test.js +343 -0
- package/build/bashParserEdgeCases.test.d.ts +1 -0
- package/build/bashParserEdgeCases.test.js +117 -0
- package/build/dalvikBytecodeParser/addressConversion.d.ts +110 -0
- package/build/dalvikBytecodeParser/addressConversion.js +334 -0
- package/build/dalvikBytecodeParser/formatParsers.d.ts +7 -6
- package/build/dalvikBytecodeParser/formatParsers.js +13 -14
- package/build/dalvikBytecodeParser.d.ts +60 -31
- package/build/dalvikBytecodeParser.js +92 -35
- package/build/dalvikBytecodeParser.test-d.d.ts +1 -0
- package/build/dalvikBytecodeParser.test-d.js +268 -0
- package/build/dalvikBytecodeUnparser/formatUnparsers.d.ts +9 -8
- package/build/dalvikBytecodeUnparser/formatUnparsers.js +13 -12
- package/build/dalvikBytecodeUnparser.d.ts +2 -2
- package/build/dalvikBytecodeUnparser.js +23 -23
- package/build/dalvikBytecodeUnparser.test.js +7 -7
- package/build/dalvikExecutable.d.ts +3 -3
- package/build/dalvikExecutable.test-d.d.ts +1 -0
- package/build/dalvikExecutable.test-d.js +59 -0
- package/build/dalvikExecutableParser/typedNumbers.d.ts +18 -0
- package/build/dalvikExecutableParser/typedNumbers.js +3 -0
- package/build/dalvikExecutableParser.d.ts +2 -1
- package/build/dalvikExecutableParser.js +96 -77
- package/build/dalvikExecutableParser.test.js +24 -3
- package/build/dalvikExecutableParserAgainstSmaliParser.test.js +3 -0
- package/build/dalvikExecutableUnparser/poolScanners.d.ts +2 -2
- package/build/dalvikExecutableUnparser/sectionUnparsers.d.ts +3 -3
- package/build/dalvikExecutableUnparser/sectionUnparsers.js +26 -11
- package/build/dalvikExecutableUnparser.d.ts +2 -2
- package/build/dalvikExecutableUnparser.test.js +2 -1
- package/build/disjunctionParser.d.ts +5 -3
- package/build/disjunctionParser.js +79 -17
- package/build/disjunctionParser.test-d.d.ts +1 -0
- package/build/disjunctionParser.test-d.js +72 -0
- package/build/elementSwitchParser.d.ts +4 -0
- package/build/{exactElementSwitchParser.js → elementSwitchParser.js} +3 -4
- package/build/elementSwitchParser.test-d.d.ts +1 -0
- package/build/elementSwitchParser.test-d.js +44 -0
- package/build/exactSequenceParser.d.ts +4 -2
- package/build/exactSequenceParser.test-d.d.ts +1 -0
- package/build/exactSequenceParser.test-d.js +36 -0
- package/build/fetchCid.js +2 -66
- package/build/index.d.ts +25 -2
- package/build/index.js +23 -1
- package/build/index.test.js +16 -1
- package/build/inputReader.d.ts +10 -0
- package/build/inputReader.js +36 -0
- package/build/java.d.ts +502 -0
- package/build/java.js +2 -0
- package/build/javaKeyStoreParser.js +14 -17
- package/build/javaParser.d.ts +51 -0
- package/build/javaParser.js +1538 -0
- package/build/javaParser.test.d.ts +1 -0
- package/build/javaParser.test.js +1287 -0
- package/build/javaScript.d.ts +35 -0
- package/build/javaScript.js +1 -0
- package/build/javaScriptParser.d.ts +9 -0
- package/build/javaScriptParser.js +34 -0
- package/build/javaScriptUnparser.d.ts +3 -0
- package/build/javaScriptUnparser.js +4 -0
- package/build/javaScriptUnparser.test.d.ts +1 -0
- package/build/javaScriptUnparser.test.js +24 -0
- package/build/javaUnparser.d.ts +2 -0
- package/build/javaUnparser.js +519 -0
- package/build/javaUnparser.test.d.ts +1 -0
- package/build/javaUnparser.test.js +24 -0
- package/build/javascript.d.ts +35 -0
- package/build/javascript.js +1 -0
- package/build/javascriptParser.d.ts +9 -0
- package/build/javascriptParser.js +34 -0
- package/build/javascriptUnparser.d.ts +3 -0
- package/build/javascriptUnparser.js +4 -0
- package/build/javascriptUnparser.test.d.ts +1 -0
- package/build/javascriptUnparser.test.js +24 -0
- package/build/jsonParser.js +2 -12
- package/build/lazyMessageError.d.ts +3 -0
- package/build/lookaheadParser.js +60 -3
- package/build/negativeLookaheadParser.js +70 -11
- package/build/nonEmptyArrayParser.js +72 -13
- package/build/objectParser.d.ts +12 -0
- package/build/objectParser.js +31 -0
- package/build/objectParser.test-d.d.ts +1 -0
- package/build/objectParser.test-d.js +112 -0
- package/build/objectParser.test.d.ts +1 -0
- package/build/objectParser.test.js +55 -0
- package/build/optionalParser.js +69 -10
- package/build/parser.d.ts +4 -0
- package/build/parser.js +3 -1
- package/build/parser.test.js +114 -1
- package/build/parserConsumedSequenceParser.js +66 -7
- package/build/parserContext.d.ts +6 -0
- package/build/parserContext.js +20 -11
- package/build/parserError.d.ts +119 -27
- package/build/parserError.js +16 -8
- package/build/regexpParser.d.ts +2 -0
- package/build/regexpParser.js +101 -0
- package/build/regexpParser.test.d.ts +1 -0
- package/build/regexpParser.test.js +114 -0
- package/build/regularExpression.d.ts +63 -0
- package/build/regularExpression.js +1 -0
- package/build/regularExpressionParser.d.ts +3 -0
- package/build/regularExpressionParser.js +600 -0
- package/build/regularExpressionParser.test.d.ts +1 -0
- package/build/regularExpressionParser.test.js +89 -0
- package/build/separatedArrayParser.js +73 -14
- package/build/separatedNonEmptyArrayParser.js +73 -14
- package/build/sliceBoundedParser.js +62 -5
- package/build/smaliParser.d.ts +7 -7
- package/build/smaliParser.js +185 -268
- package/build/smaliParser.test.js +58 -0
- package/build/stringEscapes.d.ts +5 -0
- package/build/stringEscapes.js +244 -0
- package/build/symbolicExpression.d.ts +29 -0
- package/build/symbolicExpression.js +1 -0
- package/build/symbolicExpressionParser.d.ts +4 -0
- package/build/symbolicExpressionParser.js +123 -0
- package/build/symbolicExpressionParser.test.d.ts +1 -0
- package/build/symbolicExpressionParser.test.js +289 -0
- package/build/terminatedArrayParser.js +113 -38
- package/build/terminatedArrayParser.test.js +4 -2
- package/build/tupleParser.d.ts +7 -15
- package/build/tupleParser.js +1 -0
- package/build/unionParser.d.ts +5 -3
- package/build/unionParser.js +7 -2
- package/build/unionParser.test-d.d.ts +1 -0
- package/build/unionParser.test-d.js +72 -0
- package/build/unionParser.test.js +10 -11
- package/build/zig.d.ts +280 -0
- package/build/zig.js +2 -0
- package/build/zigParser.d.ts +3 -0
- package/build/zigParser.js +1119 -0
- package/build/zigParser.test.d.ts +1 -0
- package/build/zigParser.test.js +1590 -0
- package/build/zigUnparser.d.ts +2 -0
- package/build/zigUnparser.js +460 -0
- package/build/zigUnparser.test.d.ts +1 -0
- package/build/zigUnparser.test.js +24 -0
- package/build/zipParser.js +19 -32
- package/build/zipUnparser.js +19 -7
- package/build/zipUnparser.test.js +1 -1
- package/node_modules-@types/s-expression/index.d.ts +5 -0
- package/package.json +25 -6
- package/src/androidPackageParser.ts +33 -60
- package/src/arbitraryDalvikBytecode.ts +39 -31
- package/src/arbitraryDalvikExecutable.ts +65 -20
- package/src/arbitraryJava.ts +804 -0
- package/src/arbitraryJavaScript.ts +410 -0
- package/src/arbitraryZig.ts +380 -0
- package/src/arrayParser.ts +1 -3
- package/src/backsmali.ts +35 -4
- package/src/bash.ts +127 -0
- package/src/bashParser.test.ts +590 -0
- package/src/bashParser.ts +498 -0
- package/src/dalvikBytecodeParser/addressConversion.ts +496 -0
- package/src/dalvikBytecodeParser/formatParsers.ts +19 -29
- package/src/dalvikBytecodeParser.test-d.ts +310 -0
- package/src/dalvikBytecodeParser.ts +194 -69
- package/src/dalvikBytecodeUnparser/formatUnparsers.ts +27 -26
- package/src/dalvikBytecodeUnparser.test.ts +7 -7
- package/src/dalvikBytecodeUnparser.ts +31 -30
- package/src/dalvikExecutable.test-d.ts +132 -0
- package/src/dalvikExecutable.ts +3 -3
- package/src/dalvikExecutableParser/typedNumbers.ts +11 -0
- package/src/dalvikExecutableParser.test.ts +37 -3
- package/src/dalvikExecutableParser.test.ts.md +163 -2
- package/src/dalvikExecutableParser.test.ts.snap +0 -0
- package/src/dalvikExecutableParser.ts +121 -139
- package/src/dalvikExecutableParserAgainstSmaliParser.test.ts +4 -0
- package/src/dalvikExecutableUnparser/poolScanners.ts +6 -6
- package/src/dalvikExecutableUnparser/sectionUnparsers.ts +38 -14
- package/src/dalvikExecutableUnparser.test.ts +3 -2
- package/src/dalvikExecutableUnparser.ts +4 -4
- package/src/disjunctionParser.test-d.ts +105 -0
- package/src/disjunctionParser.ts +18 -15
- package/src/elementSwitchParser.test-d.ts +74 -0
- package/src/elementSwitchParser.ts +51 -0
- package/src/exactSequenceParser.test-d.ts +43 -0
- package/src/exactSequenceParser.ts +13 -8
- package/src/fetchCid.ts +2 -76
- package/src/index.test.ts +22 -1
- package/src/index.ts +119 -2
- package/src/inputReader.ts +53 -0
- package/src/java.ts +708 -0
- package/src/javaKeyStoreParser.ts +18 -32
- package/src/javaParser.test.ts +1592 -0
- package/src/javaParser.ts +2640 -0
- package/src/javaScript.ts +36 -0
- package/src/javaScriptParser.ts +57 -0
- package/src/javaScriptUnparser.test.ts +37 -0
- package/src/javaScriptUnparser.ts +7 -0
- package/src/javaUnparser.test.ts +37 -0
- package/src/javaUnparser.ts +640 -0
- package/src/jsonParser.ts +6 -27
- package/src/lookaheadParser.ts +2 -6
- package/src/negativeLookaheadParser.ts +1 -3
- package/src/nonEmptyArrayParser.ts +1 -3
- package/src/objectParser.test-d.ts +152 -0
- package/src/objectParser.test.ts +71 -0
- package/src/objectParser.ts +69 -0
- package/src/optionalParser.ts +1 -3
- package/src/parser.test.ts +151 -4
- package/src/parser.ts +11 -1
- package/src/parserConsumedSequenceParser.ts +2 -4
- package/src/parserContext.ts +26 -11
- package/src/parserError.ts +17 -3
- package/src/regexpParser.test.ts +264 -0
- package/src/regexpParser.ts +126 -0
- package/src/regularExpression.ts +24 -0
- package/src/regularExpressionParser.test.ts +102 -0
- package/src/regularExpressionParser.ts +920 -0
- package/src/separatedArrayParser.ts +1 -3
- package/src/separatedNonEmptyArrayParser.ts +1 -3
- package/src/sliceBoundedParser.test.ts +2 -2
- package/src/sliceBoundedParser.ts +15 -19
- package/src/smaliParser.test.ts +64 -0
- package/src/smaliParser.test.ts.md +12 -12
- package/src/smaliParser.test.ts.snap +0 -0
- package/src/smaliParser.ts +246 -534
- package/src/stringEscapes.ts +253 -0
- package/src/symbolicExpression.ts +17 -0
- package/src/symbolicExpressionParser.test.ts +466 -0
- package/src/symbolicExpressionParser.ts +190 -0
- package/src/terminatedArrayParser.test.ts +9 -6
- package/src/terminatedArrayParser.ts +25 -29
- package/src/tupleParser.ts +21 -18
- package/src/unionParser.test-d.ts +105 -0
- package/src/unionParser.test.ts +18 -17
- package/src/unionParser.ts +28 -16
- package/src/zig.ts +411 -0
- package/src/zigParser.test.ts +1693 -0
- package/src/zigParser.ts +1745 -0
- package/src/zigUnparser.test.ts +37 -0
- package/src/zigUnparser.ts +615 -0
- package/src/zipParser.ts +20 -56
- package/src/zipUnparser.test.ts +1 -1
- package/src/zipUnparser.ts +22 -7
- package/tsconfig.json +2 -2
- package/build/exactElementSwitchParser.d.ts +0 -3
- package/src/exactElementSwitchParser.ts +0 -41
|
@@ -1,5 +1,7 @@
|
|
|
1
1
|
import { byteParser, intParser, longParser, shortParser, ubyteParser, uintParser, ushortParser, } from '../dalvikExecutableParser/typeParsers.js';
|
|
2
|
+
import { isoCodeUnit } from '../dalvikExecutableParser/typedNumbers.js';
|
|
2
3
|
import { createElementParser } from '../elementParser.js';
|
|
4
|
+
import { createObjectParser } from '../objectParser.js';
|
|
3
5
|
import { setParserName } from '../parser.js';
|
|
4
6
|
import { promiseCompose } from '../promiseCompose.js';
|
|
5
7
|
import { createTupleParser } from '../tupleParser.js';
|
|
@@ -10,7 +12,7 @@ export const nibblesParser = promiseCompose(createElementParser(), byte => [
|
|
|
10
12
|
]);
|
|
11
13
|
setParserName(nibblesParser, 'nibblesParser');
|
|
12
14
|
export const dalvikBytecodeFormat10tParser = promiseCompose(byteParser, branchOffset => ({
|
|
13
|
-
branchOffset,
|
|
15
|
+
branchOffsetCodeUnit: isoCodeUnit.wrap(branchOffset),
|
|
14
16
|
}));
|
|
15
17
|
export const dalvikBytecodeFormat10xParser = promiseCompose(createElementParser(), () => undefined);
|
|
16
18
|
export const dalvikBytecodeFormat11xParser = promiseCompose(ubyteParser, register0 => ({
|
|
@@ -33,8 +35,8 @@ export const dalvikBytecodeFormat12xParser = promiseCompose(nibblesParser, ([reg
|
|
|
33
35
|
export const dalvikBytecodeFormat20tParser = promiseCompose(createTupleParser([
|
|
34
36
|
ubyteParser,
|
|
35
37
|
shortParser,
|
|
36
|
-
]), ([_zero, branchOffset
|
|
37
|
-
branchOffset,
|
|
38
|
+
]), ([_zero, branchOffset]) => ({
|
|
39
|
+
branchOffsetCodeUnit: isoCodeUnit.wrap(branchOffset),
|
|
38
40
|
}));
|
|
39
41
|
export const createDalvikBytecodeFormat21cParser = ({ isoIndex, }) => promiseCompose(createTupleParser([
|
|
40
42
|
ubyteParser,
|
|
@@ -58,7 +60,7 @@ export const createDalvikBytecodeFormat21tParser = () => promiseCompose(createTu
|
|
|
58
60
|
ubyteParser,
|
|
59
61
|
shortParser,
|
|
60
62
|
]), ([register0, branchOffset,]) => ({
|
|
61
|
-
branchOffset,
|
|
63
|
+
branchOffsetCodeUnit: isoCodeUnit.wrap(branchOffset),
|
|
62
64
|
registers: [
|
|
63
65
|
register0,
|
|
64
66
|
],
|
|
@@ -107,7 +109,7 @@ export const createDalvikBytecodeFormat22tParser = () => promiseCompose(createTu
|
|
|
107
109
|
nibblesParser,
|
|
108
110
|
shortParser,
|
|
109
111
|
]), ([[register0, register1,], branchOffset,]) => ({
|
|
110
|
-
branchOffset,
|
|
112
|
+
branchOffsetCodeUnit: isoCodeUnit.wrap(branchOffset),
|
|
111
113
|
registers: [
|
|
112
114
|
register0,
|
|
113
115
|
register1,
|
|
@@ -134,7 +136,7 @@ export const dalvikBytecodeFormat23xParser = promiseCompose(createTupleParser([
|
|
|
134
136
|
],
|
|
135
137
|
}));
|
|
136
138
|
export const dalvikBytecodeFormat30tParser = promiseCompose(intParser, branchOffset => ({
|
|
137
|
-
branchOffset,
|
|
139
|
+
branchOffsetCodeUnit: isoCodeUnit.wrap(branchOffset),
|
|
138
140
|
}));
|
|
139
141
|
export const dalvikBytecodeFormat31iParser = promiseCompose(createTupleParser([
|
|
140
142
|
ubyteParser,
|
|
@@ -158,7 +160,7 @@ export const dalvikBytecodeFormat31tParser = promiseCompose(createTupleParser([
|
|
|
158
160
|
ubyteParser,
|
|
159
161
|
intParser,
|
|
160
162
|
]), ([register0, branchOffset,]) => ({
|
|
161
|
-
branchOffset,
|
|
163
|
+
branchOffsetCodeUnit: isoCodeUnit.wrap(branchOffset),
|
|
162
164
|
registers: [
|
|
163
165
|
register0,
|
|
164
166
|
],
|
|
@@ -206,13 +208,10 @@ export const dalvikBytecodeFormat51lParser = promiseCompose(createTupleParser([
|
|
|
206
208
|
register0,
|
|
207
209
|
],
|
|
208
210
|
}));
|
|
209
|
-
export const dalvikBytecodeFormat20bcParser =
|
|
210
|
-
ubyteParser,
|
|
211
|
-
ushortParser,
|
|
212
|
-
|
|
213
|
-
kind,
|
|
214
|
-
index,
|
|
215
|
-
}));
|
|
211
|
+
export const dalvikBytecodeFormat20bcParser = createObjectParser({
|
|
212
|
+
kind: ubyteParser,
|
|
213
|
+
index: ushortParser,
|
|
214
|
+
});
|
|
216
215
|
export const dalvikBytecodeFormat22csParser = promiseCompose(createTupleParser([
|
|
217
216
|
nibblesParser,
|
|
218
217
|
ushortParser,
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { type DalvikExecutableField, type DalvikExecutableMethod } from './dalvikExecutable.js';
|
|
2
|
-
import { type IndexIntoFieldIds, type IndexIntoMethodIds, type IndexIntoPrototypeIds, type IndexIntoStringIds, type IndexIntoTypeIds } from './dalvikExecutableParser/typedNumbers.js';
|
|
2
|
+
import { type CodeUnit, type IndexIntoCallSiteIds, type IndexIntoFieldIds, type IndexIntoMethodIds, type IndexIntoPrototypeIds, type IndexIntoStringIds, type IndexIntoTypeIds } from './dalvikExecutableParser/typedNumbers.js';
|
|
3
3
|
import { type Parser } from './parser.js';
|
|
4
4
|
type DalvikBytecodeOperationNoOperation = {
|
|
5
5
|
operation: 'nop';
|
|
@@ -78,37 +78,47 @@ type DalvikBytecodeOperationInvokePolymorphicRange = {
|
|
|
78
78
|
protoIndex: IndexIntoPrototypeIds;
|
|
79
79
|
registers: number[];
|
|
80
80
|
};
|
|
81
|
+
type DalvikBytecodeOperationInvokeCustom = {
|
|
82
|
+
operation: 'invoke-custom';
|
|
83
|
+
callSiteIndex: IndexIntoCallSiteIds;
|
|
84
|
+
registers: number[];
|
|
85
|
+
};
|
|
86
|
+
type DalvikBytecodeOperationInvokeCustomRange = {
|
|
87
|
+
operation: 'invoke-custom/range';
|
|
88
|
+
callSiteIndex: IndexIntoCallSiteIds;
|
|
89
|
+
registers: number[];
|
|
90
|
+
};
|
|
81
91
|
type DalvikBytecodeOperationGoto = {
|
|
82
92
|
operation: 'goto';
|
|
83
|
-
|
|
93
|
+
branchOffsetCodeUnit: CodeUnit;
|
|
84
94
|
};
|
|
85
95
|
type DalvikBytecodeOperationGoto16 = {
|
|
86
96
|
operation: 'goto/16';
|
|
87
|
-
|
|
97
|
+
branchOffsetCodeUnit: CodeUnit;
|
|
88
98
|
};
|
|
89
99
|
type DalvikBytecodeOperationGoto32 = {
|
|
90
100
|
operation: 'goto/32';
|
|
91
|
-
|
|
101
|
+
branchOffsetCodeUnit: CodeUnit;
|
|
92
102
|
};
|
|
93
103
|
type DalvikBytecodeOperationPackedSwitch = {
|
|
94
104
|
operation: 'packed-switch';
|
|
95
|
-
|
|
105
|
+
branchOffsetCodeUnit: CodeUnit;
|
|
96
106
|
registers: number[];
|
|
97
107
|
};
|
|
98
108
|
type DalvikBytecodeOperationPackedSwitchPayload = {
|
|
99
109
|
operation: 'packed-switch-payload';
|
|
100
110
|
value: number;
|
|
101
|
-
|
|
111
|
+
branchOffsetsCodeUnit: CodeUnit[];
|
|
102
112
|
};
|
|
103
113
|
type DalvikBytecodeOperationSparseSwitch = {
|
|
104
114
|
operation: 'sparse-switch';
|
|
105
|
-
|
|
115
|
+
branchOffsetCodeUnit: CodeUnit;
|
|
106
116
|
registers: number[];
|
|
107
117
|
};
|
|
108
118
|
type DalvikBytecodeOperationSparseSwitchPayload = {
|
|
109
119
|
operation: 'sparse-switch-payload';
|
|
110
120
|
keys: number[];
|
|
111
|
-
|
|
121
|
+
branchOffsetsCodeUnit: CodeUnit[];
|
|
112
122
|
};
|
|
113
123
|
type DalvikBytecodeOperationFillArrayDataPayload = {
|
|
114
124
|
operation: 'fill-array-data-payload';
|
|
@@ -768,6 +778,11 @@ declare const dalvikBytecodeOperationDivideFloatParser: Parser<{
|
|
|
768
778
|
registers: number[];
|
|
769
779
|
}, Uint8Array<ArrayBufferLike>>;
|
|
770
780
|
type DalvikBytecodeOperationDivideFloat = Awaited<ReturnType<typeof dalvikBytecodeOperationDivideFloatParser>>;
|
|
781
|
+
declare const dalvikBytecodeOperationRemainderFloatParser: Parser<{
|
|
782
|
+
operation: "rem-float";
|
|
783
|
+
registers: number[];
|
|
784
|
+
}, Uint8Array<ArrayBufferLike>>;
|
|
785
|
+
type DalvikBytecodeOperationRemainderFloat = Awaited<ReturnType<typeof dalvikBytecodeOperationRemainderFloatParser>>;
|
|
771
786
|
declare const dalvikBytecodeOperationAddDoubleParser: Parser<{
|
|
772
787
|
operation: "add-double";
|
|
773
788
|
registers: number[];
|
|
@@ -793,7 +808,7 @@ declare const dalvikBytecodeOperationRemainderDoubleParser: Parser<{
|
|
|
793
808
|
registers: number[];
|
|
794
809
|
}, Uint8Array<ArrayBufferLike>>;
|
|
795
810
|
type DalvikBytecodeOperationRemainderDouble = Awaited<ReturnType<typeof dalvikBytecodeOperationRemainderDoubleParser>>;
|
|
796
|
-
type DalvikBytecodeOperationBinaryOperation = DalvikBytecodeOperationAddInt | DalvikBytecodeOperationSubtractInt | DalvikBytecodeOperationMultiplyInt | DalvikBytecodeOperationDivideInt | DalvikBytecodeOperationRemainderInt | DalvikBytecodeOperationAndInt | DalvikBytecodeOperationOrInt | DalvikBytecodeOperationXorInt | DalvikBytecodeOperationShiftLeftInt | DalvikBytecodeOperationShiftRightInt | DalvikBytecodeOperationUnsignedShiftRightInt | DalvikBytecodeOperationAddLong | DalvikBytecodeOperationSubtractLong | DalvikBytecodeOperationMultiplyLong | DalvikBytecodeOperationDivideLong | DalvikBytecodeOperationRemainderLong | DalvikBytecodeOperationAndLong | DalvikBytecodeOperationOrLong | DalvikBytecodeOperationXorLong | DalvikBytecodeOperationShiftLeftLong | DalvikBytecodeOperationShiftRightLong | DalvikBytecodeOperationUnsignedShiftRightLong | DalvikBytecodeOperationAddFloat | DalvikBytecodeOperationSubtractFloat | DalvikBytecodeOperationMultiplyFloat | DalvikBytecodeOperationDivideFloat | DalvikBytecodeOperationAddDouble | DalvikBytecodeOperationSubtractDouble | DalvikBytecodeOperationMultiplyDouble | DalvikBytecodeOperationDivideDouble | DalvikBytecodeOperationRemainderDouble;
|
|
811
|
+
type DalvikBytecodeOperationBinaryOperation = DalvikBytecodeOperationAddInt | DalvikBytecodeOperationSubtractInt | DalvikBytecodeOperationMultiplyInt | DalvikBytecodeOperationDivideInt | DalvikBytecodeOperationRemainderInt | DalvikBytecodeOperationAndInt | DalvikBytecodeOperationOrInt | DalvikBytecodeOperationXorInt | DalvikBytecodeOperationShiftLeftInt | DalvikBytecodeOperationShiftRightInt | DalvikBytecodeOperationUnsignedShiftRightInt | DalvikBytecodeOperationAddLong | DalvikBytecodeOperationSubtractLong | DalvikBytecodeOperationMultiplyLong | DalvikBytecodeOperationDivideLong | DalvikBytecodeOperationRemainderLong | DalvikBytecodeOperationAndLong | DalvikBytecodeOperationOrLong | DalvikBytecodeOperationXorLong | DalvikBytecodeOperationShiftLeftLong | DalvikBytecodeOperationShiftRightLong | DalvikBytecodeOperationUnsignedShiftRightLong | DalvikBytecodeOperationAddFloat | DalvikBytecodeOperationSubtractFloat | DalvikBytecodeOperationMultiplyFloat | DalvikBytecodeOperationDivideFloat | DalvikBytecodeOperationRemainderFloat | DalvikBytecodeOperationAddDouble | DalvikBytecodeOperationSubtractDouble | DalvikBytecodeOperationMultiplyDouble | DalvikBytecodeOperationDivideDouble | DalvikBytecodeOperationRemainderDouble;
|
|
797
812
|
declare const dalvikBytecodeOperationNegateIntParser: Parser<{
|
|
798
813
|
operation: "neg-int";
|
|
799
814
|
registers: number[];
|
|
@@ -903,74 +918,74 @@ type DalvikBytecodeOperationUnaryOperation = DalvikBytecodeOperationNegateInt |
|
|
|
903
918
|
declare const dalvikBytecodeIfEqualParser: Parser<{
|
|
904
919
|
operation: "if-eq";
|
|
905
920
|
registers: number[];
|
|
906
|
-
|
|
921
|
+
branchOffsetCodeUnit: CodeUnit;
|
|
907
922
|
}, Uint8Array<ArrayBufferLike>>;
|
|
908
923
|
type DalvikBytecodeOperationIfEqual = Awaited<ReturnType<typeof dalvikBytecodeIfEqualParser>>;
|
|
909
924
|
declare const dalvikBytecodeIfNotEqualParser: Parser<{
|
|
910
925
|
operation: "if-ne";
|
|
911
926
|
registers: number[];
|
|
912
|
-
|
|
927
|
+
branchOffsetCodeUnit: CodeUnit;
|
|
913
928
|
}, Uint8Array<ArrayBufferLike>>;
|
|
914
929
|
type DalvikBytecodeOperationIfNotEqual = Awaited<ReturnType<typeof dalvikBytecodeIfNotEqualParser>>;
|
|
915
930
|
declare const dalvikBytecodeIfLessThanParser: Parser<{
|
|
916
931
|
operation: "if-lt";
|
|
917
932
|
registers: number[];
|
|
918
|
-
|
|
933
|
+
branchOffsetCodeUnit: CodeUnit;
|
|
919
934
|
}, Uint8Array<ArrayBufferLike>>;
|
|
920
935
|
type DalvikBytecodeOperationIfLessThan = Awaited<ReturnType<typeof dalvikBytecodeIfLessThanParser>>;
|
|
921
936
|
declare const dalvikBytecodeIfGreaterThanOrEqualToParser: Parser<{
|
|
922
937
|
operation: "if-ge";
|
|
923
938
|
registers: number[];
|
|
924
|
-
|
|
939
|
+
branchOffsetCodeUnit: CodeUnit;
|
|
925
940
|
}, Uint8Array<ArrayBufferLike>>;
|
|
926
941
|
type DalvikBytecodeOperationIfGreaterThanOrEqualTo = Awaited<ReturnType<typeof dalvikBytecodeIfGreaterThanOrEqualToParser>>;
|
|
927
942
|
declare const dalvikBytecodeIfGreaterThanParser: Parser<{
|
|
928
943
|
operation: "if-gt";
|
|
929
944
|
registers: number[];
|
|
930
|
-
|
|
945
|
+
branchOffsetCodeUnit: CodeUnit;
|
|
931
946
|
}, Uint8Array<ArrayBufferLike>>;
|
|
932
947
|
type DalvikBytecodeOperationIfGreaterThan = Awaited<ReturnType<typeof dalvikBytecodeIfGreaterThanParser>>;
|
|
933
948
|
declare const dalvikBytecodeIfLessThanOrEqualToParser: Parser<{
|
|
934
949
|
operation: "if-le";
|
|
935
950
|
registers: number[];
|
|
936
|
-
|
|
951
|
+
branchOffsetCodeUnit: CodeUnit;
|
|
937
952
|
}, Uint8Array<ArrayBufferLike>>;
|
|
938
953
|
type DalvikBytecodeOperationIfLessThanOrEqualTo = Awaited<ReturnType<typeof dalvikBytecodeIfLessThanOrEqualToParser>>;
|
|
939
954
|
type DalvikBytecodeOperationIfTest = DalvikBytecodeOperationIfEqual | DalvikBytecodeOperationIfNotEqual | DalvikBytecodeOperationIfLessThan | DalvikBytecodeOperationIfGreaterThanOrEqualTo | DalvikBytecodeOperationIfGreaterThan | DalvikBytecodeOperationIfLessThanOrEqualTo;
|
|
940
955
|
declare const dalvikBytecodeIfEqualZeroParser: Parser<{
|
|
941
956
|
operation: "if-eqz";
|
|
942
957
|
registers: number[];
|
|
943
|
-
|
|
958
|
+
branchOffsetCodeUnit: CodeUnit;
|
|
944
959
|
}, Uint8Array<ArrayBufferLike>>;
|
|
945
960
|
type DalvikBytecodeOperationIfEqualZero = Awaited<ReturnType<typeof dalvikBytecodeIfEqualZeroParser>>;
|
|
946
961
|
declare const dalvikBytecodeIfNotEqualZeroParser: Parser<{
|
|
947
962
|
operation: "if-nez";
|
|
948
963
|
registers: number[];
|
|
949
|
-
|
|
964
|
+
branchOffsetCodeUnit: CodeUnit;
|
|
950
965
|
}, Uint8Array<ArrayBufferLike>>;
|
|
951
966
|
type DalvikBytecodeOperationIfNotEqualZero = Awaited<ReturnType<typeof dalvikBytecodeIfNotEqualZeroParser>>;
|
|
952
967
|
declare const dalvikBytecodeIfLessThanZeroParser: Parser<{
|
|
953
968
|
operation: "if-ltz";
|
|
954
969
|
registers: number[];
|
|
955
|
-
|
|
970
|
+
branchOffsetCodeUnit: CodeUnit;
|
|
956
971
|
}, Uint8Array<ArrayBufferLike>>;
|
|
957
972
|
type DalvikBytecodeOperationIfLessThanZero = Awaited<ReturnType<typeof dalvikBytecodeIfLessThanZeroParser>>;
|
|
958
973
|
declare const dalvikBytecodeIfGreaterThanOrEqualToZeroParser: Parser<{
|
|
959
974
|
operation: "if-gez";
|
|
960
975
|
registers: number[];
|
|
961
|
-
|
|
976
|
+
branchOffsetCodeUnit: CodeUnit;
|
|
962
977
|
}, Uint8Array<ArrayBufferLike>>;
|
|
963
978
|
type DalvikBytecodeOperationIfGreaterThanOrEqualToZero = Awaited<ReturnType<typeof dalvikBytecodeIfGreaterThanOrEqualToZeroParser>>;
|
|
964
979
|
declare const dalvikBytecodeIfGreaterThanZeroParser: Parser<{
|
|
965
980
|
operation: "if-gtz";
|
|
966
981
|
registers: number[];
|
|
967
|
-
|
|
982
|
+
branchOffsetCodeUnit: CodeUnit;
|
|
968
983
|
}, Uint8Array<ArrayBufferLike>>;
|
|
969
984
|
type DalvikBytecodeOperationIfGreaterThanZero = Awaited<ReturnType<typeof dalvikBytecodeIfGreaterThanZeroParser>>;
|
|
970
985
|
declare const dalvikBytecodeIfLessThanOrEqualToZeroParser: Parser<{
|
|
971
986
|
operation: "if-lez";
|
|
972
987
|
registers: number[];
|
|
973
|
-
|
|
988
|
+
branchOffsetCodeUnit: CodeUnit;
|
|
974
989
|
}, Uint8Array<ArrayBufferLike>>;
|
|
975
990
|
type DalvikBytecodeOperationIfLessThanOrEqualToZero = Awaited<ReturnType<typeof dalvikBytecodeIfLessThanOrEqualToZeroParser>>;
|
|
976
991
|
type DalvikBytecodeOperationIfTestZero = DalvikBytecodeOperationIfEqualZero | DalvikBytecodeOperationIfNotEqualZero | DalvikBytecodeOperationIfLessThanZero | DalvikBytecodeOperationIfGreaterThanOrEqualToZero | DalvikBytecodeOperationIfGreaterThanZero | DalvikBytecodeOperationIfLessThanOrEqualToZero;
|
|
@@ -989,6 +1004,11 @@ type DalvikBytecodeOperationConstMethodHandle = {
|
|
|
989
1004
|
methodIndex: IndexIntoMethodIds;
|
|
990
1005
|
registers: number[];
|
|
991
1006
|
};
|
|
1007
|
+
type DalvikBytecodeOperationConstMethodType = {
|
|
1008
|
+
operation: 'const-method-type';
|
|
1009
|
+
protoIndex: IndexIntoPrototypeIds;
|
|
1010
|
+
registers: number[];
|
|
1011
|
+
};
|
|
992
1012
|
type DalvikBytecodeOperationNewInstance = {
|
|
993
1013
|
operation: 'new-instance';
|
|
994
1014
|
typeIndex: IndexIntoTypeIds;
|
|
@@ -1011,7 +1031,7 @@ type DalvikBytecodeOperationFilledNewArrayRange = {
|
|
|
1011
1031
|
};
|
|
1012
1032
|
type DalvikBytecodeOperationFillArrayData = {
|
|
1013
1033
|
operation: 'fill-array-data';
|
|
1014
|
-
|
|
1034
|
+
branchOffsetCodeUnit: CodeUnit;
|
|
1015
1035
|
registers: number[];
|
|
1016
1036
|
};
|
|
1017
1037
|
type DalvikBytecodeOperationCheckCast = {
|
|
@@ -1088,6 +1108,14 @@ type DalvikBytecodeOperationMoveWide16 = {
|
|
|
1088
1108
|
operation: 'move-wide/16';
|
|
1089
1109
|
registers: number[];
|
|
1090
1110
|
};
|
|
1111
|
+
type DalvikBytecodeOperationMove16 = {
|
|
1112
|
+
operation: 'move/16';
|
|
1113
|
+
registers: number[];
|
|
1114
|
+
};
|
|
1115
|
+
type DalvikBytecodeOperationMoveObject16 = {
|
|
1116
|
+
operation: 'move-object/16';
|
|
1117
|
+
registers: number[];
|
|
1118
|
+
};
|
|
1091
1119
|
declare const dalvikBytecodeOperationReturnParser: Parser<{
|
|
1092
1120
|
operation: "return";
|
|
1093
1121
|
registers: number[];
|
|
@@ -1174,14 +1202,14 @@ declare const dalvikBytecodeOperationCompareLongParser: Parser<{
|
|
|
1174
1202
|
}, Uint8Array<ArrayBufferLike>>;
|
|
1175
1203
|
type DalvikBytecodeOperationCompareLong = Awaited<ReturnType<typeof dalvikBytecodeOperationCompareLongParser>>;
|
|
1176
1204
|
type DalvikBytecodeOperationCompare = DalvikBytecodeOperationCompareFloatWithLessThanBias | DalvikBytecodeOperationCompareFloatWithGreaterThanBias | DalvikBytecodeOperationCompareDoubleWithLessThanBias | DalvikBytecodeOperationCompareDoubleWithGreaterThanBias | DalvikBytecodeOperationCompareLong;
|
|
1177
|
-
export type
|
|
1178
|
-
export declare const
|
|
1179
|
-
getRegisters(operation:
|
|
1205
|
+
export type RawDalvikBytecodeOperation = DalvikBytecodeOperationNoOperation | DalvikBytecodeOperationIfTest | DalvikBytecodeOperationIfTestZero | DalvikBytecodeOperationBinaryOperation | DalvikBytecodeOperationBinaryOperationLiteral8 | DalvikBytecodeOperationBinaryOperationLiteral16 | DalvikBytecodeOperationBinaryOperationInPlace | DalvikBytecodeOperationUnaryOperation | DalvikBytecodeOperationGoto | DalvikBytecodeOperationGoto16 | DalvikBytecodeOperationGoto32 | DalvikBytecodeOperationPackedSwitch | DalvikBytecodeOperationPackedSwitchPayload | DalvikBytecodeOperationSparseSwitch | DalvikBytecodeOperationSparseSwitchPayload | DalvikBytecodeOperationNewArray | DalvikBytecodeOperationFilledNewArray | DalvikBytecodeOperationFilledNewArrayRange | DalvikBytecodeOperationFillArrayDataPayload | DalvikBytecodeOperationMoveResult1 | DalvikBytecodeOperationMove | DalvikBytecodeOperationMoveWide | DalvikBytecodeOperationMoveObject | DalvikBytecodeOperationMoveFrom16 | DalvikBytecodeOperationMove16 | DalvikBytecodeOperationMoveWideFrom16 | DalvikBytecodeOperationMoveObjectFrom16 | DalvikBytecodeOperationMoveWide16 | DalvikBytecodeOperationMoveObject16 | DalvikBytecodeOperationInvoke | DalvikBytecodeOperationInvokeRange | DalvikBytecodeOperationInvokePolymorphic | DalvikBytecodeOperationInvokePolymorphicRange | DalvikBytecodeOperationInvokeCustom | DalvikBytecodeOperationInvokeCustomRange | DalvikBytecodeOperationNewInstance | DalvikBytecodeOperationFillArrayData | DalvikBytecodeOperationCheckCast | DalvikBytecodeOperationInstanceOf | DalvikBytecodeOperationArrayLength | DalvikBytecodeOperationArrayElement | DalvikBytecodeOperationInstanceField | DalvikBytecodeOperationStaticField | DalvikBytecodeOperationConst4 | DalvikBytecodeOperationConst16 | DalvikBytecodeOperationConstHigh16 | DalvikBytecodeOperationConstWide16 | DalvikBytecodeOperationConstWide32 | DalvikBytecodeOperationConstWide | DalvikBytecodeOperationConstWideHigh16 | DalvikBytecodeOperationConst | DalvikBytecodeOperationConstString | DalvikBytecodeOperationConstStringJumbo | DalvikBytecodeOperationConstMethodHandle | DalvikBytecodeOperationConstMethodType | DalvikBytecodeOperationConstClass | DalvikBytecodeOperationMonitorEnter | DalvikBytecodeOperationMonitorExit | DalvikBytecodeOperationThrow | DalvikBytecodeOperationCompare | DalvikBytecodeOperationReturnVoid | DalvikBytecodeOperationReturn1;
|
|
1206
|
+
export declare const rawDalvikBytecodeOperationCompanion: {
|
|
1207
|
+
getRegisters(operation: RawDalvikBytecodeOperation): number[];
|
|
1180
1208
|
};
|
|
1181
|
-
export type
|
|
1182
|
-
export declare const
|
|
1183
|
-
type
|
|
1184
|
-
stringIndex:
|
|
1209
|
+
export type RawDalvikBytecode = RawDalvikBytecodeOperation[];
|
|
1210
|
+
export declare const createRawDalvikBytecodeParser: (size: number) => Parser<RawDalvikBytecode, Uint8Array>;
|
|
1211
|
+
export type IndexResolvedOperation<T> = T extends {
|
|
1212
|
+
stringIndex: IndexIntoStringIds;
|
|
1185
1213
|
} ? Omit<T, 'stringIndex'> & {
|
|
1186
1214
|
string: string;
|
|
1187
1215
|
} : T extends {
|
|
@@ -1197,11 +1225,12 @@ type ResolvedDalvikBytecodeOperation<T extends DalvikBytecodeOperation> = T exte
|
|
|
1197
1225
|
} ? Omit<T, 'fieldIndex'> & {
|
|
1198
1226
|
field: DalvikExecutableField;
|
|
1199
1227
|
} : T;
|
|
1200
|
-
|
|
1228
|
+
type IndexResolvedRawDalvikBytecodeOperation<T extends RawDalvikBytecodeOperation> = IndexResolvedOperation<T>;
|
|
1229
|
+
export type RawDalvikBytecodeOperationResolvers = {
|
|
1201
1230
|
resolveIndexIntoStringIds: (index: IndexIntoStringIds) => string;
|
|
1202
1231
|
resolveIndexIntoTypeIds: (index: IndexIntoTypeIds) => string;
|
|
1203
1232
|
resolveIndexIntoMethodIds: (index: IndexIntoMethodIds) => DalvikExecutableMethod;
|
|
1204
1233
|
resolveIndexIntoFieldIds: (index: IndexIntoFieldIds) => DalvikExecutableField;
|
|
1205
1234
|
};
|
|
1206
|
-
export declare function
|
|
1235
|
+
export declare function resolveRawDalvikBytecodeOperationIndices<T extends RawDalvikBytecodeOperation>(operation: T, { resolveIndexIntoStringIds, resolveIndexIntoTypeIds, resolveIndexIntoMethodIds, resolveIndexIntoFieldIds, }: RawDalvikBytecodeOperationResolvers): IndexResolvedRawDalvikBytecodeOperation<T>;
|
|
1207
1236
|
export {};
|
|
@@ -1,15 +1,16 @@
|
|
|
1
1
|
import { createArrayParser } from './arrayParser.js';
|
|
2
2
|
import { createDalvikBytecodeFormat21cParser, createDalvikBytecodeFormat21sParser, createDalvikBytecodeFormat21tParser, createDalvikBytecodeFormat22bParser, createDalvikBytecodeFormat22cParser, createDalvikBytecodeFormat22sParser, createDalvikBytecodeFormat22tParser, dalvikBytecodeFormat23xParser, createDalvikBytecodeFormat31cParser, dalvikBytecodeFormat31iParser, dalvikBytecodeFormat31tParser, createDalvikBytecodeFormat35cParser, createDalvikBytecodeFormat3rcParser, dalvikBytecodeFormat10tParser, dalvikBytecodeFormat10xParser, dalvikBytecodeFormat11xParser, dalvikBytecodeFormat11nParser, dalvikBytecodeFormat12xParser, dalvikBytecodeFormat20tParser, dalvikBytecodeFormat22xParser, dalvikBytecodeFormat32xParser, dalvikBytecodeFormat30tParser, dalvikBytecodeFormat51lParser, createDalvikBytecodeFormat45ccParser, createDalvikBytecodeFormat4rccParser, } from './dalvikBytecodeParser/formatParsers.js';
|
|
3
3
|
import { ubyteParser, ushortParser, intParser, uintParser, createExactUshortParser, } from './dalvikExecutableParser/typeParsers.js';
|
|
4
|
-
import { isoIndexIntoFieldIds, isoIndexIntoMethodIds, isoIndexIntoPrototypeIds, isoIndexIntoStringIds, isoIndexIntoTypeIds, } from './dalvikExecutableParser/typedNumbers.js';
|
|
4
|
+
import { isoCodeUnit, isoIndexIntoCallSiteIds, isoIndexIntoFieldIds, isoIndexIntoMethodIds, isoIndexIntoPrototypeIds, isoIndexIntoStringIds, isoIndexIntoTypeIds, } from './dalvikExecutableParser/typedNumbers.js';
|
|
5
5
|
import { createExactElementParser } from './exactElementParser.js';
|
|
6
|
-
import { createElementSwitchParser } from './
|
|
6
|
+
import { createElementSwitchParser } from './elementSwitchParser.js';
|
|
7
7
|
import { setParserName } from './parser.js';
|
|
8
8
|
import { promiseCompose } from './promiseCompose.js';
|
|
9
9
|
import { createSliceBoundedParser } from './sliceBoundedParser.js';
|
|
10
10
|
import { createDisjunctionParser } from './disjunctionParser.js';
|
|
11
11
|
import { parserCreatorCompose } from './parserCreatorCompose.js';
|
|
12
12
|
import { createQuantifierParser } from './quantifierParser.js';
|
|
13
|
+
import { createObjectParser } from './objectParser.js';
|
|
13
14
|
import { createTupleParser } from './tupleParser.js';
|
|
14
15
|
// https://source.android.com/docs/core/runtime/dalvik-bytecode
|
|
15
16
|
const dalvikBytecodeOperationUnusedParser = async (parserContext) => {
|
|
@@ -21,10 +22,10 @@ const dalvikBytecodeOperationUnusedParser = async (parserContext) => {
|
|
|
21
22
|
parserContext.skip(1);
|
|
22
23
|
};
|
|
23
24
|
setParserName(dalvikBytecodeOperationUnusedParser, 'dalvikBytecodeOperationUnusedParser');
|
|
24
|
-
const dalvikBytecodeOperationNoOperationParser =
|
|
25
|
-
()
|
|
25
|
+
const dalvikBytecodeOperationNoOperationParser = createObjectParser({
|
|
26
|
+
_opcode: createExactUshortParser(0x00_00), // nop is 2 bytes: 0x00 0x00
|
|
26
27
|
operation: 'nop',
|
|
27
|
-
})
|
|
28
|
+
});
|
|
28
29
|
setParserName(dalvikBytecodeOperationNoOperationParser, 'dalvikBytecodeOperationNoOperationParser');
|
|
29
30
|
const createDalvikBytecodeOperationInvoke = (operation, opcode) => promiseCompose(createTupleParser([
|
|
30
31
|
createExactElementParser(opcode),
|
|
@@ -98,33 +99,55 @@ const dalvikBytecodeOperationInvokePolymorphicRangeParser = promiseCompose(creat
|
|
|
98
99
|
registers,
|
|
99
100
|
}));
|
|
100
101
|
setParserName(dalvikBytecodeOperationInvokePolymorphicRangeParser, 'dalvikBytecodeOperationInvokePolymorphicRangeParser');
|
|
102
|
+
const dalvikBytecodeOperationInvokeCustomParser = promiseCompose(createTupleParser([
|
|
103
|
+
createExactElementParser(0xFC),
|
|
104
|
+
createDalvikBytecodeFormat35cParser({
|
|
105
|
+
isoIndex: isoIndexIntoCallSiteIds,
|
|
106
|
+
}),
|
|
107
|
+
]), ([_opcode, { index, registers },]) => ({
|
|
108
|
+
operation: 'invoke-custom',
|
|
109
|
+
callSiteIndex: index,
|
|
110
|
+
registers,
|
|
111
|
+
}));
|
|
112
|
+
setParserName(dalvikBytecodeOperationInvokeCustomParser, 'dalvikBytecodeOperationInvokeCustomParser');
|
|
113
|
+
const dalvikBytecodeOperationInvokeCustomRangeParser = promiseCompose(createTupleParser([
|
|
114
|
+
createExactElementParser(0xFD),
|
|
115
|
+
createDalvikBytecodeFormat3rcParser({
|
|
116
|
+
isoIndex: isoIndexIntoCallSiteIds,
|
|
117
|
+
}),
|
|
118
|
+
]), ([_opcode, { index, registers },]) => ({
|
|
119
|
+
operation: 'invoke-custom/range',
|
|
120
|
+
callSiteIndex: index,
|
|
121
|
+
registers,
|
|
122
|
+
}));
|
|
123
|
+
setParserName(dalvikBytecodeOperationInvokeCustomRangeParser, 'dalvikBytecodeOperationInvokeCustomRangeParser');
|
|
101
124
|
const dalvikBytecodeOperationGotoParser = promiseCompose(createTupleParser([
|
|
102
125
|
createExactElementParser(0x28),
|
|
103
126
|
dalvikBytecodeFormat10tParser,
|
|
104
|
-
]), ([_opcode, {
|
|
127
|
+
]), ([_opcode, { branchOffsetCodeUnit }]) => ({
|
|
105
128
|
operation: 'goto',
|
|
106
|
-
|
|
129
|
+
branchOffsetCodeUnit,
|
|
107
130
|
}));
|
|
108
131
|
const dalvikBytecodeOperationGoto16Parser = promiseCompose(createTupleParser([
|
|
109
132
|
createExactElementParser(0x29),
|
|
110
133
|
dalvikBytecodeFormat20tParser,
|
|
111
|
-
]), ([_opcode, {
|
|
134
|
+
]), ([_opcode, { branchOffsetCodeUnit }]) => ({
|
|
112
135
|
operation: 'goto/16',
|
|
113
|
-
|
|
136
|
+
branchOffsetCodeUnit,
|
|
114
137
|
}));
|
|
115
138
|
const dalvikBytecodeOperationGoto32Parser = promiseCompose(createTupleParser([
|
|
116
139
|
createExactElementParser(0x2A),
|
|
117
140
|
dalvikBytecodeFormat30tParser,
|
|
118
|
-
]), ([_opcode, {
|
|
141
|
+
]), ([_opcode, { branchOffsetCodeUnit }]) => ({
|
|
119
142
|
operation: 'goto/32',
|
|
120
|
-
|
|
143
|
+
branchOffsetCodeUnit,
|
|
121
144
|
}));
|
|
122
145
|
const dalvikBytecodeOperationPackedSwitchParser = promiseCompose(createTupleParser([
|
|
123
146
|
createExactElementParser(0x2B),
|
|
124
147
|
dalvikBytecodeFormat31tParser,
|
|
125
|
-
]), ([_opcode, {
|
|
148
|
+
]), ([_opcode, { branchOffsetCodeUnit, registers }]) => ({
|
|
126
149
|
operation: 'packed-switch',
|
|
127
|
-
|
|
150
|
+
branchOffsetCodeUnit,
|
|
128
151
|
registers,
|
|
129
152
|
}));
|
|
130
153
|
setParserName(dalvikBytecodeOperationPackedSwitchParser, 'dalvikBytecodeOperationPackedSwitchParser');
|
|
@@ -138,15 +161,15 @@ const dalvikBytecodeOperationPackedSwitchPayloadParser = parserCreatorCompose(()
|
|
|
138
161
|
})), ({ size, value }) => promiseCompose(createQuantifierParser(intParser, size), branchOffsets => ({
|
|
139
162
|
operation: 'packed-switch-payload',
|
|
140
163
|
value,
|
|
141
|
-
branchOffsets,
|
|
164
|
+
branchOffsetsCodeUnit: branchOffsets.map(isoCodeUnit.wrap),
|
|
142
165
|
})))();
|
|
143
166
|
setParserName(dalvikBytecodeOperationPackedSwitchPayloadParser, 'dalvikBytecodeOperationPackedSwitchPayloadParser');
|
|
144
167
|
const dalvikBytecodeOperationSparseSwitchParser = promiseCompose(createTupleParser([
|
|
145
168
|
createExactElementParser(0x2C),
|
|
146
169
|
dalvikBytecodeFormat31tParser,
|
|
147
|
-
]), ([_opcode, {
|
|
170
|
+
]), ([_opcode, { branchOffsetCodeUnit, registers }]) => ({
|
|
148
171
|
operation: 'sparse-switch',
|
|
149
|
-
|
|
172
|
+
branchOffsetCodeUnit,
|
|
150
173
|
registers,
|
|
151
174
|
}));
|
|
152
175
|
setParserName(dalvikBytecodeOperationSparseSwitchParser, 'dalvikBytecodeOperationSparseSwitchParser');
|
|
@@ -161,7 +184,7 @@ const dalvikBytecodeOperationSparseSwitchPayloadParser = parserCreatorCompose(()
|
|
|
161
184
|
]), ([keys, branchOffsets]) => ({
|
|
162
185
|
operation: 'sparse-switch-payload',
|
|
163
186
|
keys,
|
|
164
|
-
branchOffsets,
|
|
187
|
+
branchOffsetsCodeUnit: branchOffsets.map(isoCodeUnit.wrap),
|
|
165
188
|
})))();
|
|
166
189
|
setParserName(dalvikBytecodeOperationSparseSwitchPayloadParser, 'dalvikBytecodeOperationSparseSwitchPayloadParser');
|
|
167
190
|
const dalvikBytecodeOperationFillArrayDataPayloadParser = parserCreatorCompose(() => promiseCompose(createTupleParser([
|
|
@@ -482,6 +505,7 @@ const dalvikBytecodeOperationAddFloatParser = createDalvikBytecodeOperationBinar
|
|
|
482
505
|
const dalvikBytecodeOperationSubtractFloatParser = createDalvikBytecodeOperationBinaryOperation('sub-float', 0xA7);
|
|
483
506
|
const dalvikBytecodeOperationMultiplyFloatParser = createDalvikBytecodeOperationBinaryOperation('mul-float', 0xA8);
|
|
484
507
|
const dalvikBytecodeOperationDivideFloatParser = createDalvikBytecodeOperationBinaryOperation('div-float', 0xA9);
|
|
508
|
+
const dalvikBytecodeOperationRemainderFloatParser = createDalvikBytecodeOperationBinaryOperation('rem-float', 0xAA);
|
|
485
509
|
const dalvikBytecodeOperationAddDoubleParser = createDalvikBytecodeOperationBinaryOperation('add-double', 0xAB);
|
|
486
510
|
const dalvikBytecodeOperationSubtractDoubleParser = createDalvikBytecodeOperationBinaryOperation('sub-double', 0xAC);
|
|
487
511
|
const dalvikBytecodeOperationMultiplyDoubleParser = createDalvikBytecodeOperationBinaryOperation('mul-double', 0xAD);
|
|
@@ -514,6 +538,7 @@ const dalvikBytecodeOperationBinaryOperationParser = createDisjunctionParser([
|
|
|
514
538
|
dalvikBytecodeOperationSubtractFloatParser,
|
|
515
539
|
dalvikBytecodeOperationMultiplyFloatParser,
|
|
516
540
|
dalvikBytecodeOperationDivideFloatParser,
|
|
541
|
+
dalvikBytecodeOperationRemainderFloatParser,
|
|
517
542
|
dalvikBytecodeOperationAddDoubleParser,
|
|
518
543
|
dalvikBytecodeOperationSubtractDoubleParser,
|
|
519
544
|
dalvikBytecodeOperationMultiplyDoubleParser,
|
|
@@ -577,19 +602,19 @@ setParserName(dalvikBytecodeOperationUnaryOperationParser, 'dalvikBytecodeOperat
|
|
|
577
602
|
const createDalvikBytecodeOperationIfTestCommutative = (operation, opcode) => promiseCompose(createTupleParser([
|
|
578
603
|
createExactElementParser(opcode),
|
|
579
604
|
createDalvikBytecodeFormat22tParser(),
|
|
580
|
-
]), ([_opcode, { registers,
|
|
605
|
+
]), ([_opcode, { registers, branchOffsetCodeUnit }]) => ({
|
|
581
606
|
operation,
|
|
582
607
|
registers: registers.sort((a, b) => a - b),
|
|
583
|
-
|
|
608
|
+
branchOffsetCodeUnit,
|
|
584
609
|
}));
|
|
585
610
|
// For non-commutative comparison operations (if-lt, if-ge, if-gt, if-le), reverse to get correct semantic order
|
|
586
611
|
const createDalvikBytecodeOperationIfTest = (operation, opcode) => promiseCompose(createTupleParser([
|
|
587
612
|
createExactElementParser(opcode),
|
|
588
613
|
createDalvikBytecodeFormat22tParser(),
|
|
589
|
-
]), ([_opcode, { registers,
|
|
614
|
+
]), ([_opcode, { registers, branchOffsetCodeUnit }]) => ({
|
|
590
615
|
operation,
|
|
591
616
|
registers: registers.reverse(),
|
|
592
|
-
|
|
617
|
+
branchOffsetCodeUnit,
|
|
593
618
|
}));
|
|
594
619
|
const dalvikBytecodeIfEqualParser = createDalvikBytecodeOperationIfTestCommutative('if-eq', 0x32);
|
|
595
620
|
const dalvikBytecodeIfNotEqualParser = createDalvikBytecodeOperationIfTestCommutative('if-ne', 0x33);
|
|
@@ -609,10 +634,10 @@ setParserName(dalvikBytecodeOperationIfTestParser, 'dalvikBytecodeOperationIfTes
|
|
|
609
634
|
const createDalvikBytecodeOperationIfTestZero = (operation, opcode) => promiseCompose(createTupleParser([
|
|
610
635
|
createExactElementParser(opcode),
|
|
611
636
|
createDalvikBytecodeFormat21tParser(),
|
|
612
|
-
]), ([_opcode, { registers,
|
|
637
|
+
]), ([_opcode, { registers, branchOffsetCodeUnit }]) => ({
|
|
613
638
|
operation,
|
|
614
639
|
registers,
|
|
615
|
-
|
|
640
|
+
branchOffsetCodeUnit,
|
|
616
641
|
}));
|
|
617
642
|
const dalvikBytecodeIfEqualZeroParser = createDalvikBytecodeOperationIfTestZero('if-eqz', 0x38);
|
|
618
643
|
const dalvikBytecodeIfNotEqualZeroParser = createDalvikBytecodeOperationIfTestZero('if-nez', 0x39);
|
|
@@ -662,6 +687,17 @@ const dalvikBytecodeOperationConstMethodHandleParser = promiseCompose(createTupl
|
|
|
662
687
|
registers,
|
|
663
688
|
}));
|
|
664
689
|
setParserName(dalvikBytecodeOperationConstMethodHandleParser, 'dalvikBytecodeOperationConstMethodHandleParser');
|
|
690
|
+
const dalvikBytecodeOperationConstMethodTypeParser = promiseCompose(createTupleParser([
|
|
691
|
+
createExactElementParser(0xFF),
|
|
692
|
+
createDalvikBytecodeFormat21cParser({
|
|
693
|
+
isoIndex: isoIndexIntoPrototypeIds,
|
|
694
|
+
}),
|
|
695
|
+
]), ([_opcode, { index, registers }]) => ({
|
|
696
|
+
operation: 'const-method-type',
|
|
697
|
+
protoIndex: index,
|
|
698
|
+
registers,
|
|
699
|
+
}));
|
|
700
|
+
setParserName(dalvikBytecodeOperationConstMethodTypeParser, 'dalvikBytecodeOperationConstMethodTypeParser');
|
|
665
701
|
const dalvikBytecodeOperationNewInstanceParser = promiseCompose(createTupleParser([
|
|
666
702
|
createExactElementParser(0x22),
|
|
667
703
|
createDalvikBytecodeFormat21cParser({
|
|
@@ -709,9 +745,9 @@ setParserName(dalvikBytecodeOperationFilledNewArrayRangeParser, 'dalvikBytecodeO
|
|
|
709
745
|
const dalvikBytecodeOperationFillArrayDataParser = promiseCompose(createTupleParser([
|
|
710
746
|
createExactElementParser(0x26),
|
|
711
747
|
dalvikBytecodeFormat31tParser,
|
|
712
|
-
]), ([_opcode, {
|
|
748
|
+
]), ([_opcode, { branchOffsetCodeUnit, registers }]) => ({
|
|
713
749
|
operation: 'fill-array-data',
|
|
714
|
-
|
|
750
|
+
branchOffsetCodeUnit,
|
|
715
751
|
registers,
|
|
716
752
|
}));
|
|
717
753
|
setParserName(dalvikBytecodeOperationFillArrayDataParser, 'dalvikBytecodeOperationFillArrayDataParser');
|
|
@@ -761,12 +797,11 @@ const dalvikBytecodeOperationMonitorExitParser = promiseCompose(createTupleParse
|
|
|
761
797
|
registers,
|
|
762
798
|
}));
|
|
763
799
|
setParserName(dalvikBytecodeOperationMonitorExitParser, 'dalvikBytecodeOperationMonitorExitParser');
|
|
764
|
-
const dalvikBytecodeOperationReturnVoidParser =
|
|
765
|
-
createExactElementParser(0x0E),
|
|
766
|
-
dalvikBytecodeFormat10xParser,
|
|
767
|
-
]), () => ({
|
|
800
|
+
const dalvikBytecodeOperationReturnVoidParser = createObjectParser({
|
|
801
|
+
_opcode: createExactElementParser(0x0E),
|
|
802
|
+
_format: dalvikBytecodeFormat10xParser,
|
|
768
803
|
operation: 'return-void',
|
|
769
|
-
})
|
|
804
|
+
});
|
|
770
805
|
setParserName(dalvikBytecodeOperationReturnVoidParser, 'dalvikBytecodeOperationReturnVoidParser');
|
|
771
806
|
const createDalvikBytecodeMoveResult1Parser = (operation, opcode) => promiseCompose(createTupleParser([
|
|
772
807
|
createExactElementParser(opcode),
|
|
@@ -839,6 +874,22 @@ const dalvikBytecodeOperationMoveWide16Parser = promiseCompose(createTupleParser
|
|
|
839
874
|
registers,
|
|
840
875
|
}));
|
|
841
876
|
setParserName(dalvikBytecodeOperationMoveWide16Parser, 'dalvikBytecodeOperationMoveWide16Parser');
|
|
877
|
+
const dalvikBytecodeOperationMove16Parser = promiseCompose(createTupleParser([
|
|
878
|
+
createExactElementParser(0x03),
|
|
879
|
+
dalvikBytecodeFormat32xParser,
|
|
880
|
+
]), ([_opcode, { registers }]) => ({
|
|
881
|
+
operation: 'move/16',
|
|
882
|
+
registers,
|
|
883
|
+
}));
|
|
884
|
+
setParserName(dalvikBytecodeOperationMove16Parser, 'dalvikBytecodeOperationMove16Parser');
|
|
885
|
+
const dalvikBytecodeOperationMoveObject16Parser = promiseCompose(createTupleParser([
|
|
886
|
+
createExactElementParser(0x09),
|
|
887
|
+
dalvikBytecodeFormat32xParser,
|
|
888
|
+
]), ([_opcode, { registers }]) => ({
|
|
889
|
+
operation: 'move-object/16',
|
|
890
|
+
registers,
|
|
891
|
+
}));
|
|
892
|
+
setParserName(dalvikBytecodeOperationMoveObject16Parser, 'dalvikBytecodeOperationMoveObject16Parser');
|
|
842
893
|
const createDalvikBytecodeOperationReturn1Parser = createDalvikBytecodeMoveResult1Parser;
|
|
843
894
|
const dalvikBytecodeOperationReturnParser = createDalvikBytecodeOperationReturn1Parser('return', 0x0F);
|
|
844
895
|
const dalvikBytecodeOperationReturnWideParser = createDalvikBytecodeOperationReturn1Parser('return-wide', 0x10);
|
|
@@ -949,7 +1000,7 @@ const dalvikBytecodeOperationCompareParser = createDisjunctionParser([
|
|
|
949
1000
|
dalvikBytecodeOperationCompareLongParser,
|
|
950
1001
|
]);
|
|
951
1002
|
setParserName(dalvikBytecodeOperationCompareParser, 'dalvikBytecodeOperationCompareParser');
|
|
952
|
-
export const
|
|
1003
|
+
export const rawDalvikBytecodeOperationCompanion = {
|
|
953
1004
|
getRegisters(operation) {
|
|
954
1005
|
if (operation && typeof operation === 'object' && 'registers' in operation) {
|
|
955
1006
|
return operation.registers;
|
|
@@ -974,6 +1025,9 @@ const dalvikBytecodeOperationOpcodeMap = new Map([
|
|
|
974
1025
|
// Invoke polymorphic operations
|
|
975
1026
|
[0xFA, dalvikBytecodeOperationInvokePolymorphicParser],
|
|
976
1027
|
[0xFB, dalvikBytecodeOperationInvokePolymorphicRangeParser],
|
|
1028
|
+
// Invoke custom operations
|
|
1029
|
+
[0xFC, dalvikBytecodeOperationInvokeCustomParser],
|
|
1030
|
+
[0xFD, dalvikBytecodeOperationInvokeCustomRangeParser],
|
|
977
1031
|
// New instance/array operations
|
|
978
1032
|
[0x22, dalvikBytecodeOperationNewInstanceParser],
|
|
979
1033
|
[0x23, dalvikBytecodeOperationNewArrayParser],
|
|
@@ -1032,6 +1086,7 @@ const dalvikBytecodeOperationOpcodeMap = new Map([
|
|
|
1032
1086
|
[0x1A, dalvikBytecodeOperationConstStringParser],
|
|
1033
1087
|
[0x1B, dalvikBytecodeOperationConstStringJumboParser],
|
|
1034
1088
|
[0xFE, dalvikBytecodeOperationConstMethodHandleParser],
|
|
1089
|
+
[0xFF, dalvikBytecodeOperationConstMethodTypeParser],
|
|
1035
1090
|
[0x1C, dalvikBytecodeOperationConstClassParser],
|
|
1036
1091
|
// Monitor operations
|
|
1037
1092
|
[0x1D, dalvikBytecodeOperationMonitorEnterParser],
|
|
@@ -1062,6 +1117,8 @@ const dalvikBytecodeOperationOpcodeMap = new Map([
|
|
|
1062
1117
|
[0x05, dalvikBytecodeOperationMoveWideFrom16Parser],
|
|
1063
1118
|
[0x08, dalvikBytecodeOperationMoveObjectFrom16Parser],
|
|
1064
1119
|
[0x06, dalvikBytecodeOperationMoveWide16Parser],
|
|
1120
|
+
[0x03, dalvikBytecodeOperationMove16Parser],
|
|
1121
|
+
[0x09, dalvikBytecodeOperationMoveObject16Parser],
|
|
1065
1122
|
// Const value operations
|
|
1066
1123
|
[0x12, dalvikBytecodeOperationConst4Parser],
|
|
1067
1124
|
[0x13, dalvikBytecodeOperationConst16Parser],
|
|
@@ -1118,7 +1175,7 @@ const dalvikBytecodeOperationOpcodeMap = new Map([
|
|
|
1118
1175
|
[0xA7, dalvikBytecodeOperationSubtractFloatParser],
|
|
1119
1176
|
[0xA8, dalvikBytecodeOperationMultiplyFloatParser],
|
|
1120
1177
|
[0xA9, dalvikBytecodeOperationDivideFloatParser],
|
|
1121
|
-
|
|
1178
|
+
[0xAA, dalvikBytecodeOperationRemainderFloatParser],
|
|
1122
1179
|
[0xAB, dalvikBytecodeOperationAddDoubleParser],
|
|
1123
1180
|
[0xAC, dalvikBytecodeOperationSubtractDoubleParser],
|
|
1124
1181
|
[0xAD, dalvikBytecodeOperationMultiplyDoubleParser],
|
|
@@ -1254,9 +1311,9 @@ const dalvikBytecodeOperationParser = promiseCompose(createTupleParser([
|
|
|
1254
1311
|
// Console.log(operation);
|
|
1255
1312
|
operation);
|
|
1256
1313
|
setParserName(dalvikBytecodeOperationParser, 'dalvikBytecodeOperationParser');
|
|
1257
|
-
const
|
|
1258
|
-
export const
|
|
1259
|
-
export function
|
|
1314
|
+
const rawDalvikBytecodeParser = promiseCompose(createArrayParser(dalvikBytecodeOperationParser), operations => operations.filter((operation) => operation !== undefined));
|
|
1315
|
+
export const createRawDalvikBytecodeParser = (size) => createSliceBoundedParser(rawDalvikBytecodeParser, size, true);
|
|
1316
|
+
export function resolveRawDalvikBytecodeOperationIndices(operation, { resolveIndexIntoStringIds, resolveIndexIntoTypeIds, resolveIndexIntoMethodIds, resolveIndexIntoFieldIds, }) {
|
|
1260
1317
|
if (operation && typeof operation === 'object' && 'stringIndex' in operation) {
|
|
1261
1318
|
const { stringIndex, ...rest } = operation;
|
|
1262
1319
|
return {
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|