@futpib/parser 1.0.2 → 1.0.3
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/.github/copilot-instructions.md +149 -0
- package/.github/workflows/copilot-setup-steps.yml +18 -0
- package/.github/workflows/main.yml +29 -8
- package/.yarn/releases/yarn-4.9.4.cjs +942 -0
- package/.yarnrc.yml +1 -1
- package/build/allSettledStream.js +1 -1
- package/build/allSettledStream.test.js +2 -2
- package/build/androidPackageParser.d.ts +1 -1
- package/build/androidPackageParser.js +5 -3
- package/build/androidPackageParser.test.js +7 -7
- package/build/androidPackageUnparser.d.ts +2 -2
- package/build/androidPackageUnparser.js +18 -14
- package/build/androidPackageUnparser.test.js +7 -7
- package/build/arbitrarilySlicedAsyncInterator.js +2 -1
- package/build/arbitraryDalvikBytecode.d.ts +4 -0
- package/build/arbitraryDalvikBytecode.js +640 -0
- package/build/arbitraryDalvikExecutable.d.ts +3 -0
- package/build/arbitraryDalvikExecutable.js +282 -0
- package/build/arbitraryDosDateTime.js +1 -0
- package/build/arbitraryZipStream.js +1 -1
- package/build/arrayParser.js +2 -2
- package/build/arrayUnparser.d.ts +1 -1
- package/build/backsmali.d.ts +3 -1
- package/build/backsmali.js +31 -3
- package/build/customInvariant.d.ts +2 -1
- package/build/customInvariant.js +4 -6
- package/build/dalvikBytecodeParser/formatParsers.d.ts +76 -2
- package/build/dalvikBytecodeParser/formatParsers.js +146 -11
- package/build/dalvikBytecodeParser/formatSizes.d.ts +34 -0
- package/build/dalvikBytecodeParser/formatSizes.js +34 -0
- package/build/dalvikBytecodeParser/operationFormats.d.ts +225 -0
- package/build/dalvikBytecodeParser/operationFormats.js +225 -0
- package/build/dalvikBytecodeParser.d.ts +1105 -5
- package/build/dalvikBytecodeParser.js +658 -205
- package/build/dalvikBytecodeUnparser/formatUnparsers.d.ts +152 -0
- package/build/dalvikBytecodeUnparser/formatUnparsers.js +225 -0
- package/build/dalvikBytecodeUnparser.d.ts +3 -0
- package/build/dalvikBytecodeUnparser.js +642 -0
- package/build/dalvikBytecodeUnparser.test.d.ts +1 -0
- package/build/dalvikBytecodeUnparser.test.js +25 -0
- package/build/dalvikExecutable.d.ts +65 -8
- package/build/dalvikExecutable.js +36 -0
- package/build/dalvikExecutableParser/stringSyntaxParser.d.ts +1 -1
- package/build/dalvikExecutableParser/stringSyntaxParser.js +17 -17
- package/build/dalvikExecutableParser/typeParsers.d.ts +2 -1
- package/build/dalvikExecutableParser/typeParsers.js +16 -11
- package/build/dalvikExecutableParser/typedNumbers.d.ts +85 -69
- package/build/dalvikExecutableParser/typedNumbers.js +0 -1
- package/build/dalvikExecutableParser.d.ts +2 -2
- package/build/dalvikExecutableParser.js +655 -337
- package/build/dalvikExecutableParser.test.js +24 -22
- package/build/dalvikExecutableParserAgainstSmaliParser.test.js +223 -246
- package/build/dalvikExecutableUnparser/annotationUnparsers.d.ts +14 -0
- package/build/dalvikExecutableUnparser/annotationUnparsers.js +97 -0
- package/build/dalvikExecutableUnparser/poolBuilders.d.ts +49 -0
- package/build/dalvikExecutableUnparser/poolBuilders.js +140 -0
- package/build/dalvikExecutableUnparser/poolScanners.d.ts +4 -0
- package/build/dalvikExecutableUnparser/poolScanners.js +220 -0
- package/build/dalvikExecutableUnparser/sectionUnparsers.d.ts +25 -0
- package/build/dalvikExecutableUnparser/sectionUnparsers.js +581 -0
- package/build/dalvikExecutableUnparser/utils.d.ts +10 -0
- package/build/dalvikExecutableUnparser/utils.js +108 -0
- package/build/dalvikExecutableUnparser.d.ts +4 -0
- package/build/dalvikExecutableUnparser.js +406 -0
- package/build/dalvikExecutableUnparser.test.d.ts +1 -0
- package/build/dalvikExecutableUnparser.test.js +31 -0
- package/build/debugLogInputParser.js +1 -1
- package/build/disjunctionParser.d.ts +2 -2
- package/build/disjunctionParser.js +2 -2
- package/build/elementTerminatedArrayParser.d.ts +2 -2
- package/build/elementTerminatedArrayParser.js +1 -1
- package/build/elementTerminatedArrayParser.test.js +5 -5
- package/build/elementTerminatedSequenceArrayParser.d.ts +2 -2
- package/build/elementTerminatedSequenceArrayParser.js +1 -1
- package/build/elementTerminatedSequenceArrayParser.test.js +2 -2
- package/build/elementTerminatedSequenceParser.d.ts +2 -2
- package/build/elementTerminatedSequenceParser.js +1 -1
- package/build/elementTerminatedSequenceParser.test.js +2 -2
- package/build/endOfInputParser.d.ts +1 -1
- package/build/exactElementSwitchParser.d.ts +3 -0
- package/build/exactElementSwitchParser.js +22 -0
- package/build/fetchCid.js +2 -6
- package/build/fetchCid.test.d.ts +1 -0
- package/build/fetchCid.test.js +16 -0
- package/build/fixedLengthSequenceParser.test.js +2 -2
- package/build/hasExecutable.js +2 -2
- package/build/highResolutionTimer.js +1 -1
- package/build/inputReader.d.ts +1 -1
- package/build/inputReader.test.js +33 -45
- package/build/javaKeyStoreParser.test.js +6 -6
- package/build/jsonParser.js +8 -8
- package/build/lazyMessageError.d.ts +48 -0
- package/build/lazyMessageError.js +53 -0
- package/build/lazyMessageError.test.d.ts +1 -0
- package/build/lazyMessageError.test.js +15 -0
- package/build/leb128Parser.d.ts +1 -1
- package/build/leb128Parser.js +10 -10
- package/build/leb128Parser.test.js +7 -7
- package/build/negativeLookaheadParser.js +2 -2
- package/build/negativeLookaheadParser.test.js +4 -4
- package/build/noStackCaptureOverheadError.d.ts +4 -0
- package/build/noStackCaptureOverheadError.js +9 -0
- package/build/noStackCaptureOverheadError.test.d.ts +1 -0
- package/build/noStackCaptureOverheadError.test.js +15 -0
- package/build/nonEmptyArrayParser.js +2 -2
- package/build/nonEmptyArrayParser.test.js +2 -1
- package/build/optionalParser.js +2 -2
- package/build/parser.d.ts +2 -1
- package/build/parser.js +23 -8
- package/build/parser.test.js +78 -29
- package/build/parserConsumedSequenceParser.d.ts +1 -1
- package/build/parserConsumedSequenceParser.js +2 -2
- package/build/parserContext.d.ts +8 -6
- package/build/parserContext.js +60 -33
- package/build/parserContext.test.js +7 -3
- package/build/parserError.d.ts +603 -44
- package/build/parserError.js +98 -53
- package/build/parserImplementationInvariant.d.ts +1 -1
- package/build/parserImplementationInvariant.js +2 -2
- package/build/parserInputCompanion.js +2 -2
- package/build/promiseCompose.js +1 -2
- package/build/separatedArrayParser.js +2 -2
- package/build/separatedNonEmptyArrayParser.d.ts +2 -0
- package/build/separatedNonEmptyArrayParser.js +40 -0
- package/build/separatedNonEmptyArrayParser.test.d.ts +1 -0
- package/build/separatedNonEmptyArrayParser.test.js +66 -0
- package/build/sequenceBuffer.js +1 -1
- package/build/sequenceTerminatedSequenceParser.d.ts +2 -2
- package/build/sequenceTerminatedSequenceParser.js +3 -3
- package/build/sequenceTerminatedSequenceParser.test.js +1 -1
- package/build/sequenceUnparser.d.ts +1 -1
- package/build/skipToParser.d.ts +1 -1
- package/build/skipToParser.js +2 -2
- package/build/sliceBoundedParser.test.js +4 -9
- package/build/smali.d.ts +1 -1
- package/build/smali.js +6 -2
- package/build/smaliParser.d.ts +62 -6
- package/build/smaliParser.js +1721 -296
- package/build/smaliParser.test.js +338 -43
- package/build/stringFromAsyncIterable.d.ts +1 -0
- package/build/stringFromAsyncIterable.js +7 -0
- package/build/terminatedArrayParser.js +4 -4
- package/build/terminatedArrayParser.test.js +7 -7
- package/build/toAsyncIterator.js +4 -4
- package/build/unionParser.d.ts +1 -1
- package/build/unionParser.js +2 -2
- package/build/unionParser.test.js +3 -3
- package/build/unparser.d.ts +3 -3
- package/build/unparser.js +6 -4
- package/build/unparser.test.js +7 -19
- package/build/unparserContext.d.ts +2 -2
- package/build/unparserContext.js +2 -3
- package/build/unparserError.d.ts +2 -1
- package/build/unparserError.js +2 -1
- package/build/unparserImplementationInvariant.d.ts +1 -1
- package/build/unparserOutputCompanion.d.ts +1 -1
- package/build/unparserOutputCompanion.js +1 -1
- package/build/zipParser.js +1 -1
- package/build/zipUnparser.d.ts +3 -3
- package/build/zipUnparser.js +9 -19
- package/build/zipUnparser.test.js +1 -1
- package/package.json +19 -26
- package/src/allSettledStream.test.ts +2 -2
- package/src/allSettledStream.ts +3 -3
- package/src/androidPackageParser.test.ts +17 -19
- package/src/androidPackageParser.ts +129 -171
- package/src/androidPackageUnparser.test.ts +19 -21
- package/src/androidPackageUnparser.ts +23 -17
- package/src/arbitrarilySlicedAsyncInterable.ts +1 -1
- package/src/arbitrarilySlicedAsyncInterator.ts +4 -4
- package/src/arbitraryDalvikBytecode.ts +992 -0
- package/src/arbitraryDalvikExecutable.ts +434 -0
- package/src/arbitraryDosDateTime.ts +1 -0
- package/src/arbitraryZipStream.ts +1 -1
- package/src/arrayParser.ts +2 -2
- package/src/arrayUnparser.ts +2 -2
- package/src/backsmali.ts +48 -4
- package/src/bsonParser.test.ts +12 -14
- package/src/customInvariant.ts +8 -12
- package/src/dalvikBytecodeParser/formatParsers.ts +376 -17
- package/src/dalvikBytecodeParser/formatSizes.ts +35 -0
- package/src/dalvikBytecodeParser/operationFormats.ts +226 -0
- package/src/dalvikBytecodeParser.ts +1042 -243
- package/src/dalvikBytecodeUnparser/formatUnparsers.ts +442 -0
- package/src/dalvikBytecodeUnparser.test.ts +44 -0
- package/src/dalvikBytecodeUnparser.ts +758 -0
- package/src/dalvikExecutable.ts +110 -48
- package/src/dalvikExecutableParser/stringSyntaxParser.ts +33 -33
- package/src/dalvikExecutableParser/typeParsers.ts +23 -14
- package/src/dalvikExecutableParser/typedNumbers.ts +19 -19
- package/src/dalvikExecutableParser.test.ts +60 -60
- package/src/dalvikExecutableParser.test.ts.md +6 -6
- package/src/dalvikExecutableParser.test.ts.snap +0 -0
- package/src/dalvikExecutableParser.ts +911 -434
- package/src/dalvikExecutableParserAgainstSmaliParser.test.ts +256 -239
- package/src/dalvikExecutableUnparser/annotationUnparsers.ts +135 -0
- package/src/dalvikExecutableUnparser/poolBuilders.ts +189 -0
- package/src/dalvikExecutableUnparser/poolScanners.ts +297 -0
- package/src/dalvikExecutableUnparser/sectionUnparsers.ts +683 -0
- package/src/dalvikExecutableUnparser/utils.ts +149 -0
- package/src/dalvikExecutableUnparser.test.ts +57 -0
- package/src/dalvikExecutableUnparser.ts +581 -0
- package/src/debugLogInputParser.ts +1 -1
- package/src/disjunctionParser.ts +5 -5
- package/src/elementTerminatedArrayParser.test.ts +8 -8
- package/src/elementTerminatedArrayParser.ts +2 -2
- package/src/elementTerminatedSequenceArrayParser.test.ts +4 -6
- package/src/elementTerminatedSequenceArrayParser.ts +2 -2
- package/src/elementTerminatedSequenceParser.test.ts +4 -6
- package/src/elementTerminatedSequenceParser.ts +2 -2
- package/src/endOfInputParser.ts +1 -1
- package/src/exactElementSwitchParser.ts +41 -0
- package/src/fetchCid.test.ts +20 -0
- package/src/fetchCid.ts +3 -7
- package/src/fixedLengthSequenceParser.test.ts +10 -12
- package/src/hasExecutable.ts +2 -2
- package/src/highResolutionTimer.ts +1 -1
- package/src/inputReader.test.ts +39 -52
- package/src/inputReader.ts +2 -4
- package/src/inputReaderState.ts +1 -1
- package/src/inspect.ts +1 -1
- package/src/javaKeyStoreParser.test.ts +12 -14
- package/src/javaKeyStoreParser.ts +2 -6
- package/src/jsonParser.test.ts +2 -4
- package/src/jsonParser.ts +34 -38
- package/src/lazyMessageError.test.ts +21 -0
- package/src/lazyMessageError.ts +88 -0
- package/src/leb128Parser.test.ts +25 -23
- package/src/leb128Parser.ts +19 -19
- package/src/negativeLookaheadParser.test.ts +7 -11
- package/src/negativeLookaheadParser.ts +2 -2
- package/src/noStackCaptureOverheadError.test.ts +17 -0
- package/src/noStackCaptureOverheadError.ts +12 -0
- package/src/nonEmptyArrayParser.test.ts +3 -2
- package/src/nonEmptyArrayParser.ts +2 -2
- package/src/optionalParser.ts +2 -2
- package/src/parser.test.ts +96 -43
- package/src/parser.test.ts.md +13 -6
- package/src/parser.test.ts.snap +0 -0
- package/src/parser.ts +35 -12
- package/src/parserAccessorParser.ts +1 -1
- package/src/parserConsumedSequenceParser.ts +3 -3
- package/src/parserContext.test.ts +7 -3
- package/src/parserContext.ts +82 -48
- package/src/parserError.ts +143 -63
- package/src/parserImplementationInvariant.ts +3 -3
- package/src/parserInputCompanion.ts +2 -2
- package/src/promiseCompose.ts +2 -2
- package/src/separatedArrayParser.ts +3 -3
- package/src/separatedNonEmptyArrayParser.test.ts +117 -0
- package/src/separatedNonEmptyArrayParser.ts +61 -0
- package/src/sequenceBuffer.test.ts +9 -9
- package/src/sequenceBuffer.ts +4 -4
- package/src/sequenceTerminatedSequenceParser.test.ts +3 -5
- package/src/sequenceTerminatedSequenceParser.ts +4 -4
- package/src/sequenceUnparser.ts +2 -2
- package/src/skipToParser.ts +2 -2
- package/src/sliceBoundedParser.test.ts +4 -12
- package/src/sliceBoundedParser.ts +2 -2
- package/src/smali.ts +8 -3
- package/src/smaliParser.test.ts +377 -66
- package/src/smaliParser.test.ts.md +1635 -48
- package/src/smaliParser.test.ts.snap +0 -0
- package/src/smaliParser.ts +2751 -569
- package/src/stringFromAsyncIterable.ts +9 -0
- package/src/terminatedArrayParser.test.ts +11 -11
- package/src/terminatedArrayParser.ts +5 -7
- package/src/toAsyncIterator.ts +8 -8
- package/src/uint8Array.ts +2 -3
- package/src/unionParser.test.ts +22 -23
- package/src/unionParser.ts +6 -8
- package/src/unparser.test.ts +18 -34
- package/src/unparser.ts +13 -9
- package/src/unparserContext.ts +9 -13
- package/src/unparserError.ts +2 -1
- package/src/unparserImplementationInvariant.ts +1 -1
- package/src/unparserOutputCompanion.ts +1 -1
- package/src/zip.ts +2 -6
- package/src/zipParser.ts +10 -18
- package/src/zipUnparser.test.ts +1 -1
- package/src/zipUnparser.ts +52 -64
- package/tsconfig.json +7 -1
- package/xo.config.ts +15 -0
- package/.yarn/releases/yarn-4.5.3.cjs +0 -934
|
@@ -1,25 +1,61 @@
|
|
|
1
|
-
import { createArrayParser } from
|
|
2
|
-
import {
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
1
|
+
import { createArrayParser } from './arrayParser.js';
|
|
2
|
+
import {
|
|
3
|
+
createDalvikBytecodeFormat21cParser,
|
|
4
|
+
createDalvikBytecodeFormat21sParser,
|
|
5
|
+
createDalvikBytecodeFormat21tParser,
|
|
6
|
+
createDalvikBytecodeFormat22bParser,
|
|
7
|
+
createDalvikBytecodeFormat22cParser,
|
|
8
|
+
createDalvikBytecodeFormat22sParser,
|
|
9
|
+
createDalvikBytecodeFormat22tParser,
|
|
10
|
+
dalvikBytecodeFormat23xParser,
|
|
11
|
+
createDalvikBytecodeFormat31cParser,
|
|
12
|
+
dalvikBytecodeFormat31iParser,
|
|
13
|
+
dalvikBytecodeFormat31tParser,
|
|
14
|
+
createDalvikBytecodeFormat35cParser,
|
|
15
|
+
createDalvikBytecodeFormat3rcParser,
|
|
16
|
+
dalvikBytecodeFormat10tParser,
|
|
17
|
+
dalvikBytecodeFormat10xParser,
|
|
18
|
+
dalvikBytecodeFormat11xParser,
|
|
19
|
+
dalvikBytecodeFormat11nParser,
|
|
20
|
+
dalvikBytecodeFormat12xParser,
|
|
21
|
+
dalvikBytecodeFormat20tParser,
|
|
22
|
+
dalvikBytecodeFormat22xParser,
|
|
23
|
+
dalvikBytecodeFormat32xParser,
|
|
24
|
+
dalvikBytecodeFormat30tParser,
|
|
25
|
+
dalvikBytecodeFormat51lParser,
|
|
26
|
+
createDalvikBytecodeFormat45ccParser,
|
|
27
|
+
createDalvikBytecodeFormat4rccParser,
|
|
28
|
+
} from './dalvikBytecodeParser/formatParsers.js';
|
|
29
|
+
import {
|
|
30
|
+
ubyteParser, ushortParser, intParser, uintParser, createExactUshortParser,
|
|
31
|
+
} from './dalvikExecutableParser/typeParsers.js';
|
|
32
|
+
import { type DalvikExecutableField, type DalvikExecutableMethod } from './dalvikExecutable.js';
|
|
33
|
+
import {
|
|
34
|
+
type IndexIntoFieldIds, type IndexIntoMethodIds, type IndexIntoPrototypeIds, type IndexIntoStringIds, type IndexIntoTypeIds, isoIndexIntoFieldIds, isoIndexIntoMethodIds, isoIndexIntoPrototypeIds, isoIndexIntoStringIds, isoIndexIntoTypeIds,
|
|
35
|
+
} from './dalvikExecutableParser/typedNumbers.js';
|
|
36
|
+
import { createExactElementParser } from './exactElementParser.js';
|
|
37
|
+
import { createElementSwitchParser } from './exactElementSwitchParser.js';
|
|
38
|
+
import { type Parser, setParserName } from './parser.js';
|
|
39
|
+
import { promiseCompose } from './promiseCompose.js';
|
|
40
|
+
import { createSliceBoundedParser } from './sliceBoundedParser.js';
|
|
41
|
+
import { createDisjunctionParser } from './disjunctionParser.js';
|
|
42
|
+
import { parserCreatorCompose } from './parserCreatorCompose.js';
|
|
43
|
+
import { createQuantifierParser } from './quantifierParser.js';
|
|
44
|
+
import { createDebugLogInputParser } from './debugLogInputParser.js';
|
|
45
|
+
import { createNegativeLookaheadParser } from './negativeLookaheadParser.js';
|
|
46
|
+
import { createTupleParser } from './tupleParser.js';
|
|
11
47
|
|
|
12
48
|
// https://source.android.com/docs/core/runtime/dalvik-bytecode
|
|
13
49
|
|
|
14
|
-
const dalvikBytecodeOperationUnusedParser: Parser<void, Uint8Array> = async
|
|
50
|
+
const dalvikBytecodeOperationUnusedParser: Parser<void, Uint8Array> = async parserContext => {
|
|
15
51
|
const opcode = await parserContext.read(0);
|
|
16
52
|
|
|
17
53
|
parserContext.invariant(
|
|
18
54
|
(
|
|
19
|
-
(opcode >=
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
55
|
+
(opcode >= 0x3E && opcode <= 0x43)
|
|
56
|
+
|| (opcode === 0x73)
|
|
57
|
+
|| (opcode >= 0x79 && opcode <= 0x7A)
|
|
58
|
+
|| (opcode >= 0xE3 && opcode <= 0xF9)
|
|
23
59
|
),
|
|
24
60
|
'Expected unused opcode',
|
|
25
61
|
);
|
|
@@ -30,13 +66,13 @@ const dalvikBytecodeOperationUnusedParser: Parser<void, Uint8Array> = async (par
|
|
|
30
66
|
setParserName(dalvikBytecodeOperationUnusedParser, 'dalvikBytecodeOperationUnusedParser');
|
|
31
67
|
|
|
32
68
|
type DalvikBytecodeOperationNoOperation = {
|
|
33
|
-
operation: '
|
|
69
|
+
operation: 'nop';
|
|
34
70
|
};
|
|
35
71
|
|
|
36
72
|
const dalvikBytecodeOperationNoOperationParser: Parser<DalvikBytecodeOperationNoOperation, Uint8Array> = promiseCompose(
|
|
37
|
-
|
|
73
|
+
createExactUshortParser(0x00_00), // nop is 2 bytes: 0x00 0x00
|
|
38
74
|
() => ({
|
|
39
|
-
operation: '
|
|
75
|
+
operation: 'nop',
|
|
40
76
|
}),
|
|
41
77
|
);
|
|
42
78
|
|
|
@@ -55,7 +91,7 @@ const createDalvikBytecodeOperationInvoke = <T extends string>(operation: T, opc
|
|
|
55
91
|
]),
|
|
56
92
|
([
|
|
57
93
|
_opcode,
|
|
58
|
-
{ index, registers }
|
|
94
|
+
{ index, registers },
|
|
59
95
|
]) => ({
|
|
60
96
|
operation,
|
|
61
97
|
methodIndex: index,
|
|
@@ -63,11 +99,11 @@ const createDalvikBytecodeOperationInvoke = <T extends string>(operation: T, opc
|
|
|
63
99
|
}),
|
|
64
100
|
);
|
|
65
101
|
|
|
66
|
-
const dalvikBytecodeOperationInvokeVirtualParser = createDalvikBytecodeOperationInvoke('invoke-virtual',
|
|
102
|
+
const dalvikBytecodeOperationInvokeVirtualParser = createDalvikBytecodeOperationInvoke('invoke-virtual', 0x6E);
|
|
67
103
|
|
|
68
104
|
type DalvikBytecodeOperationInvokeVirtual = Awaited<ReturnType<typeof dalvikBytecodeOperationInvokeVirtualParser>>;
|
|
69
105
|
|
|
70
|
-
const dalvikBytecodeOperationInvokeSuperParser = createDalvikBytecodeOperationInvoke('invoke-super',
|
|
106
|
+
const dalvikBytecodeOperationInvokeSuperParser = createDalvikBytecodeOperationInvoke('invoke-super', 0x6F);
|
|
71
107
|
|
|
72
108
|
type DalvikBytecodeOperationInvokeSuper = Awaited<ReturnType<typeof dalvikBytecodeOperationInvokeSuperParser>>;
|
|
73
109
|
|
|
@@ -91,7 +127,7 @@ type DalvikBytecodeOperationInvoke =
|
|
|
91
127
|
| DalvikBytecodeOperationInvokeInterface
|
|
92
128
|
;
|
|
93
129
|
|
|
94
|
-
const dalvikBytecodeOperationInvokeParser: Parser<DalvikBytecodeOperationInvoke, Uint8Array> =
|
|
130
|
+
const dalvikBytecodeOperationInvokeParser: Parser<DalvikBytecodeOperationInvoke, Uint8Array> = createDisjunctionParser([
|
|
95
131
|
dalvikBytecodeOperationInvokeVirtualParser,
|
|
96
132
|
dalvikBytecodeOperationInvokeSuperParser,
|
|
97
133
|
dalvikBytecodeOperationInvokeDirectParser,
|
|
@@ -114,7 +150,7 @@ const createDalvikBytecodeOperationInvokeRange = <T extends string>(operation: T
|
|
|
114
150
|
]),
|
|
115
151
|
([
|
|
116
152
|
_opcode,
|
|
117
|
-
{ index, registers }
|
|
153
|
+
{ index, registers },
|
|
118
154
|
]) => ({
|
|
119
155
|
operation,
|
|
120
156
|
methodIndex: index,
|
|
@@ -150,7 +186,7 @@ type DalvikBytecodeOperationInvokeRange =
|
|
|
150
186
|
| DalvikBytecodeOperationInvokeInterfaceRange
|
|
151
187
|
;
|
|
152
188
|
|
|
153
|
-
const dalvikBytecodeOperationInvokeRangeParser: Parser<DalvikBytecodeOperationInvokeRange, Uint8Array> =
|
|
189
|
+
const dalvikBytecodeOperationInvokeRangeParser: Parser<DalvikBytecodeOperationInvokeRange, Uint8Array> = createDisjunctionParser([
|
|
154
190
|
dalvikBytecodeOperationInvokeVirtualRangeParser,
|
|
155
191
|
dalvikBytecodeOperationInvokeSuperRangeParser,
|
|
156
192
|
dalvikBytecodeOperationInvokeDirectRangeParser,
|
|
@@ -160,6 +196,63 @@ const dalvikBytecodeOperationInvokeRangeParser: Parser<DalvikBytecodeOperationIn
|
|
|
160
196
|
|
|
161
197
|
setParserName(dalvikBytecodeOperationInvokeRangeParser, 'dalvikBytecodeOperationInvokeRangeParser');
|
|
162
198
|
|
|
199
|
+
// Invoke-polymorphic and invoke-polymorphic/range (Android 8.0+)
|
|
200
|
+
type DalvikBytecodeOperationInvokePolymorphic = {
|
|
201
|
+
operation: 'invoke-polymorphic';
|
|
202
|
+
methodIndex: IndexIntoMethodIds;
|
|
203
|
+
protoIndex: IndexIntoPrototypeIds;
|
|
204
|
+
registers: number[];
|
|
205
|
+
};
|
|
206
|
+
|
|
207
|
+
const dalvikBytecodeOperationInvokePolymorphicParser: Parser<DalvikBytecodeOperationInvokePolymorphic, Uint8Array> = promiseCompose(
|
|
208
|
+
createTupleParser([
|
|
209
|
+
createExactElementParser(0xFA),
|
|
210
|
+
createDalvikBytecodeFormat45ccParser({
|
|
211
|
+
isoMethodIndex: isoIndexIntoMethodIds,
|
|
212
|
+
isoProtoIndex: isoIndexIntoPrototypeIds,
|
|
213
|
+
}),
|
|
214
|
+
]),
|
|
215
|
+
([
|
|
216
|
+
_opcode,
|
|
217
|
+
{ methodIndex, protoIndex, registers },
|
|
218
|
+
]) => ({
|
|
219
|
+
operation: 'invoke-polymorphic',
|
|
220
|
+
methodIndex,
|
|
221
|
+
protoIndex,
|
|
222
|
+
registers,
|
|
223
|
+
}),
|
|
224
|
+
);
|
|
225
|
+
|
|
226
|
+
setParserName(dalvikBytecodeOperationInvokePolymorphicParser, 'dalvikBytecodeOperationInvokePolymorphicParser');
|
|
227
|
+
|
|
228
|
+
type DalvikBytecodeOperationInvokePolymorphicRange = {
|
|
229
|
+
operation: 'invoke-polymorphic/range';
|
|
230
|
+
methodIndex: IndexIntoMethodIds;
|
|
231
|
+
protoIndex: IndexIntoPrototypeIds;
|
|
232
|
+
registers: number[];
|
|
233
|
+
};
|
|
234
|
+
|
|
235
|
+
const dalvikBytecodeOperationInvokePolymorphicRangeParser: Parser<DalvikBytecodeOperationInvokePolymorphicRange, Uint8Array> = promiseCompose(
|
|
236
|
+
createTupleParser([
|
|
237
|
+
createExactElementParser(0xFB),
|
|
238
|
+
createDalvikBytecodeFormat4rccParser({
|
|
239
|
+
isoMethodIndex: isoIndexIntoMethodIds,
|
|
240
|
+
isoProtoIndex: isoIndexIntoPrototypeIds,
|
|
241
|
+
}),
|
|
242
|
+
]),
|
|
243
|
+
([
|
|
244
|
+
_opcode,
|
|
245
|
+
{ methodIndex, protoIndex, registers },
|
|
246
|
+
]) => ({
|
|
247
|
+
operation: 'invoke-polymorphic/range',
|
|
248
|
+
methodIndex,
|
|
249
|
+
protoIndex,
|
|
250
|
+
registers,
|
|
251
|
+
}),
|
|
252
|
+
);
|
|
253
|
+
|
|
254
|
+
setParserName(dalvikBytecodeOperationInvokePolymorphicRangeParser, 'dalvikBytecodeOperationInvokePolymorphicRangeParser');
|
|
255
|
+
|
|
163
256
|
type DalvikBytecodeOperationGoto = {
|
|
164
257
|
operation: 'goto';
|
|
165
258
|
branchOffset: number;
|
|
@@ -192,6 +285,172 @@ const dalvikBytecodeOperationGoto16Parser: Parser<DalvikBytecodeOperationGoto16,
|
|
|
192
285
|
}),
|
|
193
286
|
);
|
|
194
287
|
|
|
288
|
+
type DalvikBytecodeOperationGoto32 = {
|
|
289
|
+
operation: 'goto/32';
|
|
290
|
+
branchOffset: number;
|
|
291
|
+
};
|
|
292
|
+
|
|
293
|
+
const dalvikBytecodeOperationGoto32Parser: Parser<DalvikBytecodeOperationGoto32, Uint8Array> = promiseCompose(
|
|
294
|
+
createTupleParser([
|
|
295
|
+
createExactElementParser(0x2A),
|
|
296
|
+
dalvikBytecodeFormat30tParser,
|
|
297
|
+
]),
|
|
298
|
+
([ _opcode, { branchOffset } ]) => ({
|
|
299
|
+
operation: 'goto/32',
|
|
300
|
+
branchOffset,
|
|
301
|
+
}),
|
|
302
|
+
);
|
|
303
|
+
|
|
304
|
+
type DalvikBytecodeOperationPackedSwitch = {
|
|
305
|
+
operation: 'packed-switch';
|
|
306
|
+
branchOffset: number;
|
|
307
|
+
registers: number[];
|
|
308
|
+
};
|
|
309
|
+
|
|
310
|
+
const dalvikBytecodeOperationPackedSwitchParser: Parser<DalvikBytecodeOperationPackedSwitch, Uint8Array> = promiseCompose(
|
|
311
|
+
createTupleParser([
|
|
312
|
+
createExactElementParser(0x2B),
|
|
313
|
+
dalvikBytecodeFormat31tParser,
|
|
314
|
+
]),
|
|
315
|
+
([ _opcode, { branchOffset, registers } ]) => ({
|
|
316
|
+
operation: 'packed-switch',
|
|
317
|
+
branchOffset,
|
|
318
|
+
registers,
|
|
319
|
+
}),
|
|
320
|
+
);
|
|
321
|
+
|
|
322
|
+
setParserName(dalvikBytecodeOperationPackedSwitchParser, 'dalvikBytecodeOperationPackedSwitchParser');
|
|
323
|
+
|
|
324
|
+
type DalvikBytecodeOperationPackedSwitchPayload = {
|
|
325
|
+
operation: 'packed-switch-payload';
|
|
326
|
+
value: number;
|
|
327
|
+
branchOffsets: number[];
|
|
328
|
+
};
|
|
329
|
+
|
|
330
|
+
const dalvikBytecodeOperationPackedSwitchPayloadParser: Parser<DalvikBytecodeOperationPackedSwitchPayload, Uint8Array> = parserCreatorCompose(
|
|
331
|
+
() => promiseCompose(
|
|
332
|
+
createTupleParser([
|
|
333
|
+
createExactUshortParser(0x01_00),
|
|
334
|
+
ushortParser,
|
|
335
|
+
intParser,
|
|
336
|
+
]),
|
|
337
|
+
([ _ident, size, value ]) => ({
|
|
338
|
+
size,
|
|
339
|
+
value,
|
|
340
|
+
}),
|
|
341
|
+
),
|
|
342
|
+
({ size, value }) => promiseCompose(
|
|
343
|
+
createQuantifierParser(
|
|
344
|
+
intParser,
|
|
345
|
+
size,
|
|
346
|
+
),
|
|
347
|
+
branchOffsets => ({
|
|
348
|
+
operation: 'packed-switch-payload' as const,
|
|
349
|
+
value,
|
|
350
|
+
branchOffsets,
|
|
351
|
+
}),
|
|
352
|
+
),
|
|
353
|
+
)();
|
|
354
|
+
|
|
355
|
+
setParserName(dalvikBytecodeOperationPackedSwitchPayloadParser, 'dalvikBytecodeOperationPackedSwitchPayloadParser');
|
|
356
|
+
|
|
357
|
+
type DalvikBytecodeOperationSparseSwitch = {
|
|
358
|
+
operation: 'sparse-switch';
|
|
359
|
+
branchOffset: number;
|
|
360
|
+
registers: number[];
|
|
361
|
+
};
|
|
362
|
+
|
|
363
|
+
const dalvikBytecodeOperationSparseSwitchParser: Parser<DalvikBytecodeOperationSparseSwitch, Uint8Array> = promiseCompose(
|
|
364
|
+
createTupleParser([
|
|
365
|
+
createExactElementParser(0x2C),
|
|
366
|
+
dalvikBytecodeFormat31tParser,
|
|
367
|
+
]),
|
|
368
|
+
([ _opcode, { branchOffset, registers } ]) => ({
|
|
369
|
+
operation: 'sparse-switch',
|
|
370
|
+
branchOffset,
|
|
371
|
+
registers,
|
|
372
|
+
}),
|
|
373
|
+
);
|
|
374
|
+
|
|
375
|
+
setParserName(dalvikBytecodeOperationSparseSwitchParser, 'dalvikBytecodeOperationSparseSwitchParser');
|
|
376
|
+
|
|
377
|
+
type DalvikBytecodeOperationSparseSwitchPayload = {
|
|
378
|
+
operation: 'sparse-switch-payload';
|
|
379
|
+
keys: number[];
|
|
380
|
+
branchOffsets: number[];
|
|
381
|
+
};
|
|
382
|
+
|
|
383
|
+
const dalvikBytecodeOperationSparseSwitchPayloadParser: Parser<DalvikBytecodeOperationSparseSwitchPayload, Uint8Array> = parserCreatorCompose(
|
|
384
|
+
() => promiseCompose(
|
|
385
|
+
createTupleParser([
|
|
386
|
+
createExactUshortParser(0x02_00),
|
|
387
|
+
ushortParser,
|
|
388
|
+
]),
|
|
389
|
+
([ _ident, size ]) => ({
|
|
390
|
+
size,
|
|
391
|
+
}),
|
|
392
|
+
),
|
|
393
|
+
({ size }) => promiseCompose(
|
|
394
|
+
createTupleParser([
|
|
395
|
+
createQuantifierParser(
|
|
396
|
+
intParser,
|
|
397
|
+
size,
|
|
398
|
+
),
|
|
399
|
+
createQuantifierParser(
|
|
400
|
+
intParser,
|
|
401
|
+
size,
|
|
402
|
+
),
|
|
403
|
+
]),
|
|
404
|
+
([ keys, branchOffsets ]) => ({
|
|
405
|
+
operation: 'sparse-switch-payload' as const,
|
|
406
|
+
keys,
|
|
407
|
+
branchOffsets,
|
|
408
|
+
}),
|
|
409
|
+
),
|
|
410
|
+
)();
|
|
411
|
+
|
|
412
|
+
setParserName(dalvikBytecodeOperationSparseSwitchPayloadParser, 'dalvikBytecodeOperationSparseSwitchPayloadParser');
|
|
413
|
+
|
|
414
|
+
type DalvikBytecodeOperationFillArrayDataPayload = {
|
|
415
|
+
operation: 'fill-array-data-payload';
|
|
416
|
+
elementWidth: number;
|
|
417
|
+
data: number[];
|
|
418
|
+
};
|
|
419
|
+
|
|
420
|
+
const dalvikBytecodeOperationFillArrayDataPayloadParser: Parser<DalvikBytecodeOperationFillArrayDataPayload, Uint8Array> = parserCreatorCompose(
|
|
421
|
+
() => promiseCompose(
|
|
422
|
+
createTupleParser([
|
|
423
|
+
createExactUshortParser(0x03_00),
|
|
424
|
+
ushortParser,
|
|
425
|
+
uintParser,
|
|
426
|
+
]),
|
|
427
|
+
([ _ident, elementWidth, size ]): { elementWidth: number; size: number } => ({
|
|
428
|
+
elementWidth,
|
|
429
|
+
size,
|
|
430
|
+
}),
|
|
431
|
+
),
|
|
432
|
+
({ elementWidth, size }: { elementWidth: number; size: number }) => {
|
|
433
|
+
const dataSize = size * elementWidth;
|
|
434
|
+
const paddingSize = dataSize % 2; // 1 if odd, 0 if even
|
|
435
|
+
return promiseCompose(
|
|
436
|
+
createTupleParser([
|
|
437
|
+
createQuantifierParser(
|
|
438
|
+
ubyteParser,
|
|
439
|
+
dataSize,
|
|
440
|
+
),
|
|
441
|
+
paddingSize > 0 ? createQuantifierParser(ubyteParser, paddingSize) : () => [],
|
|
442
|
+
]),
|
|
443
|
+
([ data, _padding ]) => ({
|
|
444
|
+
operation: 'fill-array-data-payload' as const,
|
|
445
|
+
elementWidth,
|
|
446
|
+
data,
|
|
447
|
+
}),
|
|
448
|
+
);
|
|
449
|
+
},
|
|
450
|
+
)();
|
|
451
|
+
|
|
452
|
+
setParserName(dalvikBytecodeOperationFillArrayDataPayloadParser, 'dalvikBytecodeOperationFillArrayDataPayloadParser');
|
|
453
|
+
|
|
195
454
|
type DalvikBytecodeOperationInstanceOf = {
|
|
196
455
|
operation: 'instance-of';
|
|
197
456
|
registers: number[];
|
|
@@ -252,27 +511,27 @@ const dalvikBytecodeOperationArrayElementGetCharParser = createDalvikBytecodeOpe
|
|
|
252
511
|
|
|
253
512
|
type DalvikBytecodeOperationArrayElementGetChar = Awaited<ReturnType<typeof dalvikBytecodeOperationArrayElementGetCharParser>>;
|
|
254
513
|
|
|
255
|
-
const dalvikBytecodeOperationArrayElementGetShortParser = createDalvikBytecodeOperationArrayElement('aget-short',
|
|
514
|
+
const dalvikBytecodeOperationArrayElementGetShortParser = createDalvikBytecodeOperationArrayElement('aget-short', 0x4A);
|
|
256
515
|
|
|
257
516
|
type DalvikBytecodeOperationArrayElementGetShort = Awaited<ReturnType<typeof dalvikBytecodeOperationArrayElementGetShortParser>>;
|
|
258
517
|
|
|
259
|
-
const dalvikBytecodeOperationArrayElementPutParser = createDalvikBytecodeOperationArrayElement('aput',
|
|
518
|
+
const dalvikBytecodeOperationArrayElementPutParser = createDalvikBytecodeOperationArrayElement('aput', 0x4B);
|
|
260
519
|
|
|
261
520
|
type DalvikBytecodeOperationArrayElementPut = Awaited<ReturnType<typeof dalvikBytecodeOperationArrayElementPutParser>>;
|
|
262
521
|
|
|
263
|
-
const dalvikBytecodeOperationArrayElementPutWideParser = createDalvikBytecodeOperationArrayElement('aput-wide',
|
|
522
|
+
const dalvikBytecodeOperationArrayElementPutWideParser = createDalvikBytecodeOperationArrayElement('aput-wide', 0x4C);
|
|
264
523
|
|
|
265
524
|
type DalvikBytecodeOperationArrayElementPutWide = Awaited<ReturnType<typeof dalvikBytecodeOperationArrayElementPutWideParser>>;
|
|
266
525
|
|
|
267
|
-
const dalvikBytecodeOperationArrayElementPutObjectParser = createDalvikBytecodeOperationArrayElement('aput-object',
|
|
526
|
+
const dalvikBytecodeOperationArrayElementPutObjectParser = createDalvikBytecodeOperationArrayElement('aput-object', 0x4D);
|
|
268
527
|
|
|
269
528
|
type DalvikBytecodeOperationArrayElementPutObject = Awaited<ReturnType<typeof dalvikBytecodeOperationArrayElementPutObjectParser>>;
|
|
270
529
|
|
|
271
|
-
const dalvikBytecodeOperationArrayElementPutBooleanParser = createDalvikBytecodeOperationArrayElement('aput-boolean',
|
|
530
|
+
const dalvikBytecodeOperationArrayElementPutBooleanParser = createDalvikBytecodeOperationArrayElement('aput-boolean', 0x4E);
|
|
272
531
|
|
|
273
532
|
type DalvikBytecodeOperationArrayElementPutBoolean = Awaited<ReturnType<typeof dalvikBytecodeOperationArrayElementPutBooleanParser>>;
|
|
274
533
|
|
|
275
|
-
const dalvikBytecodeOperationArrayElementPutByteParser = createDalvikBytecodeOperationArrayElement('aput-byte',
|
|
534
|
+
const dalvikBytecodeOperationArrayElementPutByteParser = createDalvikBytecodeOperationArrayElement('aput-byte', 0x4F);
|
|
276
535
|
|
|
277
536
|
type DalvikBytecodeOperationArrayElementPutByte = Awaited<ReturnType<typeof dalvikBytecodeOperationArrayElementPutByteParser>>;
|
|
278
537
|
|
|
@@ -301,7 +560,7 @@ type DalvikBytecodeOperationArrayElement =
|
|
|
301
560
|
| DalvikBytecodeOperationArrayElementPutShort
|
|
302
561
|
;
|
|
303
562
|
|
|
304
|
-
const dalvikBytecodeOperationArrayElementParser: Parser<DalvikBytecodeOperationArrayElement, Uint8Array> =
|
|
563
|
+
const dalvikBytecodeOperationArrayElementParser: Parser<DalvikBytecodeOperationArrayElement, Uint8Array> = createDisjunctionParser([
|
|
305
564
|
dalvikBytecodeOperationArrayElementGetParser,
|
|
306
565
|
dalvikBytecodeOperationArrayElementGetWideParser,
|
|
307
566
|
dalvikBytecodeOperationArrayElementGetObjectParser,
|
|
@@ -370,27 +629,27 @@ const dalvikBytecodeOperationInstanceFieldPutParser = createDalvikBytecodeOperat
|
|
|
370
629
|
|
|
371
630
|
type DalvikBytecodeOperationInstanceFieldPut = Awaited<ReturnType<typeof dalvikBytecodeOperationInstanceFieldPutParser>>;
|
|
372
631
|
|
|
373
|
-
const dalvikBytecodeOperationInstanceFieldPutWideParser = createDalvikBytecodeOperationInstanceField('iput-wide',
|
|
632
|
+
const dalvikBytecodeOperationInstanceFieldPutWideParser = createDalvikBytecodeOperationInstanceField('iput-wide', 0x5A);
|
|
374
633
|
|
|
375
634
|
type DalvikBytecodeOperationInstanceFieldPutWide = Awaited<ReturnType<typeof dalvikBytecodeOperationInstanceFieldPutWideParser>>;
|
|
376
635
|
|
|
377
|
-
const dalvikBytecodeOperationInstanceFieldPutObjectParser = createDalvikBytecodeOperationInstanceField('iput-object',
|
|
636
|
+
const dalvikBytecodeOperationInstanceFieldPutObjectParser = createDalvikBytecodeOperationInstanceField('iput-object', 0x5B);
|
|
378
637
|
|
|
379
638
|
type DalvikBytecodeOperationInstanceFieldPutObject = Awaited<ReturnType<typeof dalvikBytecodeOperationInstanceFieldPutObjectParser>>;
|
|
380
639
|
|
|
381
|
-
const dalvikBytecodeOperationInstanceFieldPutBooleanParser = createDalvikBytecodeOperationInstanceField('iput-boolean',
|
|
640
|
+
const dalvikBytecodeOperationInstanceFieldPutBooleanParser = createDalvikBytecodeOperationInstanceField('iput-boolean', 0x5C);
|
|
382
641
|
|
|
383
642
|
type DalvikBytecodeOperationInstanceFieldPutBoolean = Awaited<ReturnType<typeof dalvikBytecodeOperationInstanceFieldPutBooleanParser>>;
|
|
384
643
|
|
|
385
|
-
const dalvikBytecodeOperationInstanceFieldPutByteParser = createDalvikBytecodeOperationInstanceField('iput-byte',
|
|
644
|
+
const dalvikBytecodeOperationInstanceFieldPutByteParser = createDalvikBytecodeOperationInstanceField('iput-byte', 0x5D);
|
|
386
645
|
|
|
387
646
|
type DalvikBytecodeOperationInstanceFieldPutByte = Awaited<ReturnType<typeof dalvikBytecodeOperationInstanceFieldPutByteParser>>;
|
|
388
647
|
|
|
389
|
-
const dalvikBytecodeOperationInstanceFieldPutCharParser = createDalvikBytecodeOperationInstanceField('iput-char',
|
|
648
|
+
const dalvikBytecodeOperationInstanceFieldPutCharParser = createDalvikBytecodeOperationInstanceField('iput-char', 0x5E);
|
|
390
649
|
|
|
391
650
|
type DalvikBytecodeOperationInstanceFieldPutChar = Awaited<ReturnType<typeof dalvikBytecodeOperationInstanceFieldPutCharParser>>;
|
|
392
651
|
|
|
393
|
-
const dalvikBytecodeOperationInstanceFieldPutShortParser = createDalvikBytecodeOperationInstanceField('iput-short',
|
|
652
|
+
const dalvikBytecodeOperationInstanceFieldPutShortParser = createDalvikBytecodeOperationInstanceField('iput-short', 0x5F);
|
|
394
653
|
|
|
395
654
|
type DalvikBytecodeOperationInstanceFieldPutShort = Awaited<ReturnType<typeof dalvikBytecodeOperationInstanceFieldPutShortParser>>;
|
|
396
655
|
|
|
@@ -411,7 +670,7 @@ type DalvikBytecodeOperationInstanceField =
|
|
|
411
670
|
| DalvikBytecodeOperationInstanceFieldPutShort
|
|
412
671
|
;
|
|
413
672
|
|
|
414
|
-
const dalvikBytecodeOperationInstanceFieldParser: Parser<DalvikBytecodeOperationInstanceField, Uint8Array> =
|
|
673
|
+
const dalvikBytecodeOperationInstanceFieldParser: Parser<DalvikBytecodeOperationInstanceField, Uint8Array> = createDisjunctionParser([
|
|
415
674
|
dalvikBytecodeOperationInstanceFieldGetParser,
|
|
416
675
|
dalvikBytecodeOperationInstanceFieldGetWideParser,
|
|
417
676
|
dalvikBytecodeOperationInstanceFieldGetObjectParser,
|
|
@@ -488,19 +747,19 @@ const dalvikBytecodeOperationStaticFieldPutObjectParser = createDalvikBytecodeOp
|
|
|
488
747
|
|
|
489
748
|
type DalvikBytecodeOperationStaticFieldPutObject = Awaited<ReturnType<typeof dalvikBytecodeOperationStaticFieldPutObjectParser>>;
|
|
490
749
|
|
|
491
|
-
const dalvikBytecodeOperationStaticFieldPutBooleanParser = createDalvikBytecodeOperationStaticField('sput-boolean',
|
|
750
|
+
const dalvikBytecodeOperationStaticFieldPutBooleanParser = createDalvikBytecodeOperationStaticField('sput-boolean', 0x6A);
|
|
492
751
|
|
|
493
752
|
type DalvikBytecodeOperationStaticFieldPutBoolean = Awaited<ReturnType<typeof dalvikBytecodeOperationStaticFieldPutBooleanParser>>;
|
|
494
753
|
|
|
495
|
-
const dalvikBytecodeOperationStaticFieldPutByteParser = createDalvikBytecodeOperationStaticField('sput-byte',
|
|
754
|
+
const dalvikBytecodeOperationStaticFieldPutByteParser = createDalvikBytecodeOperationStaticField('sput-byte', 0x6B);
|
|
496
755
|
|
|
497
756
|
type DalvikBytecodeOperationStaticFieldPutByte = Awaited<ReturnType<typeof dalvikBytecodeOperationStaticFieldPutByteParser>>;
|
|
498
757
|
|
|
499
|
-
const dalvikBytecodeOperationStaticFieldPutCharParser = createDalvikBytecodeOperationStaticField('sput-char',
|
|
758
|
+
const dalvikBytecodeOperationStaticFieldPutCharParser = createDalvikBytecodeOperationStaticField('sput-char', 0x6C);
|
|
500
759
|
|
|
501
760
|
type DalvikBytecodeOperationStaticFieldPutChar = Awaited<ReturnType<typeof dalvikBytecodeOperationStaticFieldPutCharParser>>;
|
|
502
761
|
|
|
503
|
-
const dalvikBytecodeOperationStaticFieldPutShortParser = createDalvikBytecodeOperationStaticField('sput-short',
|
|
762
|
+
const dalvikBytecodeOperationStaticFieldPutShortParser = createDalvikBytecodeOperationStaticField('sput-short', 0x6D);
|
|
504
763
|
|
|
505
764
|
type DalvikBytecodeOperationStaticFieldPutShort = Awaited<ReturnType<typeof dalvikBytecodeOperationStaticFieldPutShortParser>>;
|
|
506
765
|
|
|
@@ -521,7 +780,7 @@ type DalvikBytecodeOperationStaticField =
|
|
|
521
780
|
| DalvikBytecodeOperationStaticFieldPutShort
|
|
522
781
|
;
|
|
523
782
|
|
|
524
|
-
const dalvikBytecodeOperationStaticFieldParser: Parser<DalvikBytecodeOperationStaticField, Uint8Array> =
|
|
783
|
+
const dalvikBytecodeOperationStaticFieldParser: Parser<DalvikBytecodeOperationStaticField, Uint8Array> = createDisjunctionParser([
|
|
525
784
|
dalvikBytecodeOperationStaticFieldGetParser,
|
|
526
785
|
dalvikBytecodeOperationStaticFieldGetWideParser,
|
|
527
786
|
dalvikBytecodeOperationStaticFieldGetObjectParser,
|
|
@@ -556,47 +815,47 @@ const createDalvikBytecodeOperationBinaryOperationLiteral8 = <T extends string>(
|
|
|
556
815
|
}),
|
|
557
816
|
);
|
|
558
817
|
|
|
559
|
-
const dalvikBytecodeOperationAddIntLiteral8Parser = createDalvikBytecodeOperationBinaryOperationLiteral8('add-int/lit8',
|
|
818
|
+
const dalvikBytecodeOperationAddIntLiteral8Parser = createDalvikBytecodeOperationBinaryOperationLiteral8('add-int/lit8', 0xD8);
|
|
560
819
|
|
|
561
820
|
type DalvikBytecodeOperationAddIntLiteral8 = Awaited<ReturnType<typeof dalvikBytecodeOperationAddIntLiteral8Parser>>;
|
|
562
821
|
|
|
563
|
-
const dalvikBytecodeOperationReverseSubtractIntLiteral8Parser = createDalvikBytecodeOperationBinaryOperationLiteral8('rsub-int/lit8',
|
|
822
|
+
const dalvikBytecodeOperationReverseSubtractIntLiteral8Parser = createDalvikBytecodeOperationBinaryOperationLiteral8('rsub-int/lit8', 0xD9);
|
|
564
823
|
|
|
565
824
|
type DalvikBytecodeOperationReverseSubtractIntLiteral8 = Awaited<ReturnType<typeof dalvikBytecodeOperationReverseSubtractIntLiteral8Parser>>;
|
|
566
825
|
|
|
567
|
-
const dalvikBytecodeOperationMultiplyIntLiteral8Parser = createDalvikBytecodeOperationBinaryOperationLiteral8('mul-int/lit8',
|
|
826
|
+
const dalvikBytecodeOperationMultiplyIntLiteral8Parser = createDalvikBytecodeOperationBinaryOperationLiteral8('mul-int/lit8', 0xDA);
|
|
568
827
|
|
|
569
828
|
type DalvikBytecodeOperationMultiplyIntLiteral8 = Awaited<ReturnType<typeof dalvikBytecodeOperationMultiplyIntLiteral8Parser>>;
|
|
570
829
|
|
|
571
|
-
const dalvikBytecodeOperationDivideIntLiteral8Parser = createDalvikBytecodeOperationBinaryOperationLiteral8('div-int/lit8',
|
|
830
|
+
const dalvikBytecodeOperationDivideIntLiteral8Parser = createDalvikBytecodeOperationBinaryOperationLiteral8('div-int/lit8', 0xDB);
|
|
572
831
|
|
|
573
832
|
type DalvikBytecodeOperationDivideIntLiteral8 = Awaited<ReturnType<typeof dalvikBytecodeOperationDivideIntLiteral8Parser>>;
|
|
574
833
|
|
|
575
|
-
const dalvikBytecodeOperationRemainderIntLiteral8Parser = createDalvikBytecodeOperationBinaryOperationLiteral8('rem-int/lit8',
|
|
834
|
+
const dalvikBytecodeOperationRemainderIntLiteral8Parser = createDalvikBytecodeOperationBinaryOperationLiteral8('rem-int/lit8', 0xDC);
|
|
576
835
|
|
|
577
836
|
type DalvikBytecodeOperationRemainderIntLiteral8 = Awaited<ReturnType<typeof dalvikBytecodeOperationRemainderIntLiteral8Parser>>;
|
|
578
837
|
|
|
579
|
-
const dalvikBytecodeOperationAndIntLiteral8Parser = createDalvikBytecodeOperationBinaryOperationLiteral8('and-int/lit8',
|
|
838
|
+
const dalvikBytecodeOperationAndIntLiteral8Parser = createDalvikBytecodeOperationBinaryOperationLiteral8('and-int/lit8', 0xDD);
|
|
580
839
|
|
|
581
840
|
type DalvikBytecodeOperationAndIntLiteral8 = Awaited<ReturnType<typeof dalvikBytecodeOperationAndIntLiteral8Parser>>;
|
|
582
841
|
|
|
583
|
-
const dalvikBytecodeOperationOrIntLiteral8Parser = createDalvikBytecodeOperationBinaryOperationLiteral8('or-int/lit8',
|
|
842
|
+
const dalvikBytecodeOperationOrIntLiteral8Parser = createDalvikBytecodeOperationBinaryOperationLiteral8('or-int/lit8', 0xDE);
|
|
584
843
|
|
|
585
844
|
type DalvikBytecodeOperationOrIntLiteral8 = Awaited<ReturnType<typeof dalvikBytecodeOperationOrIntLiteral8Parser>>;
|
|
586
845
|
|
|
587
|
-
const dalvikBytecodeOperationXorIntLiteral8Parser = createDalvikBytecodeOperationBinaryOperationLiteral8('xor-int/lit8',
|
|
846
|
+
const dalvikBytecodeOperationXorIntLiteral8Parser = createDalvikBytecodeOperationBinaryOperationLiteral8('xor-int/lit8', 0xDF);
|
|
588
847
|
|
|
589
848
|
type DalvikBytecodeOperationXorIntLiteral8 = Awaited<ReturnType<typeof dalvikBytecodeOperationXorIntLiteral8Parser>>;
|
|
590
849
|
|
|
591
|
-
const dalvikBytecodeOperationShiftLeftIntLiteral8Parser = createDalvikBytecodeOperationBinaryOperationLiteral8('shl-int/lit8',
|
|
850
|
+
const dalvikBytecodeOperationShiftLeftIntLiteral8Parser = createDalvikBytecodeOperationBinaryOperationLiteral8('shl-int/lit8', 0xE0);
|
|
592
851
|
|
|
593
852
|
type DalvikBytecodeOperationShiftLeftIntLiteral8 = Awaited<ReturnType<typeof dalvikBytecodeOperationShiftLeftIntLiteral8Parser>>;
|
|
594
853
|
|
|
595
|
-
const dalvikBytecodeOperationShiftRightIntLiteral8Parser = createDalvikBytecodeOperationBinaryOperationLiteral8('shr-int/lit8',
|
|
854
|
+
const dalvikBytecodeOperationShiftRightIntLiteral8Parser = createDalvikBytecodeOperationBinaryOperationLiteral8('shr-int/lit8', 0xE1);
|
|
596
855
|
|
|
597
856
|
type DalvikBytecodeOperationShiftRightIntLiteral8 = Awaited<ReturnType<typeof dalvikBytecodeOperationShiftRightIntLiteral8Parser>>;
|
|
598
857
|
|
|
599
|
-
const dalvikBytecodeOperationUnsignedShiftRightIntLiteral8Parser = createDalvikBytecodeOperationBinaryOperationLiteral8('ushr-int/lit8',
|
|
858
|
+
const dalvikBytecodeOperationUnsignedShiftRightIntLiteral8Parser = createDalvikBytecodeOperationBinaryOperationLiteral8('ushr-int/lit8', 0xE2);
|
|
600
859
|
|
|
601
860
|
type DalvikBytecodeOperationUnsignedShiftRightIntLiteral8 = Awaited<ReturnType<typeof dalvikBytecodeOperationUnsignedShiftRightIntLiteral8Parser>>;
|
|
602
861
|
|
|
@@ -614,7 +873,7 @@ type DalvikBytecodeOperationBinaryOperationLiteral8 =
|
|
|
614
873
|
| DalvikBytecodeOperationUnsignedShiftRightIntLiteral8
|
|
615
874
|
;
|
|
616
875
|
|
|
617
|
-
const dalvikBytecodeOperationBinaryOperationLiteral8Parser: Parser<DalvikBytecodeOperationBinaryOperationLiteral8, Uint8Array> =
|
|
876
|
+
const dalvikBytecodeOperationBinaryOperationLiteral8Parser: Parser<DalvikBytecodeOperationBinaryOperationLiteral8, Uint8Array> = createDisjunctionParser([
|
|
618
877
|
dalvikBytecodeOperationAddIntLiteral8Parser,
|
|
619
878
|
dalvikBytecodeOperationReverseSubtractIntLiteral8Parser,
|
|
620
879
|
dalvikBytecodeOperationMultiplyIntLiteral8Parser,
|
|
@@ -646,35 +905,35 @@ const createDalvikBytecodeOperationBinaryOperationLiteral16 = <T extends string>
|
|
|
646
905
|
}),
|
|
647
906
|
);
|
|
648
907
|
|
|
649
|
-
const dalvikBytecodeOperationAddIntLiteral16Parser = createDalvikBytecodeOperationBinaryOperationLiteral16('add-int/lit16',
|
|
908
|
+
const dalvikBytecodeOperationAddIntLiteral16Parser = createDalvikBytecodeOperationBinaryOperationLiteral16('add-int/lit16', 0xD0);
|
|
650
909
|
|
|
651
910
|
type DalvikBytecodeOperationAddIntLiteral16 = Awaited<ReturnType<typeof dalvikBytecodeOperationAddIntLiteral16Parser>>;
|
|
652
911
|
|
|
653
|
-
const dalvikBytecodeOperationReverseSubtractIntLiteral16Parser = createDalvikBytecodeOperationBinaryOperationLiteral16('rsub-int
|
|
912
|
+
const dalvikBytecodeOperationReverseSubtractIntLiteral16Parser = createDalvikBytecodeOperationBinaryOperationLiteral16('rsub-int', 0xD1);
|
|
654
913
|
|
|
655
914
|
type DalvikBytecodeOperationReverseSubtractIntLiteral16 = Awaited<ReturnType<typeof dalvikBytecodeOperationReverseSubtractIntLiteral16Parser>>;
|
|
656
915
|
|
|
657
|
-
const dalvikBytecodeOperationMultiplyIntLiteral16Parser = createDalvikBytecodeOperationBinaryOperationLiteral16('mul-int/lit16',
|
|
916
|
+
const dalvikBytecodeOperationMultiplyIntLiteral16Parser = createDalvikBytecodeOperationBinaryOperationLiteral16('mul-int/lit16', 0xD2);
|
|
658
917
|
|
|
659
918
|
type DalvikBytecodeOperationMultiplyIntLiteral16 = Awaited<ReturnType<typeof dalvikBytecodeOperationMultiplyIntLiteral16Parser>>;
|
|
660
919
|
|
|
661
|
-
const dalvikBytecodeOperationDivideIntLiteral16Parser = createDalvikBytecodeOperationBinaryOperationLiteral16('div-int/lit16',
|
|
920
|
+
const dalvikBytecodeOperationDivideIntLiteral16Parser = createDalvikBytecodeOperationBinaryOperationLiteral16('div-int/lit16', 0xD3);
|
|
662
921
|
|
|
663
922
|
type DalvikBytecodeOperationDivideIntLiteral16 = Awaited<ReturnType<typeof dalvikBytecodeOperationDivideIntLiteral16Parser>>;
|
|
664
923
|
|
|
665
|
-
const dalvikBytecodeOperationRemainderIntLiteral16Parser = createDalvikBytecodeOperationBinaryOperationLiteral16('rem-int/lit16',
|
|
924
|
+
const dalvikBytecodeOperationRemainderIntLiteral16Parser = createDalvikBytecodeOperationBinaryOperationLiteral16('rem-int/lit16', 0xD4);
|
|
666
925
|
|
|
667
926
|
type DalvikBytecodeOperationRemainderIntLiteral16 = Awaited<ReturnType<typeof dalvikBytecodeOperationRemainderIntLiteral16Parser>>;
|
|
668
927
|
|
|
669
|
-
const dalvikBytecodeOperationAndIntLiteral16Parser = createDalvikBytecodeOperationBinaryOperationLiteral16('and-int/lit16',
|
|
928
|
+
const dalvikBytecodeOperationAndIntLiteral16Parser = createDalvikBytecodeOperationBinaryOperationLiteral16('and-int/lit16', 0xD5);
|
|
670
929
|
|
|
671
930
|
type DalvikBytecodeOperationAndIntLiteral16 = Awaited<ReturnType<typeof dalvikBytecodeOperationAndIntLiteral16Parser>>;
|
|
672
931
|
|
|
673
|
-
const dalvikBytecodeOperationOrIntLiteral16Parser = createDalvikBytecodeOperationBinaryOperationLiteral16('or-int/lit16',
|
|
932
|
+
const dalvikBytecodeOperationOrIntLiteral16Parser = createDalvikBytecodeOperationBinaryOperationLiteral16('or-int/lit16', 0xD6);
|
|
674
933
|
|
|
675
934
|
type DalvikBytecodeOperationOrIntLiteral16 = Awaited<ReturnType<typeof dalvikBytecodeOperationOrIntLiteral16Parser>>;
|
|
676
935
|
|
|
677
|
-
const dalvikBytecodeOperationXorIntLiteral16Parser = createDalvikBytecodeOperationBinaryOperationLiteral16('xor-int/lit16',
|
|
936
|
+
const dalvikBytecodeOperationXorIntLiteral16Parser = createDalvikBytecodeOperationBinaryOperationLiteral16('xor-int/lit16', 0xD7);
|
|
678
937
|
|
|
679
938
|
type DalvikBytecodeOperationXorIntLiteral16 = Awaited<ReturnType<typeof dalvikBytecodeOperationXorIntLiteral16Parser>>;
|
|
680
939
|
|
|
@@ -689,7 +948,7 @@ type DalvikBytecodeOperationBinaryOperationLiteral16 =
|
|
|
689
948
|
| DalvikBytecodeOperationXorIntLiteral16
|
|
690
949
|
;
|
|
691
950
|
|
|
692
|
-
const dalvikBytecodeOperationBinaryOperationLiteral16Parser: Parser<DalvikBytecodeOperationBinaryOperationLiteral16, Uint8Array> =
|
|
951
|
+
const dalvikBytecodeOperationBinaryOperationLiteral16Parser: Parser<DalvikBytecodeOperationBinaryOperationLiteral16, Uint8Array> = createDisjunctionParser([
|
|
693
952
|
dalvikBytecodeOperationAddIntLiteral16Parser,
|
|
694
953
|
dalvikBytecodeOperationReverseSubtractIntLiteral16Parser,
|
|
695
954
|
dalvikBytecodeOperationMultiplyIntLiteral16Parser,
|
|
@@ -716,127 +975,131 @@ const createDalvikBytecodeOperationBinaryOperationInPlace = <T extends string>(o
|
|
|
716
975
|
}),
|
|
717
976
|
);
|
|
718
977
|
|
|
719
|
-
const dalvikBytecodeOperationAddIntInPlaceParser = createDalvikBytecodeOperationBinaryOperationInPlace('add-int/2addr',
|
|
978
|
+
const dalvikBytecodeOperationAddIntInPlaceParser = createDalvikBytecodeOperationBinaryOperationInPlace('add-int/2addr', 0xB0);
|
|
720
979
|
|
|
721
980
|
type DalvikBytecodeOperationAddIntInPlace = Awaited<ReturnType<typeof dalvikBytecodeOperationAddIntInPlaceParser>>;
|
|
722
981
|
|
|
723
|
-
const dalvikBytecodeOperationReverseSubtractIntInPlaceParser = createDalvikBytecodeOperationBinaryOperationInPlace('
|
|
982
|
+
const dalvikBytecodeOperationReverseSubtractIntInPlaceParser = createDalvikBytecodeOperationBinaryOperationInPlace('sub-int/2addr', 0xB1);
|
|
724
983
|
|
|
725
984
|
type DalvikBytecodeOperationReverseSubtractIntInPlace = Awaited<ReturnType<typeof dalvikBytecodeOperationReverseSubtractIntInPlaceParser>>;
|
|
726
985
|
|
|
727
|
-
const dalvikBytecodeOperationMultiplyIntInPlaceParser = createDalvikBytecodeOperationBinaryOperationInPlace('mul-int/2addr',
|
|
986
|
+
const dalvikBytecodeOperationMultiplyIntInPlaceParser = createDalvikBytecodeOperationBinaryOperationInPlace('mul-int/2addr', 0xB2);
|
|
728
987
|
|
|
729
988
|
type DalvikBytecodeOperationMultiplyIntInPlace = Awaited<ReturnType<typeof dalvikBytecodeOperationMultiplyIntInPlaceParser>>;
|
|
730
989
|
|
|
731
|
-
const dalvikBytecodeOperationDivideIntInPlaceParser = createDalvikBytecodeOperationBinaryOperationInPlace('div-int/2addr',
|
|
990
|
+
const dalvikBytecodeOperationDivideIntInPlaceParser = createDalvikBytecodeOperationBinaryOperationInPlace('div-int/2addr', 0xB3);
|
|
732
991
|
|
|
733
992
|
type DalvikBytecodeOperationDivideIntInPlace = Awaited<ReturnType<typeof dalvikBytecodeOperationDivideIntInPlaceParser>>;
|
|
734
993
|
|
|
735
|
-
const dalvikBytecodeOperationRemainderIntInPlaceParser = createDalvikBytecodeOperationBinaryOperationInPlace('rem-int/2addr',
|
|
994
|
+
const dalvikBytecodeOperationRemainderIntInPlaceParser = createDalvikBytecodeOperationBinaryOperationInPlace('rem-int/2addr', 0xB4);
|
|
736
995
|
|
|
737
996
|
type DalvikBytecodeOperationRemainderIntInPlace = Awaited<ReturnType<typeof dalvikBytecodeOperationRemainderIntInPlaceParser>>;
|
|
738
997
|
|
|
739
|
-
const dalvikBytecodeOperationAndIntInPlaceParser = createDalvikBytecodeOperationBinaryOperationInPlace('and-int/2addr',
|
|
998
|
+
const dalvikBytecodeOperationAndIntInPlaceParser = createDalvikBytecodeOperationBinaryOperationInPlace('and-int/2addr', 0xB5);
|
|
740
999
|
|
|
741
1000
|
type DalvikBytecodeOperationAndIntInPlace = Awaited<ReturnType<typeof dalvikBytecodeOperationAndIntInPlaceParser>>;
|
|
742
1001
|
|
|
743
|
-
const dalvikBytecodeOperationOrIntInPlaceParser = createDalvikBytecodeOperationBinaryOperationInPlace('or-int/2addr',
|
|
1002
|
+
const dalvikBytecodeOperationOrIntInPlaceParser = createDalvikBytecodeOperationBinaryOperationInPlace('or-int/2addr', 0xB6);
|
|
744
1003
|
|
|
745
1004
|
type DalvikBytecodeOperationOrIntInPlace = Awaited<ReturnType<typeof dalvikBytecodeOperationOrIntInPlaceParser>>;
|
|
746
1005
|
|
|
747
|
-
const dalvikBytecodeOperationXorIntInPlaceParser = createDalvikBytecodeOperationBinaryOperationInPlace('xor-int/2addr',
|
|
1006
|
+
const dalvikBytecodeOperationXorIntInPlaceParser = createDalvikBytecodeOperationBinaryOperationInPlace('xor-int/2addr', 0xB7);
|
|
748
1007
|
|
|
749
1008
|
type DalvikBytecodeOperationXorIntInPlace = Awaited<ReturnType<typeof dalvikBytecodeOperationXorIntInPlaceParser>>;
|
|
750
1009
|
|
|
751
|
-
const dalvikBytecodeOperationShiftLeftIntInPlaceParser = createDalvikBytecodeOperationBinaryOperationInPlace('shl-int/2addr',
|
|
1010
|
+
const dalvikBytecodeOperationShiftLeftIntInPlaceParser = createDalvikBytecodeOperationBinaryOperationInPlace('shl-int/2addr', 0xB8);
|
|
752
1011
|
|
|
753
1012
|
type DalvikBytecodeOperationShiftLeftIntInPlace = Awaited<ReturnType<typeof dalvikBytecodeOperationShiftLeftIntInPlaceParser>>;
|
|
754
1013
|
|
|
755
|
-
const dalvikBytecodeOperationShiftRightIntInPlaceParser = createDalvikBytecodeOperationBinaryOperationInPlace('shr-int/2addr',
|
|
1014
|
+
const dalvikBytecodeOperationShiftRightIntInPlaceParser = createDalvikBytecodeOperationBinaryOperationInPlace('shr-int/2addr', 0xB9);
|
|
756
1015
|
|
|
757
1016
|
type DalvikBytecodeOperationShiftRightIntInPlace = Awaited<ReturnType<typeof dalvikBytecodeOperationShiftRightIntInPlaceParser>>;
|
|
758
1017
|
|
|
759
|
-
const dalvikBytecodeOperationUnsignedShiftRightIntInPlaceParser = createDalvikBytecodeOperationBinaryOperationInPlace('ushr-int/2addr',
|
|
1018
|
+
const dalvikBytecodeOperationUnsignedShiftRightIntInPlaceParser = createDalvikBytecodeOperationBinaryOperationInPlace('ushr-int/2addr', 0xBA);
|
|
760
1019
|
|
|
761
1020
|
type DalvikBytecodeOperationUnsignedShiftRightIntInPlace = Awaited<ReturnType<typeof dalvikBytecodeOperationUnsignedShiftRightIntInPlaceParser>>;
|
|
762
1021
|
|
|
763
|
-
const dalvikBytecodeOperationAddLongInPlaceParser = createDalvikBytecodeOperationBinaryOperationInPlace('add-long/2addr',
|
|
1022
|
+
const dalvikBytecodeOperationAddLongInPlaceParser = createDalvikBytecodeOperationBinaryOperationInPlace('add-long/2addr', 0xBB);
|
|
764
1023
|
|
|
765
1024
|
type DalvikBytecodeOperationAddLongInPlace = Awaited<ReturnType<typeof dalvikBytecodeOperationAddLongInPlaceParser>>;
|
|
766
1025
|
|
|
767
|
-
const
|
|
1026
|
+
const dalvikBytecodeOperationSubtractLongInPlaceParser = createDalvikBytecodeOperationBinaryOperationInPlace('sub-long/2addr', 0xBC);
|
|
768
1027
|
|
|
769
|
-
type
|
|
1028
|
+
type DalvikBytecodeOperationSubtractLongInPlace = Awaited<ReturnType<typeof dalvikBytecodeOperationSubtractLongInPlaceParser>>;
|
|
770
1029
|
|
|
771
|
-
const dalvikBytecodeOperationMultiplyLongInPlaceParser = createDalvikBytecodeOperationBinaryOperationInPlace('mul-long/2addr',
|
|
1030
|
+
const dalvikBytecodeOperationMultiplyLongInPlaceParser = createDalvikBytecodeOperationBinaryOperationInPlace('mul-long/2addr', 0xBD);
|
|
772
1031
|
|
|
773
1032
|
type DalvikBytecodeOperationMultiplyLongInPlace = Awaited<ReturnType<typeof dalvikBytecodeOperationMultiplyLongInPlaceParser>>;
|
|
774
1033
|
|
|
775
|
-
const dalvikBytecodeOperationDivideLongInPlaceParser = createDalvikBytecodeOperationBinaryOperationInPlace('div-long/2addr',
|
|
1034
|
+
const dalvikBytecodeOperationDivideLongInPlaceParser = createDalvikBytecodeOperationBinaryOperationInPlace('div-long/2addr', 0xBE);
|
|
776
1035
|
|
|
777
1036
|
type DalvikBytecodeOperationDivideLongInPlace = Awaited<ReturnType<typeof dalvikBytecodeOperationDivideLongInPlaceParser>>;
|
|
778
1037
|
|
|
779
|
-
const dalvikBytecodeOperationRemainderLongInPlaceParser = createDalvikBytecodeOperationBinaryOperationInPlace('rem-long/2addr',
|
|
1038
|
+
const dalvikBytecodeOperationRemainderLongInPlaceParser = createDalvikBytecodeOperationBinaryOperationInPlace('rem-long/2addr', 0xBF);
|
|
780
1039
|
|
|
781
1040
|
type DalvikBytecodeOperationRemainderLongInPlace = Awaited<ReturnType<typeof dalvikBytecodeOperationRemainderLongInPlaceParser>>;
|
|
782
1041
|
|
|
783
|
-
const dalvikBytecodeOperationAndLongInPlaceParser = createDalvikBytecodeOperationBinaryOperationInPlace('and-long/2addr',
|
|
1042
|
+
const dalvikBytecodeOperationAndLongInPlaceParser = createDalvikBytecodeOperationBinaryOperationInPlace('and-long/2addr', 0xC0);
|
|
784
1043
|
|
|
785
1044
|
type DalvikBytecodeOperationAndLongInPlace = Awaited<ReturnType<typeof dalvikBytecodeOperationAndLongInPlaceParser>>;
|
|
786
1045
|
|
|
787
|
-
const dalvikBytecodeOperationOrLongInPlaceParser = createDalvikBytecodeOperationBinaryOperationInPlace('or-long/2addr',
|
|
1046
|
+
const dalvikBytecodeOperationOrLongInPlaceParser = createDalvikBytecodeOperationBinaryOperationInPlace('or-long/2addr', 0xC1);
|
|
788
1047
|
|
|
789
1048
|
type DalvikBytecodeOperationOrLongInPlace = Awaited<ReturnType<typeof dalvikBytecodeOperationOrLongInPlaceParser>>;
|
|
790
1049
|
|
|
791
|
-
const dalvikBytecodeOperationXorLongInPlaceParser = createDalvikBytecodeOperationBinaryOperationInPlace('xor-long/2addr',
|
|
1050
|
+
const dalvikBytecodeOperationXorLongInPlaceParser = createDalvikBytecodeOperationBinaryOperationInPlace('xor-long/2addr', 0xC2);
|
|
792
1051
|
|
|
793
1052
|
type DalvikBytecodeOperationXorLongInPlace = Awaited<ReturnType<typeof dalvikBytecodeOperationXorLongInPlaceParser>>;
|
|
794
1053
|
|
|
795
|
-
const dalvikBytecodeOperationShiftLeftLongInPlaceParser = createDalvikBytecodeOperationBinaryOperationInPlace('shl-long/2addr',
|
|
1054
|
+
const dalvikBytecodeOperationShiftLeftLongInPlaceParser = createDalvikBytecodeOperationBinaryOperationInPlace('shl-long/2addr', 0xC3);
|
|
796
1055
|
|
|
797
1056
|
type DalvikBytecodeOperationShiftLeftLongInPlace = Awaited<ReturnType<typeof dalvikBytecodeOperationShiftLeftLongInPlaceParser>>;
|
|
798
1057
|
|
|
799
|
-
const dalvikBytecodeOperationShiftRightLongInPlaceParser = createDalvikBytecodeOperationBinaryOperationInPlace('shr-long/2addr',
|
|
1058
|
+
const dalvikBytecodeOperationShiftRightLongInPlaceParser = createDalvikBytecodeOperationBinaryOperationInPlace('shr-long/2addr', 0xC4);
|
|
800
1059
|
|
|
801
1060
|
type DalvikBytecodeOperationShiftRightLongInPlace = Awaited<ReturnType<typeof dalvikBytecodeOperationShiftRightLongInPlaceParser>>;
|
|
802
1061
|
|
|
803
|
-
const dalvikBytecodeOperationUnsignedShiftRightLongInPlaceParser = createDalvikBytecodeOperationBinaryOperationInPlace('ushr-long/2addr',
|
|
1062
|
+
const dalvikBytecodeOperationUnsignedShiftRightLongInPlaceParser = createDalvikBytecodeOperationBinaryOperationInPlace('ushr-long/2addr', 0xC5);
|
|
804
1063
|
|
|
805
1064
|
type DalvikBytecodeOperationUnsignedShiftRightLongInPlace = Awaited<ReturnType<typeof dalvikBytecodeOperationUnsignedShiftRightLongInPlaceParser>>;
|
|
806
1065
|
|
|
807
|
-
const dalvikBytecodeOperationAddFloatInPlaceParser = createDalvikBytecodeOperationBinaryOperationInPlace('add-float/2addr',
|
|
1066
|
+
const dalvikBytecodeOperationAddFloatInPlaceParser = createDalvikBytecodeOperationBinaryOperationInPlace('add-float/2addr', 0xC6);
|
|
808
1067
|
|
|
809
1068
|
type DalvikBytecodeOperationAddFloatInPlace = Awaited<ReturnType<typeof dalvikBytecodeOperationAddFloatInPlaceParser>>;
|
|
810
1069
|
|
|
811
|
-
const dalvikBytecodeOperationSubtractFloatInPlaceParser = createDalvikBytecodeOperationBinaryOperationInPlace('sub-float/2addr',
|
|
1070
|
+
const dalvikBytecodeOperationSubtractFloatInPlaceParser = createDalvikBytecodeOperationBinaryOperationInPlace('sub-float/2addr', 0xC7);
|
|
812
1071
|
|
|
813
1072
|
type DalvikBytecodeOperationSubtractFloatInPlace = Awaited<ReturnType<typeof dalvikBytecodeOperationSubtractFloatInPlaceParser>>;
|
|
814
1073
|
|
|
815
|
-
const dalvikBytecodeOperationMultiplyFloatInPlaceParser = createDalvikBytecodeOperationBinaryOperationInPlace('mul-float/2addr',
|
|
1074
|
+
const dalvikBytecodeOperationMultiplyFloatInPlaceParser = createDalvikBytecodeOperationBinaryOperationInPlace('mul-float/2addr', 0xC8);
|
|
816
1075
|
|
|
817
1076
|
type DalvikBytecodeOperationMultiplyFloatInPlace = Awaited<ReturnType<typeof dalvikBytecodeOperationMultiplyFloatInPlaceParser>>;
|
|
818
1077
|
|
|
819
|
-
const dalvikBytecodeOperationDivideFloatInPlaceParser = createDalvikBytecodeOperationBinaryOperationInPlace('div-float/2addr',
|
|
1078
|
+
const dalvikBytecodeOperationDivideFloatInPlaceParser = createDalvikBytecodeOperationBinaryOperationInPlace('div-float/2addr', 0xC9);
|
|
820
1079
|
|
|
821
1080
|
type DalvikBytecodeOperationDivideFloatInPlace = Awaited<ReturnType<typeof dalvikBytecodeOperationDivideFloatInPlaceParser>>;
|
|
822
1081
|
|
|
823
|
-
const
|
|
1082
|
+
const dalvikBytecodeOperationRemainderFloatInPlaceParser = createDalvikBytecodeOperationBinaryOperationInPlace('rem-float/2addr', 0xCA);
|
|
1083
|
+
|
|
1084
|
+
type DalvikBytecodeOperationRemainderFloatInPlace = Awaited<ReturnType<typeof dalvikBytecodeOperationRemainderFloatInPlaceParser>>;
|
|
1085
|
+
|
|
1086
|
+
const dalvikBytecodeOperationAddDoubleInPlaceParser = createDalvikBytecodeOperationBinaryOperationInPlace('add-double/2addr', 0xCB);
|
|
824
1087
|
|
|
825
1088
|
type DalvikBytecodeOperationAddDoubleInPlace = Awaited<ReturnType<typeof dalvikBytecodeOperationAddDoubleInPlaceParser>>;
|
|
826
1089
|
|
|
827
|
-
const dalvikBytecodeOperationSubtractDoubleInPlaceParser = createDalvikBytecodeOperationBinaryOperationInPlace('sub-double/2addr',
|
|
1090
|
+
const dalvikBytecodeOperationSubtractDoubleInPlaceParser = createDalvikBytecodeOperationBinaryOperationInPlace('sub-double/2addr', 0xCC);
|
|
828
1091
|
|
|
829
1092
|
type DalvikBytecodeOperationSubtractDoubleInPlace = Awaited<ReturnType<typeof dalvikBytecodeOperationSubtractDoubleInPlaceParser>>;
|
|
830
1093
|
|
|
831
|
-
const dalvikBytecodeOperationMultiplyDoubleInPlaceParser = createDalvikBytecodeOperationBinaryOperationInPlace('mul-double/2addr',
|
|
1094
|
+
const dalvikBytecodeOperationMultiplyDoubleInPlaceParser = createDalvikBytecodeOperationBinaryOperationInPlace('mul-double/2addr', 0xCD);
|
|
832
1095
|
|
|
833
1096
|
type DalvikBytecodeOperationMultiplyDoubleInPlace = Awaited<ReturnType<typeof dalvikBytecodeOperationMultiplyDoubleInPlaceParser>>;
|
|
834
1097
|
|
|
835
|
-
const dalvikBytecodeOperationDivideDoubleInPlaceParser = createDalvikBytecodeOperationBinaryOperationInPlace('div-double/2addr',
|
|
1098
|
+
const dalvikBytecodeOperationDivideDoubleInPlaceParser = createDalvikBytecodeOperationBinaryOperationInPlace('div-double/2addr', 0xCE);
|
|
836
1099
|
|
|
837
1100
|
type DalvikBytecodeOperationDivideDoubleInPlace = Awaited<ReturnType<typeof dalvikBytecodeOperationDivideDoubleInPlaceParser>>;
|
|
838
1101
|
|
|
839
|
-
const dalvikBytecodeOperationRemainderDoubleInPlaceParser = createDalvikBytecodeOperationBinaryOperationInPlace('rem-double/2addr',
|
|
1102
|
+
const dalvikBytecodeOperationRemainderDoubleInPlaceParser = createDalvikBytecodeOperationBinaryOperationInPlace('rem-double/2addr', 0xCF);
|
|
840
1103
|
|
|
841
1104
|
type DalvikBytecodeOperationRemainderDoubleInPlace = Awaited<ReturnType<typeof dalvikBytecodeOperationRemainderDoubleInPlaceParser>>;
|
|
842
1105
|
|
|
@@ -853,7 +1116,7 @@ type DalvikBytecodeOperationBinaryOperationInPlace =
|
|
|
853
1116
|
| DalvikBytecodeOperationShiftRightIntInPlace
|
|
854
1117
|
| DalvikBytecodeOperationUnsignedShiftRightIntInPlace
|
|
855
1118
|
| DalvikBytecodeOperationAddLongInPlace
|
|
856
|
-
|
|
|
1119
|
+
| DalvikBytecodeOperationSubtractLongInPlace
|
|
857
1120
|
| DalvikBytecodeOperationMultiplyLongInPlace
|
|
858
1121
|
| DalvikBytecodeOperationDivideLongInPlace
|
|
859
1122
|
| DalvikBytecodeOperationRemainderLongInPlace
|
|
@@ -867,6 +1130,7 @@ type DalvikBytecodeOperationBinaryOperationInPlace =
|
|
|
867
1130
|
| DalvikBytecodeOperationSubtractFloatInPlace
|
|
868
1131
|
| DalvikBytecodeOperationMultiplyFloatInPlace
|
|
869
1132
|
| DalvikBytecodeOperationDivideFloatInPlace
|
|
1133
|
+
| DalvikBytecodeOperationRemainderFloatInPlace
|
|
870
1134
|
| DalvikBytecodeOperationAddDoubleInPlace
|
|
871
1135
|
| DalvikBytecodeOperationSubtractDoubleInPlace
|
|
872
1136
|
| DalvikBytecodeOperationMultiplyDoubleInPlace
|
|
@@ -874,7 +1138,7 @@ type DalvikBytecodeOperationBinaryOperationInPlace =
|
|
|
874
1138
|
| DalvikBytecodeOperationRemainderDoubleInPlace
|
|
875
1139
|
;
|
|
876
1140
|
|
|
877
|
-
const dalvikBytecodeOperationBinaryOperationInPlaceParser: Parser<DalvikBytecodeOperationBinaryOperationInPlace, Uint8Array> =
|
|
1141
|
+
const dalvikBytecodeOperationBinaryOperationInPlaceParser: Parser<DalvikBytecodeOperationBinaryOperationInPlace, Uint8Array> = createDisjunctionParser([
|
|
878
1142
|
dalvikBytecodeOperationAddIntInPlaceParser,
|
|
879
1143
|
dalvikBytecodeOperationReverseSubtractIntInPlaceParser,
|
|
880
1144
|
dalvikBytecodeOperationMultiplyIntInPlaceParser,
|
|
@@ -887,7 +1151,7 @@ const dalvikBytecodeOperationBinaryOperationInPlaceParser: Parser<DalvikBytecode
|
|
|
887
1151
|
dalvikBytecodeOperationShiftRightIntInPlaceParser,
|
|
888
1152
|
dalvikBytecodeOperationUnsignedShiftRightIntInPlaceParser,
|
|
889
1153
|
dalvikBytecodeOperationAddLongInPlaceParser,
|
|
890
|
-
|
|
1154
|
+
dalvikBytecodeOperationSubtractLongInPlaceParser,
|
|
891
1155
|
dalvikBytecodeOperationMultiplyLongInPlaceParser,
|
|
892
1156
|
dalvikBytecodeOperationDivideLongInPlaceParser,
|
|
893
1157
|
dalvikBytecodeOperationRemainderLongInPlaceParser,
|
|
@@ -901,6 +1165,7 @@ const dalvikBytecodeOperationBinaryOperationInPlaceParser: Parser<DalvikBytecode
|
|
|
901
1165
|
dalvikBytecodeOperationSubtractFloatInPlaceParser,
|
|
902
1166
|
dalvikBytecodeOperationMultiplyFloatInPlaceParser,
|
|
903
1167
|
dalvikBytecodeOperationDivideFloatInPlaceParser,
|
|
1168
|
+
dalvikBytecodeOperationRemainderFloatInPlaceParser,
|
|
904
1169
|
dalvikBytecodeOperationAddDoubleInPlaceParser,
|
|
905
1170
|
dalvikBytecodeOperationSubtractDoubleInPlaceParser,
|
|
906
1171
|
dalvikBytecodeOperationMultiplyDoubleInPlaceParser,
|
|
@@ -964,87 +1229,87 @@ const dalvikBytecodeOperationShiftRightIntParser = createDalvikBytecodeOperation
|
|
|
964
1229
|
|
|
965
1230
|
type DalvikBytecodeOperationShiftRightInt = Awaited<ReturnType<typeof dalvikBytecodeOperationShiftRightIntParser>>;
|
|
966
1231
|
|
|
967
|
-
const dalvikBytecodeOperationUnsignedShiftRightIntParser = createDalvikBytecodeOperationBinaryOperation('ushr-int',
|
|
1232
|
+
const dalvikBytecodeOperationUnsignedShiftRightIntParser = createDalvikBytecodeOperationBinaryOperation('ushr-int', 0x9A);
|
|
968
1233
|
|
|
969
1234
|
type DalvikBytecodeOperationUnsignedShiftRightInt = Awaited<ReturnType<typeof dalvikBytecodeOperationUnsignedShiftRightIntParser>>;
|
|
970
1235
|
|
|
971
|
-
const dalvikBytecodeOperationAddLongParser = createDalvikBytecodeOperationBinaryOperation('add-long',
|
|
1236
|
+
const dalvikBytecodeOperationAddLongParser = createDalvikBytecodeOperationBinaryOperation('add-long', 0x9B);
|
|
972
1237
|
|
|
973
1238
|
type DalvikBytecodeOperationAddLong = Awaited<ReturnType<typeof dalvikBytecodeOperationAddLongParser>>;
|
|
974
1239
|
|
|
975
|
-
const dalvikBytecodeOperationSubtractLongParser = createDalvikBytecodeOperationBinaryOperation('sub-long',
|
|
1240
|
+
const dalvikBytecodeOperationSubtractLongParser = createDalvikBytecodeOperationBinaryOperation('sub-long', 0x9C);
|
|
976
1241
|
|
|
977
1242
|
type DalvikBytecodeOperationSubtractLong = Awaited<ReturnType<typeof dalvikBytecodeOperationSubtractLongParser>>;
|
|
978
1243
|
|
|
979
|
-
const dalvikBytecodeOperationMultiplyLongParser = createDalvikBytecodeOperationBinaryOperation('mul-long',
|
|
1244
|
+
const dalvikBytecodeOperationMultiplyLongParser = createDalvikBytecodeOperationBinaryOperation('mul-long', 0x9D);
|
|
980
1245
|
|
|
981
1246
|
type DalvikBytecodeOperationMultiplyLong = Awaited<ReturnType<typeof dalvikBytecodeOperationMultiplyLongParser>>;
|
|
982
1247
|
|
|
983
|
-
const dalvikBytecodeOperationDivideLongParser = createDalvikBytecodeOperationBinaryOperation('div-long',
|
|
1248
|
+
const dalvikBytecodeOperationDivideLongParser = createDalvikBytecodeOperationBinaryOperation('div-long', 0x9E);
|
|
984
1249
|
|
|
985
1250
|
type DalvikBytecodeOperationDivideLong = Awaited<ReturnType<typeof dalvikBytecodeOperationDivideLongParser>>;
|
|
986
1251
|
|
|
987
|
-
const dalvikBytecodeOperationRemainderLongParser = createDalvikBytecodeOperationBinaryOperation('rem-long',
|
|
1252
|
+
const dalvikBytecodeOperationRemainderLongParser = createDalvikBytecodeOperationBinaryOperation('rem-long', 0x9F);
|
|
988
1253
|
|
|
989
1254
|
type DalvikBytecodeOperationRemainderLong = Awaited<ReturnType<typeof dalvikBytecodeOperationRemainderLongParser>>;
|
|
990
1255
|
|
|
991
|
-
const dalvikBytecodeOperationAndLongParser = createDalvikBytecodeOperationBinaryOperation('and-long',
|
|
1256
|
+
const dalvikBytecodeOperationAndLongParser = createDalvikBytecodeOperationBinaryOperation('and-long', 0xA0);
|
|
992
1257
|
|
|
993
1258
|
type DalvikBytecodeOperationAndLong = Awaited<ReturnType<typeof dalvikBytecodeOperationAndLongParser>>;
|
|
994
1259
|
|
|
995
|
-
const dalvikBytecodeOperationOrLongParser = createDalvikBytecodeOperationBinaryOperation('or-long',
|
|
1260
|
+
const dalvikBytecodeOperationOrLongParser = createDalvikBytecodeOperationBinaryOperation('or-long', 0xA1);
|
|
996
1261
|
|
|
997
1262
|
type DalvikBytecodeOperationOrLong = Awaited<ReturnType<typeof dalvikBytecodeOperationOrLongParser>>;
|
|
998
1263
|
|
|
999
|
-
const dalvikBytecodeOperationXorLongParser = createDalvikBytecodeOperationBinaryOperation('xor-long',
|
|
1264
|
+
const dalvikBytecodeOperationXorLongParser = createDalvikBytecodeOperationBinaryOperation('xor-long', 0xA2);
|
|
1000
1265
|
|
|
1001
1266
|
type DalvikBytecodeOperationXorLong = Awaited<ReturnType<typeof dalvikBytecodeOperationXorLongParser>>;
|
|
1002
1267
|
|
|
1003
|
-
const dalvikBytecodeOperationShiftLeftLongParser = createDalvikBytecodeOperationBinaryOperation('shl-long',
|
|
1268
|
+
const dalvikBytecodeOperationShiftLeftLongParser = createDalvikBytecodeOperationBinaryOperation('shl-long', 0xA3);
|
|
1004
1269
|
|
|
1005
1270
|
type DalvikBytecodeOperationShiftLeftLong = Awaited<ReturnType<typeof dalvikBytecodeOperationShiftLeftLongParser>>;
|
|
1006
1271
|
|
|
1007
|
-
const dalvikBytecodeOperationShiftRightLongParser = createDalvikBytecodeOperationBinaryOperation('shr-long',
|
|
1272
|
+
const dalvikBytecodeOperationShiftRightLongParser = createDalvikBytecodeOperationBinaryOperation('shr-long', 0xA4);
|
|
1008
1273
|
|
|
1009
1274
|
type DalvikBytecodeOperationShiftRightLong = Awaited<ReturnType<typeof dalvikBytecodeOperationShiftRightLongParser>>;
|
|
1010
1275
|
|
|
1011
|
-
const dalvikBytecodeOperationUnsignedShiftRightLongParser = createDalvikBytecodeOperationBinaryOperation('ushr-long',
|
|
1276
|
+
const dalvikBytecodeOperationUnsignedShiftRightLongParser = createDalvikBytecodeOperationBinaryOperation('ushr-long', 0xA5);
|
|
1012
1277
|
|
|
1013
1278
|
type DalvikBytecodeOperationUnsignedShiftRightLong = Awaited<ReturnType<typeof dalvikBytecodeOperationUnsignedShiftRightLongParser>>;
|
|
1014
1279
|
|
|
1015
|
-
const dalvikBytecodeOperationAddFloatParser = createDalvikBytecodeOperationBinaryOperation('add-float',
|
|
1280
|
+
const dalvikBytecodeOperationAddFloatParser = createDalvikBytecodeOperationBinaryOperation('add-float', 0xA6);
|
|
1016
1281
|
|
|
1017
1282
|
type DalvikBytecodeOperationAddFloat = Awaited<ReturnType<typeof dalvikBytecodeOperationAddFloatParser>>;
|
|
1018
1283
|
|
|
1019
|
-
const dalvikBytecodeOperationSubtractFloatParser = createDalvikBytecodeOperationBinaryOperation('sub-float',
|
|
1284
|
+
const dalvikBytecodeOperationSubtractFloatParser = createDalvikBytecodeOperationBinaryOperation('sub-float', 0xA7);
|
|
1020
1285
|
|
|
1021
1286
|
type DalvikBytecodeOperationSubtractFloat = Awaited<ReturnType<typeof dalvikBytecodeOperationSubtractFloatParser>>;
|
|
1022
1287
|
|
|
1023
|
-
const dalvikBytecodeOperationMultiplyFloatParser = createDalvikBytecodeOperationBinaryOperation('mul-float',
|
|
1288
|
+
const dalvikBytecodeOperationMultiplyFloatParser = createDalvikBytecodeOperationBinaryOperation('mul-float', 0xA8);
|
|
1024
1289
|
|
|
1025
1290
|
type DalvikBytecodeOperationMultiplyFloat = Awaited<ReturnType<typeof dalvikBytecodeOperationMultiplyFloatParser>>;
|
|
1026
1291
|
|
|
1027
|
-
const dalvikBytecodeOperationDivideFloatParser = createDalvikBytecodeOperationBinaryOperation('div-float',
|
|
1292
|
+
const dalvikBytecodeOperationDivideFloatParser = createDalvikBytecodeOperationBinaryOperation('div-float', 0xA9);
|
|
1028
1293
|
|
|
1029
1294
|
type DalvikBytecodeOperationDivideFloat = Awaited<ReturnType<typeof dalvikBytecodeOperationDivideFloatParser>>;
|
|
1030
1295
|
|
|
1031
|
-
const dalvikBytecodeOperationAddDoubleParser = createDalvikBytecodeOperationBinaryOperation('add-double',
|
|
1296
|
+
const dalvikBytecodeOperationAddDoubleParser = createDalvikBytecodeOperationBinaryOperation('add-double', 0xAB);
|
|
1032
1297
|
|
|
1033
1298
|
type DalvikBytecodeOperationAddDouble = Awaited<ReturnType<typeof dalvikBytecodeOperationAddDoubleParser>>;
|
|
1034
1299
|
|
|
1035
|
-
const dalvikBytecodeOperationSubtractDoubleParser = createDalvikBytecodeOperationBinaryOperation('sub-double',
|
|
1300
|
+
const dalvikBytecodeOperationSubtractDoubleParser = createDalvikBytecodeOperationBinaryOperation('sub-double', 0xAC);
|
|
1036
1301
|
|
|
1037
1302
|
type DalvikBytecodeOperationSubtractDouble = Awaited<ReturnType<typeof dalvikBytecodeOperationSubtractDoubleParser>>;
|
|
1038
1303
|
|
|
1039
|
-
const dalvikBytecodeOperationMultiplyDoubleParser = createDalvikBytecodeOperationBinaryOperation('mul-double',
|
|
1304
|
+
const dalvikBytecodeOperationMultiplyDoubleParser = createDalvikBytecodeOperationBinaryOperation('mul-double', 0xAD);
|
|
1040
1305
|
|
|
1041
1306
|
type DalvikBytecodeOperationMultiplyDouble = Awaited<ReturnType<typeof dalvikBytecodeOperationMultiplyDoubleParser>>;
|
|
1042
1307
|
|
|
1043
|
-
const dalvikBytecodeOperationDivideDoubleParser = createDalvikBytecodeOperationBinaryOperation('div-double',
|
|
1308
|
+
const dalvikBytecodeOperationDivideDoubleParser = createDalvikBytecodeOperationBinaryOperation('div-double', 0xAE);
|
|
1044
1309
|
|
|
1045
1310
|
type DalvikBytecodeOperationDivideDouble = Awaited<ReturnType<typeof dalvikBytecodeOperationDivideDoubleParser>>;
|
|
1046
1311
|
|
|
1047
|
-
const dalvikBytecodeOperationRemainderDoubleParser = createDalvikBytecodeOperationBinaryOperation('rem-double',
|
|
1312
|
+
const dalvikBytecodeOperationRemainderDoubleParser = createDalvikBytecodeOperationBinaryOperation('rem-double', 0xAF);
|
|
1048
1313
|
|
|
1049
1314
|
type DalvikBytecodeOperationRemainderDouble = Awaited<ReturnType<typeof dalvikBytecodeOperationRemainderDoubleParser>>;
|
|
1050
1315
|
|
|
@@ -1082,7 +1347,7 @@ type DalvikBytecodeOperationBinaryOperation =
|
|
|
1082
1347
|
| DalvikBytecodeOperationRemainderDouble
|
|
1083
1348
|
;
|
|
1084
1349
|
|
|
1085
|
-
const dalvikBytecodeOperationBinaryOperationParser: Parser<DalvikBytecodeOperationBinaryOperation, Uint8Array> =
|
|
1350
|
+
const dalvikBytecodeOperationBinaryOperationParser: Parser<DalvikBytecodeOperationBinaryOperation, Uint8Array> = createDisjunctionParser([
|
|
1086
1351
|
dalvikBytecodeOperationAddIntParser,
|
|
1087
1352
|
dalvikBytecodeOperationSubtractIntParser,
|
|
1088
1353
|
dalvikBytecodeOperationMultiplyIntParser,
|
|
@@ -1132,23 +1397,23 @@ const createDalvikBytecodeOperationUnaryOperation = <T extends string>(operation
|
|
|
1132
1397
|
}),
|
|
1133
1398
|
);
|
|
1134
1399
|
|
|
1135
|
-
const dalvikBytecodeOperationNegateIntParser = createDalvikBytecodeOperationUnaryOperation('neg-int',
|
|
1400
|
+
const dalvikBytecodeOperationNegateIntParser = createDalvikBytecodeOperationUnaryOperation('neg-int', 0x7B);
|
|
1136
1401
|
|
|
1137
1402
|
type DalvikBytecodeOperationNegateInt = Awaited<ReturnType<typeof dalvikBytecodeOperationNegateIntParser>>;
|
|
1138
1403
|
|
|
1139
|
-
const dalvikBytecodeOperationNotIntParser = createDalvikBytecodeOperationUnaryOperation('not-int',
|
|
1404
|
+
const dalvikBytecodeOperationNotIntParser = createDalvikBytecodeOperationUnaryOperation('not-int', 0x7C);
|
|
1140
1405
|
|
|
1141
1406
|
type DalvikBytecodeOperationNotInt = Awaited<ReturnType<typeof dalvikBytecodeOperationNotIntParser>>;
|
|
1142
1407
|
|
|
1143
|
-
const dalvikBytecodeOperationNegateLongParser = createDalvikBytecodeOperationUnaryOperation('neg-long',
|
|
1408
|
+
const dalvikBytecodeOperationNegateLongParser = createDalvikBytecodeOperationUnaryOperation('neg-long', 0x7D);
|
|
1144
1409
|
|
|
1145
1410
|
type DalvikBytecodeOperationNegateLong = Awaited<ReturnType<typeof dalvikBytecodeOperationNegateLongParser>>;
|
|
1146
1411
|
|
|
1147
|
-
const dalvikBytecodeOperationNotLongParser = createDalvikBytecodeOperationUnaryOperation('not-long',
|
|
1412
|
+
const dalvikBytecodeOperationNotLongParser = createDalvikBytecodeOperationUnaryOperation('not-long', 0x7E);
|
|
1148
1413
|
|
|
1149
1414
|
type DalvikBytecodeOperationNotLong = Awaited<ReturnType<typeof dalvikBytecodeOperationNotLongParser>>;
|
|
1150
1415
|
|
|
1151
|
-
const dalvikBytecodeOperationNegateFloatParser = createDalvikBytecodeOperationUnaryOperation('neg-float',
|
|
1416
|
+
const dalvikBytecodeOperationNegateFloatParser = createDalvikBytecodeOperationUnaryOperation('neg-float', 0x7F);
|
|
1152
1417
|
|
|
1153
1418
|
type DalvikBytecodeOperationNegateFloat = Awaited<ReturnType<typeof dalvikBytecodeOperationNegateFloatParser>>;
|
|
1154
1419
|
|
|
@@ -1192,27 +1457,27 @@ const dalvikBytecodeOperationFloatToDoubleParser = createDalvikBytecodeOperation
|
|
|
1192
1457
|
|
|
1193
1458
|
type DalvikBytecodeOperationFloatToDouble = Awaited<ReturnType<typeof dalvikBytecodeOperationFloatToDoubleParser>>;
|
|
1194
1459
|
|
|
1195
|
-
const dalvikBytecodeOperationDoubleToIntParser = createDalvikBytecodeOperationUnaryOperation('double-to-int',
|
|
1460
|
+
const dalvikBytecodeOperationDoubleToIntParser = createDalvikBytecodeOperationUnaryOperation('double-to-int', 0x8A);
|
|
1196
1461
|
|
|
1197
1462
|
type DalvikBytecodeOperationDoubleToInt = Awaited<ReturnType<typeof dalvikBytecodeOperationDoubleToIntParser>>;
|
|
1198
1463
|
|
|
1199
|
-
const dalvikBytecodeOperationDoubleToLongParser = createDalvikBytecodeOperationUnaryOperation('double-to-long',
|
|
1464
|
+
const dalvikBytecodeOperationDoubleToLongParser = createDalvikBytecodeOperationUnaryOperation('double-to-long', 0x8B);
|
|
1200
1465
|
|
|
1201
1466
|
type DalvikBytecodeOperationDoubleToLong = Awaited<ReturnType<typeof dalvikBytecodeOperationDoubleToLongParser>>;
|
|
1202
1467
|
|
|
1203
|
-
const dalvikBytecodeOperationDoubleToFloatParser = createDalvikBytecodeOperationUnaryOperation('double-to-float',
|
|
1468
|
+
const dalvikBytecodeOperationDoubleToFloatParser = createDalvikBytecodeOperationUnaryOperation('double-to-float', 0x8C);
|
|
1204
1469
|
|
|
1205
1470
|
type DalvikBytecodeOperationDoubleToFloat = Awaited<ReturnType<typeof dalvikBytecodeOperationDoubleToFloatParser>>;
|
|
1206
1471
|
|
|
1207
|
-
const dalvikBytecodeOperationIntToByteParser = createDalvikBytecodeOperationUnaryOperation('int-to-byte',
|
|
1472
|
+
const dalvikBytecodeOperationIntToByteParser = createDalvikBytecodeOperationUnaryOperation('int-to-byte', 0x8D);
|
|
1208
1473
|
|
|
1209
1474
|
type DalvikBytecodeOperationIntToByte = Awaited<ReturnType<typeof dalvikBytecodeOperationIntToByteParser>>;
|
|
1210
1475
|
|
|
1211
|
-
const dalvikBytecodeOperationIntToCharParser = createDalvikBytecodeOperationUnaryOperation('int-to-char',
|
|
1476
|
+
const dalvikBytecodeOperationIntToCharParser = createDalvikBytecodeOperationUnaryOperation('int-to-char', 0x8E);
|
|
1212
1477
|
|
|
1213
1478
|
type DalvikBytecodeOperationIntToChar = Awaited<ReturnType<typeof dalvikBytecodeOperationIntToCharParser>>;
|
|
1214
1479
|
|
|
1215
|
-
const dalvikBytecodeOperationIntToShortParser = createDalvikBytecodeOperationUnaryOperation('int-to-short',
|
|
1480
|
+
const dalvikBytecodeOperationIntToShortParser = createDalvikBytecodeOperationUnaryOperation('int-to-short', 0x8F);
|
|
1216
1481
|
|
|
1217
1482
|
type DalvikBytecodeOperationIntToShort = Awaited<ReturnType<typeof dalvikBytecodeOperationIntToShortParser>>;
|
|
1218
1483
|
|
|
@@ -1240,7 +1505,7 @@ type DalvikBytecodeOperationUnaryOperation =
|
|
|
1240
1505
|
| DalvikBytecodeOperationIntToShort
|
|
1241
1506
|
;
|
|
1242
1507
|
|
|
1243
|
-
const dalvikBytecodeOperationUnaryOperationParser: Parser<DalvikBytecodeOperationUnaryOperation, Uint8Array> =
|
|
1508
|
+
const dalvikBytecodeOperationUnaryOperationParser: Parser<DalvikBytecodeOperationUnaryOperation, Uint8Array> = createDisjunctionParser([
|
|
1244
1509
|
dalvikBytecodeOperationNegateIntParser,
|
|
1245
1510
|
dalvikBytecodeOperationNotIntParser,
|
|
1246
1511
|
dalvikBytecodeOperationNegateLongParser,
|
|
@@ -1266,6 +1531,24 @@ const dalvikBytecodeOperationUnaryOperationParser: Parser<DalvikBytecodeOperatio
|
|
|
1266
1531
|
|
|
1267
1532
|
setParserName(dalvikBytecodeOperationUnaryOperationParser, 'dalvikBytecodeOperationUnaryOperationParser');
|
|
1268
1533
|
|
|
1534
|
+
// For commutative comparison operations (if-eq, if-ne), sort registers to match baksmali's canonical output
|
|
1535
|
+
const createDalvikBytecodeOperationIfTestCommutative = <T extends string>(operation: T, opcode: number): Parser<{
|
|
1536
|
+
operation: T;
|
|
1537
|
+
registers: number[];
|
|
1538
|
+
branchOffset: number;
|
|
1539
|
+
}, Uint8Array> => promiseCompose(
|
|
1540
|
+
createTupleParser([
|
|
1541
|
+
createExactElementParser(opcode),
|
|
1542
|
+
createDalvikBytecodeFormat22tParser(),
|
|
1543
|
+
]),
|
|
1544
|
+
([ _opcode, { registers, branchOffset } ]) => ({
|
|
1545
|
+
operation,
|
|
1546
|
+
registers: registers.sort((a, b) => a - b),
|
|
1547
|
+
branchOffset,
|
|
1548
|
+
}),
|
|
1549
|
+
);
|
|
1550
|
+
|
|
1551
|
+
// For non-commutative comparison operations (if-lt, if-ge, if-gt, if-le), reverse to get correct semantic order
|
|
1269
1552
|
const createDalvikBytecodeOperationIfTest = <T extends string>(operation: T, opcode: number): Parser<{
|
|
1270
1553
|
operation: T;
|
|
1271
1554
|
registers: number[];
|
|
@@ -1277,16 +1560,16 @@ const createDalvikBytecodeOperationIfTest = <T extends string>(operation: T, opc
|
|
|
1277
1560
|
]),
|
|
1278
1561
|
([ _opcode, { registers, branchOffset } ]) => ({
|
|
1279
1562
|
operation,
|
|
1280
|
-
registers,
|
|
1563
|
+
registers: registers.reverse(),
|
|
1281
1564
|
branchOffset,
|
|
1282
1565
|
}),
|
|
1283
1566
|
);
|
|
1284
1567
|
|
|
1285
|
-
const dalvikBytecodeIfEqualParser =
|
|
1568
|
+
const dalvikBytecodeIfEqualParser = createDalvikBytecodeOperationIfTestCommutative('if-eq', 0x32);
|
|
1286
1569
|
|
|
1287
1570
|
type DalvikBytecodeOperationIfEqual = Awaited<ReturnType<typeof dalvikBytecodeIfEqualParser>>;
|
|
1288
1571
|
|
|
1289
|
-
const dalvikBytecodeIfNotEqualParser =
|
|
1572
|
+
const dalvikBytecodeIfNotEqualParser = createDalvikBytecodeOperationIfTestCommutative('if-ne', 0x33);
|
|
1290
1573
|
|
|
1291
1574
|
type DalvikBytecodeOperationIfNotEqual = Awaited<ReturnType<typeof dalvikBytecodeIfNotEqualParser>>;
|
|
1292
1575
|
|
|
@@ -1315,7 +1598,7 @@ type DalvikBytecodeOperationIfTest =
|
|
|
1315
1598
|
| DalvikBytecodeOperationIfLessThanOrEqualTo
|
|
1316
1599
|
;
|
|
1317
1600
|
|
|
1318
|
-
const dalvikBytecodeOperationIfTestParser: Parser<DalvikBytecodeOperationIfTest, Uint8Array> =
|
|
1601
|
+
const dalvikBytecodeOperationIfTestParser: Parser<DalvikBytecodeOperationIfTest, Uint8Array> = createDisjunctionParser([
|
|
1319
1602
|
dalvikBytecodeIfEqualParser,
|
|
1320
1603
|
dalvikBytecodeIfNotEqualParser,
|
|
1321
1604
|
dalvikBytecodeIfLessThanParser,
|
|
@@ -1350,19 +1633,19 @@ const dalvikBytecodeIfNotEqualZeroParser = createDalvikBytecodeOperationIfTestZe
|
|
|
1350
1633
|
|
|
1351
1634
|
type DalvikBytecodeOperationIfNotEqualZero = Awaited<ReturnType<typeof dalvikBytecodeIfNotEqualZeroParser>>;
|
|
1352
1635
|
|
|
1353
|
-
const dalvikBytecodeIfLessThanZeroParser = createDalvikBytecodeOperationIfTestZero('if-ltz',
|
|
1636
|
+
const dalvikBytecodeIfLessThanZeroParser = createDalvikBytecodeOperationIfTestZero('if-ltz', 0x3A);
|
|
1354
1637
|
|
|
1355
1638
|
type DalvikBytecodeOperationIfLessThanZero = Awaited<ReturnType<typeof dalvikBytecodeIfLessThanZeroParser>>;
|
|
1356
1639
|
|
|
1357
|
-
const dalvikBytecodeIfGreaterThanOrEqualToZeroParser = createDalvikBytecodeOperationIfTestZero('if-gez',
|
|
1640
|
+
const dalvikBytecodeIfGreaterThanOrEqualToZeroParser = createDalvikBytecodeOperationIfTestZero('if-gez', 0x3B);
|
|
1358
1641
|
|
|
1359
1642
|
type DalvikBytecodeOperationIfGreaterThanOrEqualToZero = Awaited<ReturnType<typeof dalvikBytecodeIfGreaterThanOrEqualToZeroParser>>;
|
|
1360
1643
|
|
|
1361
|
-
const dalvikBytecodeIfGreaterThanZeroParser = createDalvikBytecodeOperationIfTestZero('if-gtz',
|
|
1644
|
+
const dalvikBytecodeIfGreaterThanZeroParser = createDalvikBytecodeOperationIfTestZero('if-gtz', 0x3C);
|
|
1362
1645
|
|
|
1363
1646
|
type DalvikBytecodeOperationIfGreaterThanZero = Awaited<ReturnType<typeof dalvikBytecodeIfGreaterThanZeroParser>>;
|
|
1364
1647
|
|
|
1365
|
-
const dalvikBytecodeIfLessThanOrEqualToZeroParser = createDalvikBytecodeOperationIfTestZero('if-lez',
|
|
1648
|
+
const dalvikBytecodeIfLessThanOrEqualToZeroParser = createDalvikBytecodeOperationIfTestZero('if-lez', 0x3D);
|
|
1366
1649
|
|
|
1367
1650
|
type DalvikBytecodeOperationIfLessThanOrEqualToZero = Awaited<ReturnType<typeof dalvikBytecodeIfLessThanOrEqualToZeroParser>>;
|
|
1368
1651
|
|
|
@@ -1375,7 +1658,7 @@ type DalvikBytecodeOperationIfTestZero =
|
|
|
1375
1658
|
| DalvikBytecodeOperationIfLessThanOrEqualToZero
|
|
1376
1659
|
;
|
|
1377
1660
|
|
|
1378
|
-
const dalvikBytecodeOperationIfTestZeroParser: Parser<DalvikBytecodeOperationIfTestZero, Uint8Array> =
|
|
1661
|
+
const dalvikBytecodeOperationIfTestZeroParser: Parser<DalvikBytecodeOperationIfTestZero, Uint8Array> = createDisjunctionParser([
|
|
1379
1662
|
dalvikBytecodeIfEqualZeroParser,
|
|
1380
1663
|
dalvikBytecodeIfNotEqualZeroParser,
|
|
1381
1664
|
dalvikBytecodeIfLessThanZeroParser,
|
|
@@ -1394,7 +1677,7 @@ type DalvikBytecodeOperationConstString = {
|
|
|
1394
1677
|
|
|
1395
1678
|
const dalvikBytecodeOperationConstStringParser: Parser<DalvikBytecodeOperationConstString, Uint8Array> = promiseCompose(
|
|
1396
1679
|
createTupleParser([
|
|
1397
|
-
createExactElementParser(
|
|
1680
|
+
createExactElementParser(0x1A),
|
|
1398
1681
|
createDalvikBytecodeFormat21cParser({
|
|
1399
1682
|
isoIndex: isoIndexIntoStringIds,
|
|
1400
1683
|
}),
|
|
@@ -1408,6 +1691,28 @@ const dalvikBytecodeOperationConstStringParser: Parser<DalvikBytecodeOperationCo
|
|
|
1408
1691
|
|
|
1409
1692
|
setParserName(dalvikBytecodeOperationConstStringParser, 'dalvikBytecodeOperationConstStringParser');
|
|
1410
1693
|
|
|
1694
|
+
type DalvikBytecodeOperationConstStringJumbo = {
|
|
1695
|
+
operation: 'const-string/jumbo';
|
|
1696
|
+
stringIndex: IndexIntoStringIds;
|
|
1697
|
+
registers: number[];
|
|
1698
|
+
};
|
|
1699
|
+
|
|
1700
|
+
const dalvikBytecodeOperationConstStringJumboParser: Parser<DalvikBytecodeOperationConstStringJumbo, Uint8Array> = promiseCompose(
|
|
1701
|
+
createTupleParser([
|
|
1702
|
+
createExactElementParser(0x1B),
|
|
1703
|
+
createDalvikBytecodeFormat31cParser({
|
|
1704
|
+
isoIndex: isoIndexIntoStringIds,
|
|
1705
|
+
}),
|
|
1706
|
+
]),
|
|
1707
|
+
([ _opcode, { index, registers } ]) => ({
|
|
1708
|
+
operation: 'const-string/jumbo',
|
|
1709
|
+
stringIndex: index,
|
|
1710
|
+
registers,
|
|
1711
|
+
}),
|
|
1712
|
+
);
|
|
1713
|
+
|
|
1714
|
+
setParserName(dalvikBytecodeOperationConstStringJumboParser, 'dalvikBytecodeOperationConstStringJumboParser');
|
|
1715
|
+
|
|
1411
1716
|
type DalvikBytecodeOperationConstMethodHandle = {
|
|
1412
1717
|
operation: 'const-method-handle';
|
|
1413
1718
|
methodIndex: IndexIntoMethodIds;
|
|
@@ -1416,7 +1721,7 @@ type DalvikBytecodeOperationConstMethodHandle = {
|
|
|
1416
1721
|
|
|
1417
1722
|
const dalvikBytecodeOperationConstMethodHandleParser: Parser<DalvikBytecodeOperationConstMethodHandle, Uint8Array> = promiseCompose(
|
|
1418
1723
|
createTupleParser([
|
|
1419
|
-
createExactElementParser(
|
|
1724
|
+
createExactElementParser(0xFE),
|
|
1420
1725
|
createDalvikBytecodeFormat21cParser({
|
|
1421
1726
|
isoIndex: isoIndexIntoMethodIds,
|
|
1422
1727
|
}),
|
|
@@ -1474,6 +1779,70 @@ const dalvikBytecodeOperationNewArrayParser: Parser<DalvikBytecodeOperationNewAr
|
|
|
1474
1779
|
|
|
1475
1780
|
setParserName(dalvikBytecodeOperationNewArrayParser, 'dalvikBytecodeOperationNewArrayParser');
|
|
1476
1781
|
|
|
1782
|
+
type DalvikBytecodeOperationFilledNewArray = {
|
|
1783
|
+
operation: 'filled-new-array';
|
|
1784
|
+
typeIndex: IndexIntoTypeIds;
|
|
1785
|
+
registers: number[];
|
|
1786
|
+
};
|
|
1787
|
+
|
|
1788
|
+
const dalvikBytecodeOperationFilledNewArrayParser: Parser<DalvikBytecodeOperationFilledNewArray, Uint8Array> = promiseCompose(
|
|
1789
|
+
createTupleParser([
|
|
1790
|
+
createExactElementParser(0x24),
|
|
1791
|
+
createDalvikBytecodeFormat35cParser({
|
|
1792
|
+
isoIndex: isoIndexIntoTypeIds,
|
|
1793
|
+
}),
|
|
1794
|
+
]),
|
|
1795
|
+
([ _opcode, { index, registers } ]) => ({
|
|
1796
|
+
operation: 'filled-new-array',
|
|
1797
|
+
typeIndex: index,
|
|
1798
|
+
registers,
|
|
1799
|
+
}),
|
|
1800
|
+
);
|
|
1801
|
+
|
|
1802
|
+
setParserName(dalvikBytecodeOperationFilledNewArrayParser, 'dalvikBytecodeOperationFilledNewArrayParser');
|
|
1803
|
+
|
|
1804
|
+
type DalvikBytecodeOperationFilledNewArrayRange = {
|
|
1805
|
+
operation: 'filled-new-array/range';
|
|
1806
|
+
typeIndex: IndexIntoTypeIds;
|
|
1807
|
+
registers: number[];
|
|
1808
|
+
};
|
|
1809
|
+
|
|
1810
|
+
const dalvikBytecodeOperationFilledNewArrayRangeParser: Parser<DalvikBytecodeOperationFilledNewArrayRange, Uint8Array> = promiseCompose(
|
|
1811
|
+
createTupleParser([
|
|
1812
|
+
createExactElementParser(0x25),
|
|
1813
|
+
createDalvikBytecodeFormat3rcParser({
|
|
1814
|
+
isoIndex: isoIndexIntoTypeIds,
|
|
1815
|
+
}),
|
|
1816
|
+
]),
|
|
1817
|
+
([ _opcode, { index, registers } ]) => ({
|
|
1818
|
+
operation: 'filled-new-array/range',
|
|
1819
|
+
typeIndex: index,
|
|
1820
|
+
registers,
|
|
1821
|
+
}),
|
|
1822
|
+
);
|
|
1823
|
+
|
|
1824
|
+
setParserName(dalvikBytecodeOperationFilledNewArrayRangeParser, 'dalvikBytecodeOperationFilledNewArrayRangeParser');
|
|
1825
|
+
|
|
1826
|
+
type DalvikBytecodeOperationFillArrayData = {
|
|
1827
|
+
operation: 'fill-array-data';
|
|
1828
|
+
branchOffset: number;
|
|
1829
|
+
registers: number[];
|
|
1830
|
+
};
|
|
1831
|
+
|
|
1832
|
+
const dalvikBytecodeOperationFillArrayDataParser: Parser<DalvikBytecodeOperationFillArrayData, Uint8Array> = promiseCompose(
|
|
1833
|
+
createTupleParser([
|
|
1834
|
+
createExactElementParser(0x26),
|
|
1835
|
+
dalvikBytecodeFormat31tParser,
|
|
1836
|
+
]),
|
|
1837
|
+
([ _opcode, { branchOffset, registers } ]) => ({
|
|
1838
|
+
operation: 'fill-array-data',
|
|
1839
|
+
branchOffset,
|
|
1840
|
+
registers,
|
|
1841
|
+
}),
|
|
1842
|
+
);
|
|
1843
|
+
|
|
1844
|
+
setParserName(dalvikBytecodeOperationFillArrayDataParser, 'dalvikBytecodeOperationFillArrayDataParser');
|
|
1845
|
+
|
|
1477
1846
|
type DalvikBytecodeOperationCheckCast = {
|
|
1478
1847
|
operation: 'check-cast';
|
|
1479
1848
|
typeIndex: IndexIntoTypeIds;
|
|
@@ -1482,7 +1851,7 @@ type DalvikBytecodeOperationCheckCast = {
|
|
|
1482
1851
|
|
|
1483
1852
|
const dalvikBytecodeOperationCheckCastParser: Parser<DalvikBytecodeOperationCheckCast, Uint8Array> = promiseCompose(
|
|
1484
1853
|
createTupleParser([
|
|
1485
|
-
createExactElementParser(
|
|
1854
|
+
createExactElementParser(0x1F),
|
|
1486
1855
|
createDalvikBytecodeFormat21cParser({
|
|
1487
1856
|
isoIndex: isoIndexIntoTypeIds,
|
|
1488
1857
|
}),
|
|
@@ -1496,6 +1865,24 @@ const dalvikBytecodeOperationCheckCastParser: Parser<DalvikBytecodeOperationChec
|
|
|
1496
1865
|
|
|
1497
1866
|
setParserName(dalvikBytecodeOperationCheckCastParser, 'dalvikBytecodeOperationCheckCastParser');
|
|
1498
1867
|
|
|
1868
|
+
type DalvikBytecodeOperationArrayLength = {
|
|
1869
|
+
operation: 'array-length';
|
|
1870
|
+
registers: number[];
|
|
1871
|
+
};
|
|
1872
|
+
|
|
1873
|
+
const dalvikBytecodeOperationArrayLengthParser: Parser<DalvikBytecodeOperationArrayLength, Uint8Array> = promiseCompose(
|
|
1874
|
+
createTupleParser([
|
|
1875
|
+
createExactElementParser(0x21),
|
|
1876
|
+
dalvikBytecodeFormat12xParser,
|
|
1877
|
+
]),
|
|
1878
|
+
([ _opcode, { registers } ]) => ({
|
|
1879
|
+
operation: 'array-length',
|
|
1880
|
+
registers: registers.reverse(),
|
|
1881
|
+
}),
|
|
1882
|
+
);
|
|
1883
|
+
|
|
1884
|
+
setParserName(dalvikBytecodeOperationArrayLengthParser, 'dalvikBytecodeOperationArrayLengthParser');
|
|
1885
|
+
|
|
1499
1886
|
type DalvikBytecodeOperationConstClass = {
|
|
1500
1887
|
operation: 'const-class';
|
|
1501
1888
|
typeIndex: IndexIntoTypeIds;
|
|
@@ -1504,7 +1891,7 @@ type DalvikBytecodeOperationConstClass = {
|
|
|
1504
1891
|
|
|
1505
1892
|
const dalvikBytecodeOperationConstClassParser: Parser<DalvikBytecodeOperationConstClass, Uint8Array> = promiseCompose(
|
|
1506
1893
|
createTupleParser([
|
|
1507
|
-
createExactElementParser(
|
|
1894
|
+
createExactElementParser(0x1C),
|
|
1508
1895
|
createDalvikBytecodeFormat21cParser({
|
|
1509
1896
|
isoIndex: isoIndexIntoTypeIds,
|
|
1510
1897
|
}),
|
|
@@ -1518,13 +1905,49 @@ const dalvikBytecodeOperationConstClassParser: Parser<DalvikBytecodeOperationCon
|
|
|
1518
1905
|
|
|
1519
1906
|
setParserName(dalvikBytecodeOperationConstClassParser, 'dalvikBytecodeOperationConstClassParser');
|
|
1520
1907
|
|
|
1908
|
+
type DalvikBytecodeOperationMonitorEnter = {
|
|
1909
|
+
operation: 'monitor-enter';
|
|
1910
|
+
registers: number[];
|
|
1911
|
+
};
|
|
1912
|
+
|
|
1913
|
+
const dalvikBytecodeOperationMonitorEnterParser: Parser<DalvikBytecodeOperationMonitorEnter, Uint8Array> = promiseCompose(
|
|
1914
|
+
createTupleParser([
|
|
1915
|
+
createExactElementParser(0x1D),
|
|
1916
|
+
dalvikBytecodeFormat11xParser,
|
|
1917
|
+
]),
|
|
1918
|
+
([ _opcode, { registers } ]) => ({
|
|
1919
|
+
operation: 'monitor-enter',
|
|
1920
|
+
registers,
|
|
1921
|
+
}),
|
|
1922
|
+
);
|
|
1923
|
+
|
|
1924
|
+
setParserName(dalvikBytecodeOperationMonitorEnterParser, 'dalvikBytecodeOperationMonitorEnterParser');
|
|
1925
|
+
|
|
1926
|
+
type DalvikBytecodeOperationMonitorExit = {
|
|
1927
|
+
operation: 'monitor-exit';
|
|
1928
|
+
registers: number[];
|
|
1929
|
+
};
|
|
1930
|
+
|
|
1931
|
+
const dalvikBytecodeOperationMonitorExitParser: Parser<DalvikBytecodeOperationMonitorExit, Uint8Array> = promiseCompose(
|
|
1932
|
+
createTupleParser([
|
|
1933
|
+
createExactElementParser(0x1E),
|
|
1934
|
+
dalvikBytecodeFormat11xParser,
|
|
1935
|
+
]),
|
|
1936
|
+
([ _opcode, { registers } ]) => ({
|
|
1937
|
+
operation: 'monitor-exit',
|
|
1938
|
+
registers,
|
|
1939
|
+
}),
|
|
1940
|
+
);
|
|
1941
|
+
|
|
1942
|
+
setParserName(dalvikBytecodeOperationMonitorExitParser, 'dalvikBytecodeOperationMonitorExitParser');
|
|
1943
|
+
|
|
1521
1944
|
type DalvikBytecodeOperationReturnVoid = {
|
|
1522
1945
|
operation: 'return-void';
|
|
1523
1946
|
};
|
|
1524
1947
|
|
|
1525
1948
|
const dalvikBytecodeOperationReturnVoidParser: Parser<DalvikBytecodeOperationReturnVoid, Uint8Array> = promiseCompose(
|
|
1526
1949
|
createTupleParser([
|
|
1527
|
-
createExactElementParser(
|
|
1950
|
+
createExactElementParser(0x0E),
|
|
1528
1951
|
dalvikBytecodeFormat10xParser,
|
|
1529
1952
|
]),
|
|
1530
1953
|
() => ({
|
|
@@ -1548,19 +1971,19 @@ const createDalvikBytecodeMoveResult1Parser = <T extends string>(operation: T, o
|
|
|
1548
1971
|
}),
|
|
1549
1972
|
);
|
|
1550
1973
|
|
|
1551
|
-
const dalvikBytecodeMoveResultParser = createDalvikBytecodeMoveResult1Parser('move-result',
|
|
1974
|
+
const dalvikBytecodeMoveResultParser = createDalvikBytecodeMoveResult1Parser('move-result', 0x0A);
|
|
1552
1975
|
|
|
1553
1976
|
type DalvikBytecodeOperationMoveResult = Awaited<ReturnType<typeof dalvikBytecodeMoveResultParser>>;
|
|
1554
1977
|
|
|
1555
|
-
const dalvikBytecodeMoveResultWideParser = createDalvikBytecodeMoveResult1Parser('move-result-wide',
|
|
1978
|
+
const dalvikBytecodeMoveResultWideParser = createDalvikBytecodeMoveResult1Parser('move-result-wide', 0x0B);
|
|
1556
1979
|
|
|
1557
1980
|
type DalvikBytecodeOperationMoveResultWide = Awaited<ReturnType<typeof dalvikBytecodeMoveResultWideParser>>;
|
|
1558
1981
|
|
|
1559
|
-
const dalvikBytecodeMoveResultObjectParser = createDalvikBytecodeMoveResult1Parser('move-result-object',
|
|
1982
|
+
const dalvikBytecodeMoveResultObjectParser = createDalvikBytecodeMoveResult1Parser('move-result-object', 0x0C);
|
|
1560
1983
|
|
|
1561
1984
|
type DalvikBytecodeOperationMoveResultObject = Awaited<ReturnType<typeof dalvikBytecodeMoveResultObjectParser>>;
|
|
1562
1985
|
|
|
1563
|
-
const dalvikBytecodeMoveExceptionParser = createDalvikBytecodeMoveResult1Parser('move-exception',
|
|
1986
|
+
const dalvikBytecodeMoveExceptionParser = createDalvikBytecodeMoveResult1Parser('move-exception', 0x0D);
|
|
1564
1987
|
|
|
1565
1988
|
type DalvikBytecodeOperationMoveException = Awaited<ReturnType<typeof dalvikBytecodeMoveExceptionParser>>;
|
|
1566
1989
|
|
|
@@ -1571,7 +1994,7 @@ type DalvikBytecodeOperationMoveResult1 =
|
|
|
1571
1994
|
| DalvikBytecodeOperationMoveException
|
|
1572
1995
|
;
|
|
1573
1996
|
|
|
1574
|
-
const dalvikBytecodeOperationMoveResult1Parser: Parser<DalvikBytecodeOperationMoveResult1, Uint8Array> =
|
|
1997
|
+
const dalvikBytecodeOperationMoveResult1Parser: Parser<DalvikBytecodeOperationMoveResult1, Uint8Array> = createDisjunctionParser([
|
|
1575
1998
|
dalvikBytecodeMoveResultParser,
|
|
1576
1999
|
dalvikBytecodeMoveResultWideParser,
|
|
1577
2000
|
dalvikBytecodeMoveResultObjectParser,
|
|
@@ -1702,7 +2125,7 @@ setParserName(dalvikBytecodeOperationMoveWide16Parser, 'dalvikBytecodeOperationM
|
|
|
1702
2125
|
|
|
1703
2126
|
const createDalvikBytecodeOperationReturn1Parser = createDalvikBytecodeMoveResult1Parser;
|
|
1704
2127
|
|
|
1705
|
-
const dalvikBytecodeOperationReturnParser = createDalvikBytecodeOperationReturn1Parser('return',
|
|
2128
|
+
const dalvikBytecodeOperationReturnParser = createDalvikBytecodeOperationReturn1Parser('return', 0x0F);
|
|
1706
2129
|
|
|
1707
2130
|
type DalvikBytecodeOperationReturn = Awaited<ReturnType<typeof dalvikBytecodeOperationReturnParser>>;
|
|
1708
2131
|
|
|
@@ -1720,7 +2143,7 @@ type DalvikBytecodeOperationReturn1 =
|
|
|
1720
2143
|
| DalvikBytecodeOperationReturnObject
|
|
1721
2144
|
;
|
|
1722
2145
|
|
|
1723
|
-
const dalvikBytecodeOperationReturn1Parser: Parser<DalvikBytecodeOperationReturn1, Uint8Array> =
|
|
2146
|
+
const dalvikBytecodeOperationReturn1Parser: Parser<DalvikBytecodeOperationReturn1, Uint8Array> = createDisjunctionParser([
|
|
1724
2147
|
dalvikBytecodeOperationReturnParser,
|
|
1725
2148
|
dalvikBytecodeOperationReturnWideParser,
|
|
1726
2149
|
dalvikBytecodeOperationReturnObjectParser,
|
|
@@ -1737,20 +2160,15 @@ type DalvikBytecodeOperationConst4 = {
|
|
|
1737
2160
|
const dalvikBytecodeOperationConst4Parser: Parser<DalvikBytecodeOperationConst4, Uint8Array> = promiseCompose(
|
|
1738
2161
|
createTupleParser([
|
|
1739
2162
|
createExactElementParser(0x12),
|
|
1740
|
-
|
|
2163
|
+
dalvikBytecodeFormat11nParser,
|
|
1741
2164
|
]),
|
|
1742
2165
|
([
|
|
1743
2166
|
_opcode,
|
|
1744
|
-
|
|
1745
|
-
register0,
|
|
1746
|
-
value,
|
|
1747
|
-
],
|
|
2167
|
+
{ value, registers },
|
|
1748
2168
|
]) => ({
|
|
1749
2169
|
operation: 'const/4',
|
|
1750
|
-
registers
|
|
1751
|
-
|
|
1752
|
-
],
|
|
1753
|
-
value: value << 28 >> 28,
|
|
2170
|
+
registers,
|
|
2171
|
+
value,
|
|
1754
2172
|
}),
|
|
1755
2173
|
);
|
|
1756
2174
|
|
|
@@ -1816,6 +2234,66 @@ const dalvikBytecodeOperationConstWide16Parser: Parser<DalvikBytecodeOperationCo
|
|
|
1816
2234
|
|
|
1817
2235
|
setParserName(dalvikBytecodeOperationConstWide16Parser, 'dalvikBytecodeOperationConstWide16Parser');
|
|
1818
2236
|
|
|
2237
|
+
type DalvikBytecodeOperationConstWide32 = {
|
|
2238
|
+
operation: 'const-wide/32';
|
|
2239
|
+
registers: number[];
|
|
2240
|
+
value: bigint;
|
|
2241
|
+
};
|
|
2242
|
+
|
|
2243
|
+
const dalvikBytecodeOperationConstWide32Parser: Parser<DalvikBytecodeOperationConstWide32, Uint8Array> = promiseCompose(
|
|
2244
|
+
createTupleParser([
|
|
2245
|
+
createExactElementParser(0x17),
|
|
2246
|
+
dalvikBytecodeFormat31iParser,
|
|
2247
|
+
]),
|
|
2248
|
+
([ _opcode, { registers, value } ]) => ({
|
|
2249
|
+
operation: 'const-wide/32',
|
|
2250
|
+
registers,
|
|
2251
|
+
value: BigInt(value) << 32n >> 32n,
|
|
2252
|
+
}),
|
|
2253
|
+
);
|
|
2254
|
+
|
|
2255
|
+
setParserName(dalvikBytecodeOperationConstWide32Parser, 'dalvikBytecodeOperationConstWide32Parser');
|
|
2256
|
+
|
|
2257
|
+
type DalvikBytecodeOperationConstWide = {
|
|
2258
|
+
operation: 'const-wide';
|
|
2259
|
+
registers: number[];
|
|
2260
|
+
value: bigint;
|
|
2261
|
+
};
|
|
2262
|
+
|
|
2263
|
+
const dalvikBytecodeOperationConstWideParser: Parser<DalvikBytecodeOperationConstWide, Uint8Array> = promiseCompose(
|
|
2264
|
+
createTupleParser([
|
|
2265
|
+
createExactElementParser(0x18),
|
|
2266
|
+
dalvikBytecodeFormat51lParser,
|
|
2267
|
+
]),
|
|
2268
|
+
([ _opcode, { registers, value } ]) => ({
|
|
2269
|
+
operation: 'const-wide',
|
|
2270
|
+
registers,
|
|
2271
|
+
value,
|
|
2272
|
+
}),
|
|
2273
|
+
);
|
|
2274
|
+
|
|
2275
|
+
setParserName(dalvikBytecodeOperationConstWideParser, 'dalvikBytecodeOperationConstWideParser');
|
|
2276
|
+
|
|
2277
|
+
type DalvikBytecodeOperationConstWideHigh16 = {
|
|
2278
|
+
operation: 'const-wide/high16';
|
|
2279
|
+
registers: number[];
|
|
2280
|
+
value: bigint;
|
|
2281
|
+
};
|
|
2282
|
+
|
|
2283
|
+
const dalvikBytecodeOperationConstWideHigh16Parser: Parser<DalvikBytecodeOperationConstWideHigh16, Uint8Array> = promiseCompose(
|
|
2284
|
+
createTupleParser([
|
|
2285
|
+
createExactElementParser(0x19),
|
|
2286
|
+
createDalvikBytecodeFormat21sParser(),
|
|
2287
|
+
]),
|
|
2288
|
+
([ _opcode, { registers, value } ]) => ({
|
|
2289
|
+
operation: 'const-wide/high16',
|
|
2290
|
+
registers,
|
|
2291
|
+
value: BigInt(value) << 48n,
|
|
2292
|
+
}),
|
|
2293
|
+
);
|
|
2294
|
+
|
|
2295
|
+
setParserName(dalvikBytecodeOperationConstWideHigh16Parser, 'dalvikBytecodeOperationConstWideHigh16Parser');
|
|
2296
|
+
|
|
1819
2297
|
type DalvikBytecodeOperationConst = {
|
|
1820
2298
|
operation: 'const';
|
|
1821
2299
|
registers: number[];
|
|
@@ -1868,15 +2346,15 @@ const createDalvikBytecodeOperationCompare = <T extends string>(operation: T, op
|
|
|
1868
2346
|
}),
|
|
1869
2347
|
);
|
|
1870
2348
|
|
|
1871
|
-
const dalvikBytecodeOperationCompareFloatWithLessThanBiasParser = createDalvikBytecodeOperationCompare('cmpl-float',
|
|
2349
|
+
const dalvikBytecodeOperationCompareFloatWithLessThanBiasParser = createDalvikBytecodeOperationCompare('cmpl-float', 0x2D);
|
|
1872
2350
|
|
|
1873
2351
|
type DalvikBytecodeOperationCompareFloatWithLessThanBias = Awaited<ReturnType<typeof dalvikBytecodeOperationCompareFloatWithLessThanBiasParser>>;
|
|
1874
2352
|
|
|
1875
|
-
const dalvikBytecodeOperationCompareFloatWithGreaterThanBiasParser = createDalvikBytecodeOperationCompare('cmpg-float',
|
|
2353
|
+
const dalvikBytecodeOperationCompareFloatWithGreaterThanBiasParser = createDalvikBytecodeOperationCompare('cmpg-float', 0x2E);
|
|
1876
2354
|
|
|
1877
2355
|
type DalvikBytecodeOperationCompareFloatWithGreaterThanBias = Awaited<ReturnType<typeof dalvikBytecodeOperationCompareFloatWithGreaterThanBiasParser>>;
|
|
1878
2356
|
|
|
1879
|
-
const dalvikBytecodeOperationCompareDoubleWithLessThanBiasParser = createDalvikBytecodeOperationCompare('cmpl-double',
|
|
2357
|
+
const dalvikBytecodeOperationCompareDoubleWithLessThanBiasParser = createDalvikBytecodeOperationCompare('cmpl-double', 0x2F);
|
|
1880
2358
|
|
|
1881
2359
|
type DalvikBytecodeOperationCompareDoubleWithLessThanBias = Awaited<ReturnType<typeof dalvikBytecodeOperationCompareDoubleWithLessThanBiasParser>>;
|
|
1882
2360
|
|
|
@@ -1896,7 +2374,7 @@ type DalvikBytecodeOperationCompare =
|
|
|
1896
2374
|
| DalvikBytecodeOperationCompareLong
|
|
1897
2375
|
;
|
|
1898
2376
|
|
|
1899
|
-
const dalvikBytecodeOperationCompareParser: Parser<DalvikBytecodeOperationCompare, Uint8Array> =
|
|
2377
|
+
const dalvikBytecodeOperationCompareParser: Parser<DalvikBytecodeOperationCompare, Uint8Array> = createDisjunctionParser([
|
|
1900
2378
|
dalvikBytecodeOperationCompareFloatWithLessThanBiasParser,
|
|
1901
2379
|
dalvikBytecodeOperationCompareFloatWithGreaterThanBiasParser,
|
|
1902
2380
|
dalvikBytecodeOperationCompareDoubleWithLessThanBiasParser,
|
|
@@ -1909,16 +2387,76 @@ setParserName(dalvikBytecodeOperationCompareParser, 'dalvikBytecodeOperationComp
|
|
|
1909
2387
|
export type DalvikBytecodeOperation =
|
|
1910
2388
|
| DalvikBytecodeOperationNoOperation
|
|
1911
2389
|
|
|
2390
|
+
| DalvikBytecodeOperationIfTest
|
|
2391
|
+
| DalvikBytecodeOperationIfTestZero
|
|
2392
|
+
|
|
2393
|
+
| DalvikBytecodeOperationBinaryOperation
|
|
2394
|
+
| DalvikBytecodeOperationBinaryOperationLiteral8
|
|
2395
|
+
| DalvikBytecodeOperationBinaryOperationLiteral16
|
|
2396
|
+
| DalvikBytecodeOperationBinaryOperationInPlace
|
|
2397
|
+
| DalvikBytecodeOperationUnaryOperation
|
|
2398
|
+
|
|
2399
|
+
| DalvikBytecodeOperationGoto
|
|
2400
|
+
| DalvikBytecodeOperationGoto16
|
|
2401
|
+
| DalvikBytecodeOperationGoto32
|
|
2402
|
+
|
|
2403
|
+
| DalvikBytecodeOperationPackedSwitch
|
|
2404
|
+
| DalvikBytecodeOperationPackedSwitchPayload
|
|
2405
|
+
| DalvikBytecodeOperationSparseSwitch
|
|
2406
|
+
| DalvikBytecodeOperationSparseSwitchPayload
|
|
2407
|
+
| DalvikBytecodeOperationNewArray
|
|
2408
|
+
| DalvikBytecodeOperationFilledNewArray
|
|
2409
|
+
| DalvikBytecodeOperationFilledNewArrayRange
|
|
2410
|
+
| DalvikBytecodeOperationFillArrayDataPayload
|
|
2411
|
+
|
|
2412
|
+
| DalvikBytecodeOperationMoveResult1
|
|
2413
|
+
| DalvikBytecodeOperationMove
|
|
2414
|
+
| DalvikBytecodeOperationMoveWide
|
|
2415
|
+
| DalvikBytecodeOperationMoveObject
|
|
2416
|
+
| DalvikBytecodeOperationMoveFrom16
|
|
2417
|
+
| DalvikBytecodeOperationMoveWideFrom16
|
|
2418
|
+
| DalvikBytecodeOperationMoveObjectFrom16
|
|
2419
|
+
| DalvikBytecodeOperationMoveWide16
|
|
2420
|
+
|
|
1912
2421
|
| DalvikBytecodeOperationInvoke
|
|
2422
|
+
| DalvikBytecodeOperationInvokeRange
|
|
2423
|
+
| DalvikBytecodeOperationInvokePolymorphic
|
|
2424
|
+
| DalvikBytecodeOperationInvokePolymorphicRange
|
|
2425
|
+
|
|
1913
2426
|
| DalvikBytecodeOperationNewInstance
|
|
2427
|
+
|
|
2428
|
+
| DalvikBytecodeOperationFillArrayData
|
|
1914
2429
|
| DalvikBytecodeOperationCheckCast
|
|
1915
2430
|
| DalvikBytecodeOperationInstanceOf
|
|
2431
|
+
| DalvikBytecodeOperationArrayLength
|
|
1916
2432
|
|
|
1917
|
-
|
|
|
2433
|
+
| DalvikBytecodeOperationArrayElement
|
|
2434
|
+
| DalvikBytecodeOperationInstanceField
|
|
2435
|
+
| DalvikBytecodeOperationStaticField
|
|
1918
2436
|
|
|
1919
|
-
|
|
|
1920
|
-
|
|
2437
|
+
| DalvikBytecodeOperationConst4
|
|
2438
|
+
| DalvikBytecodeOperationConst16
|
|
2439
|
+
| DalvikBytecodeOperationConstHigh16
|
|
2440
|
+
| DalvikBytecodeOperationConstWide16
|
|
2441
|
+
| DalvikBytecodeOperationConstWide32
|
|
2442
|
+
| DalvikBytecodeOperationConstWide
|
|
2443
|
+
| DalvikBytecodeOperationConstWideHigh16
|
|
2444
|
+
| DalvikBytecodeOperationConst
|
|
2445
|
+
|
|
2446
|
+
| DalvikBytecodeOperationConstString
|
|
2447
|
+
| DalvikBytecodeOperationConstStringJumbo
|
|
2448
|
+
| DalvikBytecodeOperationConstMethodHandle
|
|
2449
|
+
| DalvikBytecodeOperationConstClass
|
|
2450
|
+
|
|
2451
|
+
| DalvikBytecodeOperationMonitorEnter
|
|
2452
|
+
| DalvikBytecodeOperationMonitorExit
|
|
1921
2453
|
|
|
2454
|
+
| DalvikBytecodeOperationThrow
|
|
2455
|
+
|
|
2456
|
+
| DalvikBytecodeOperationCompare
|
|
2457
|
+
|
|
2458
|
+
| DalvikBytecodeOperationReturnVoid
|
|
2459
|
+
| DalvikBytecodeOperationReturn1;
|
|
1922
2460
|
export const dalvikBytecodeOperationCompanion = {
|
|
1923
2461
|
getRegisters(operation: DalvikBytecodeOperation): number[] {
|
|
1924
2462
|
if (operation && typeof operation === 'object' && 'registers' in operation) {
|
|
@@ -1929,73 +2467,336 @@ export const dalvikBytecodeOperationCompanion = {
|
|
|
1929
2467
|
},
|
|
1930
2468
|
};
|
|
1931
2469
|
|
|
1932
|
-
|
|
1933
|
-
|
|
1934
|
-
|
|
1935
|
-
|
|
1936
|
-
|
|
1937
|
-
|
|
1938
|
-
|
|
1939
|
-
|
|
1940
|
-
|
|
1941
|
-
|
|
1942
|
-
|
|
1943
|
-
|
|
1944
|
-
|
|
1945
|
-
|
|
1946
|
-
|
|
1947
|
-
|
|
1948
|
-
|
|
1949
|
-
|
|
1950
|
-
|
|
1951
|
-
|
|
1952
|
-
|
|
1953
|
-
|
|
1954
|
-
|
|
1955
|
-
|
|
1956
|
-
|
|
1957
|
-
|
|
1958
|
-
|
|
1959
|
-
|
|
1960
|
-
|
|
1961
|
-
|
|
1962
|
-
|
|
1963
|
-
|
|
1964
|
-
|
|
1965
|
-
|
|
1966
|
-
|
|
1967
|
-
|
|
1968
|
-
|
|
1969
|
-
|
|
1970
|
-
|
|
1971
|
-
|
|
1972
|
-
|
|
1973
|
-
|
|
1974
|
-
|
|
1975
|
-
|
|
1976
|
-
|
|
1977
|
-
|
|
1978
|
-
|
|
2470
|
+
// Map of single-byte opcodes to their parsers for O(1) lookup
|
|
2471
|
+
const dalvikBytecodeOperationOpcodeMap = new Map<number, Parser<unknown, Uint8Array>>([
|
|
2472
|
+
// Invoke operations
|
|
2473
|
+
[ 0x6E, dalvikBytecodeOperationInvokeVirtualParser ],
|
|
2474
|
+
[ 0x6F, dalvikBytecodeOperationInvokeSuperParser ],
|
|
2475
|
+
[ 0x70, dalvikBytecodeOperationInvokeDirectParser ],
|
|
2476
|
+
[ 0x71, dalvikBytecodeOperationInvokeStaticParser ],
|
|
2477
|
+
[ 0x72, dalvikBytecodeOperationInvokeInterfaceParser ],
|
|
2478
|
+
|
|
2479
|
+
// Invoke range operations
|
|
2480
|
+
[ 0x74, dalvikBytecodeOperationInvokeVirtualRangeParser ],
|
|
2481
|
+
[ 0x75, dalvikBytecodeOperationInvokeSuperRangeParser ],
|
|
2482
|
+
[ 0x76, dalvikBytecodeOperationInvokeDirectRangeParser ],
|
|
2483
|
+
[ 0x77, dalvikBytecodeOperationInvokeStaticRangeParser ],
|
|
2484
|
+
[ 0x78, dalvikBytecodeOperationInvokeInterfaceRangeParser ],
|
|
2485
|
+
|
|
2486
|
+
// Invoke polymorphic operations
|
|
2487
|
+
[ 0xFA, dalvikBytecodeOperationInvokePolymorphicParser ],
|
|
2488
|
+
[ 0xFB, dalvikBytecodeOperationInvokePolymorphicRangeParser ],
|
|
2489
|
+
|
|
2490
|
+
// New instance/array operations
|
|
2491
|
+
[ 0x22, dalvikBytecodeOperationNewInstanceParser ],
|
|
2492
|
+
[ 0x23, dalvikBytecodeOperationNewArrayParser ],
|
|
2493
|
+
[ 0x24, dalvikBytecodeOperationFilledNewArrayParser ],
|
|
2494
|
+
[ 0x25, dalvikBytecodeOperationFilledNewArrayRangeParser ],
|
|
2495
|
+
[ 0x26, dalvikBytecodeOperationFillArrayDataParser ],
|
|
2496
|
+
[ 0x1F, dalvikBytecodeOperationCheckCastParser ],
|
|
2497
|
+
[ 0x20, dalvikBytecodeOperationInstanceOfParser ],
|
|
2498
|
+
[ 0x21, dalvikBytecodeOperationArrayLengthParser ],
|
|
2499
|
+
|
|
2500
|
+
// Array element operations (aget/aput)
|
|
2501
|
+
[ 0x44, dalvikBytecodeOperationArrayElementGetParser ],
|
|
2502
|
+
[ 0x45, dalvikBytecodeOperationArrayElementGetWideParser ],
|
|
2503
|
+
[ 0x46, dalvikBytecodeOperationArrayElementGetObjectParser ],
|
|
2504
|
+
[ 0x47, dalvikBytecodeOperationArrayElementGetBooleanParser ],
|
|
2505
|
+
[ 0x48, dalvikBytecodeOperationArrayElementGetByteParser ],
|
|
2506
|
+
[ 0x49, dalvikBytecodeOperationArrayElementGetCharParser ],
|
|
2507
|
+
[ 0x4A, dalvikBytecodeOperationArrayElementGetShortParser ],
|
|
2508
|
+
[ 0x4B, dalvikBytecodeOperationArrayElementPutParser ],
|
|
2509
|
+
[ 0x4C, dalvikBytecodeOperationArrayElementPutWideParser ],
|
|
2510
|
+
[ 0x4D, dalvikBytecodeOperationArrayElementPutObjectParser ],
|
|
2511
|
+
[ 0x4E, dalvikBytecodeOperationArrayElementPutBooleanParser ],
|
|
2512
|
+
[ 0x4F, dalvikBytecodeOperationArrayElementPutByteParser ],
|
|
2513
|
+
[ 0x50, dalvikBytecodeOperationArrayElementPutCharParser ],
|
|
2514
|
+
[ 0x51, dalvikBytecodeOperationArrayElementPutShortParser ],
|
|
2515
|
+
|
|
2516
|
+
// Instance field operations (iget/iput)
|
|
2517
|
+
[ 0x52, dalvikBytecodeOperationInstanceFieldGetParser ],
|
|
2518
|
+
[ 0x53, dalvikBytecodeOperationInstanceFieldGetWideParser ],
|
|
2519
|
+
[ 0x54, dalvikBytecodeOperationInstanceFieldGetObjectParser ],
|
|
2520
|
+
[ 0x55, dalvikBytecodeOperationInstanceFieldGetBooleanParser ],
|
|
2521
|
+
[ 0x56, dalvikBytecodeOperationInstanceFieldGetByteParser ],
|
|
2522
|
+
[ 0x57, dalvikBytecodeOperationInstanceFieldGetCharParser ],
|
|
2523
|
+
[ 0x58, dalvikBytecodeOperationInstanceFieldGetShortParser ],
|
|
2524
|
+
[ 0x59, dalvikBytecodeOperationInstanceFieldPutParser ],
|
|
2525
|
+
[ 0x5A, dalvikBytecodeOperationInstanceFieldPutWideParser ],
|
|
2526
|
+
[ 0x5B, dalvikBytecodeOperationInstanceFieldPutObjectParser ],
|
|
2527
|
+
[ 0x5C, dalvikBytecodeOperationInstanceFieldPutBooleanParser ],
|
|
2528
|
+
[ 0x5D, dalvikBytecodeOperationInstanceFieldPutByteParser ],
|
|
2529
|
+
[ 0x5E, dalvikBytecodeOperationInstanceFieldPutCharParser ],
|
|
2530
|
+
[ 0x5F, dalvikBytecodeOperationInstanceFieldPutShortParser ],
|
|
2531
|
+
|
|
2532
|
+
// Static field operations (sget/sput)
|
|
2533
|
+
[ 0x60, dalvikBytecodeOperationStaticFieldGetParser ],
|
|
2534
|
+
[ 0x61, dalvikBytecodeOperationStaticFieldGetWideParser ],
|
|
2535
|
+
[ 0x62, dalvikBytecodeOperationStaticFieldGetObjectParser ],
|
|
2536
|
+
[ 0x63, dalvikBytecodeOperationStaticFieldGetBooleanParser ],
|
|
2537
|
+
[ 0x64, dalvikBytecodeOperationStaticFieldGetByteParser ],
|
|
2538
|
+
[ 0x65, dalvikBytecodeOperationStaticFieldGetCharParser ],
|
|
2539
|
+
[ 0x66, dalvikBytecodeOperationStaticFieldGetShortParser ],
|
|
2540
|
+
[ 0x67, dalvikBytecodeOperationStaticFieldPutParser ],
|
|
2541
|
+
[ 0x68, dalvikBytecodeOperationStaticFieldPutWideParser ],
|
|
2542
|
+
[ 0x69, dalvikBytecodeOperationStaticFieldPutObjectParser ],
|
|
2543
|
+
[ 0x6A, dalvikBytecodeOperationStaticFieldPutBooleanParser ],
|
|
2544
|
+
[ 0x6B, dalvikBytecodeOperationStaticFieldPutByteParser ],
|
|
2545
|
+
[ 0x6C, dalvikBytecodeOperationStaticFieldPutCharParser ],
|
|
2546
|
+
[ 0x6D, dalvikBytecodeOperationStaticFieldPutShortParser ],
|
|
2547
|
+
|
|
2548
|
+
// Const operations
|
|
2549
|
+
[ 0x1A, dalvikBytecodeOperationConstStringParser ],
|
|
2550
|
+
[ 0x1B, dalvikBytecodeOperationConstStringJumboParser ],
|
|
2551
|
+
[ 0xFE, dalvikBytecodeOperationConstMethodHandleParser ],
|
|
2552
|
+
[ 0x1C, dalvikBytecodeOperationConstClassParser ],
|
|
2553
|
+
|
|
2554
|
+
// Monitor operations
|
|
2555
|
+
[ 0x1D, dalvikBytecodeOperationMonitorEnterParser ],
|
|
2556
|
+
[ 0x1E, dalvikBytecodeOperationMonitorExitParser ],
|
|
2557
|
+
|
|
2558
|
+
// Return operations
|
|
2559
|
+
[ 0x0E, dalvikBytecodeOperationReturnVoidParser ],
|
|
2560
|
+
[ 0x0F, dalvikBytecodeOperationReturnParser ],
|
|
2561
|
+
[ 0x10, dalvikBytecodeOperationReturnWideParser ],
|
|
2562
|
+
[ 0x11, dalvikBytecodeOperationReturnObjectParser ],
|
|
2563
|
+
|
|
2564
|
+
// Throw operation
|
|
2565
|
+
[ 0x27, dalvikBytecodeOperationThrowParser ],
|
|
2566
|
+
|
|
2567
|
+
// Goto operations
|
|
2568
|
+
[ 0x28, dalvikBytecodeOperationGotoParser ],
|
|
2569
|
+
[ 0x29, dalvikBytecodeOperationGoto16Parser ],
|
|
2570
|
+
[ 0x2A, dalvikBytecodeOperationGoto32Parser ],
|
|
2571
|
+
[ 0x2B, dalvikBytecodeOperationPackedSwitchParser ],
|
|
2572
|
+
[ 0x2C, dalvikBytecodeOperationSparseSwitchParser ],
|
|
2573
|
+
|
|
2574
|
+
// Move result operations
|
|
2575
|
+
[ 0x0A, dalvikBytecodeMoveResultParser ],
|
|
2576
|
+
[ 0x0B, dalvikBytecodeMoveResultWideParser ],
|
|
2577
|
+
[ 0x0C, dalvikBytecodeMoveResultObjectParser ],
|
|
2578
|
+
[ 0x0D, dalvikBytecodeMoveExceptionParser ],
|
|
2579
|
+
|
|
2580
|
+
// Move operations
|
|
2581
|
+
[ 0x01, dalvikBytecodeOperationMoveParser ],
|
|
2582
|
+
[ 0x04, dalvikBytecodeOperationMoveWideParser ],
|
|
2583
|
+
[ 0x07, dalvikBytecodeOperationMoveObjectParser ],
|
|
2584
|
+
[ 0x02, dalvikBytecodeOperationMoveFrom16Parser ],
|
|
2585
|
+
[ 0x05, dalvikBytecodeOperationMoveWideFrom16Parser ],
|
|
2586
|
+
[ 0x08, dalvikBytecodeOperationMoveObjectFrom16Parser ],
|
|
2587
|
+
[ 0x06, dalvikBytecodeOperationMoveWide16Parser ],
|
|
2588
|
+
|
|
2589
|
+
// Const value operations
|
|
2590
|
+
[ 0x12, dalvikBytecodeOperationConst4Parser ],
|
|
2591
|
+
[ 0x13, dalvikBytecodeOperationConst16Parser ],
|
|
2592
|
+
[ 0x15, dalvikBytecodeOperationConstHigh16Parser ],
|
|
2593
|
+
[ 0x16, dalvikBytecodeOperationConstWide16Parser ],
|
|
2594
|
+
[ 0x17, dalvikBytecodeOperationConstWide32Parser ],
|
|
2595
|
+
[ 0x18, dalvikBytecodeOperationConstWideParser ],
|
|
2596
|
+
[ 0x19, dalvikBytecodeOperationConstWideHigh16Parser ],
|
|
2597
|
+
[ 0x14, dalvikBytecodeOperationConstParser ],
|
|
2598
|
+
|
|
2599
|
+
// Compare operations
|
|
2600
|
+
[ 0x2D, dalvikBytecodeOperationCompareFloatWithLessThanBiasParser ],
|
|
2601
|
+
[ 0x2E, dalvikBytecodeOperationCompareFloatWithGreaterThanBiasParser ],
|
|
2602
|
+
[ 0x2F, dalvikBytecodeOperationCompareDoubleWithLessThanBiasParser ],
|
|
2603
|
+
[ 0x30, dalvikBytecodeOperationCompareDoubleWithGreaterThanBiasParser ],
|
|
2604
|
+
[ 0x31, dalvikBytecodeOperationCompareLongParser ],
|
|
2605
|
+
|
|
2606
|
+
// If test operations
|
|
2607
|
+
[ 0x32, dalvikBytecodeIfEqualParser ],
|
|
2608
|
+
[ 0x33, dalvikBytecodeIfNotEqualParser ],
|
|
2609
|
+
[ 0x34, dalvikBytecodeIfLessThanParser ],
|
|
2610
|
+
[ 0x35, dalvikBytecodeIfGreaterThanOrEqualToParser ],
|
|
2611
|
+
[ 0x36, dalvikBytecodeIfGreaterThanParser ],
|
|
2612
|
+
[ 0x37, dalvikBytecodeIfLessThanOrEqualToParser ],
|
|
2613
|
+
|
|
2614
|
+
// If test zero operations
|
|
2615
|
+
[ 0x38, dalvikBytecodeIfEqualZeroParser ],
|
|
2616
|
+
[ 0x39, dalvikBytecodeIfNotEqualZeroParser ],
|
|
2617
|
+
[ 0x3A, dalvikBytecodeIfLessThanZeroParser ],
|
|
2618
|
+
[ 0x3B, dalvikBytecodeIfGreaterThanOrEqualToZeroParser ],
|
|
2619
|
+
[ 0x3C, dalvikBytecodeIfGreaterThanZeroParser ],
|
|
2620
|
+
[ 0x3D, dalvikBytecodeIfLessThanOrEqualToZeroParser ],
|
|
2621
|
+
|
|
2622
|
+
// Binary operations
|
|
2623
|
+
[ 0x90, dalvikBytecodeOperationAddIntParser ],
|
|
2624
|
+
[ 0x91, dalvikBytecodeOperationSubtractIntParser ],
|
|
2625
|
+
[ 0x92, dalvikBytecodeOperationMultiplyIntParser ],
|
|
2626
|
+
[ 0x93, dalvikBytecodeOperationDivideIntParser ],
|
|
2627
|
+
[ 0x94, dalvikBytecodeOperationRemainderIntParser ],
|
|
2628
|
+
[ 0x95, dalvikBytecodeOperationAndIntParser ],
|
|
2629
|
+
[ 0x96, dalvikBytecodeOperationOrIntParser ],
|
|
2630
|
+
[ 0x97, dalvikBytecodeOperationXorIntParser ],
|
|
2631
|
+
[ 0x98, dalvikBytecodeOperationShiftLeftIntParser ],
|
|
2632
|
+
[ 0x99, dalvikBytecodeOperationShiftRightIntParser ],
|
|
2633
|
+
[ 0x9A, dalvikBytecodeOperationUnsignedShiftRightIntParser ],
|
|
2634
|
+
[ 0x9B, dalvikBytecodeOperationAddLongParser ],
|
|
2635
|
+
[ 0x9C, dalvikBytecodeOperationSubtractLongParser ],
|
|
2636
|
+
[ 0x9D, dalvikBytecodeOperationMultiplyLongParser ],
|
|
2637
|
+
[ 0x9E, dalvikBytecodeOperationDivideLongParser ],
|
|
2638
|
+
[ 0x9F, dalvikBytecodeOperationRemainderLongParser ],
|
|
2639
|
+
[ 0xA0, dalvikBytecodeOperationAndLongParser ],
|
|
2640
|
+
[ 0xA1, dalvikBytecodeOperationOrLongParser ],
|
|
2641
|
+
[ 0xA2, dalvikBytecodeOperationXorLongParser ],
|
|
2642
|
+
[ 0xA3, dalvikBytecodeOperationShiftLeftLongParser ],
|
|
2643
|
+
[ 0xA4, dalvikBytecodeOperationShiftRightLongParser ],
|
|
2644
|
+
[ 0xA5, dalvikBytecodeOperationUnsignedShiftRightLongParser ],
|
|
2645
|
+
[ 0xA6, dalvikBytecodeOperationAddFloatParser ],
|
|
2646
|
+
[ 0xA7, dalvikBytecodeOperationSubtractFloatParser ],
|
|
2647
|
+
[ 0xA8, dalvikBytecodeOperationMultiplyFloatParser ],
|
|
2648
|
+
[ 0xA9, dalvikBytecodeOperationDivideFloatParser ],
|
|
2649
|
+
// Note: 0xAA (rem-float) parser is missing in codebase
|
|
2650
|
+
[ 0xAB, dalvikBytecodeOperationAddDoubleParser ],
|
|
2651
|
+
[ 0xAC, dalvikBytecodeOperationSubtractDoubleParser ],
|
|
2652
|
+
[ 0xAD, dalvikBytecodeOperationMultiplyDoubleParser ],
|
|
2653
|
+
[ 0xAE, dalvikBytecodeOperationDivideDoubleParser ],
|
|
2654
|
+
[ 0xAF, dalvikBytecodeOperationRemainderDoubleParser ],
|
|
2655
|
+
|
|
2656
|
+
// Binary operations in place (2addr)
|
|
2657
|
+
[ 0xB0, dalvikBytecodeOperationAddIntInPlaceParser ],
|
|
2658
|
+
[ 0xB1, dalvikBytecodeOperationReverseSubtractIntInPlaceParser ],
|
|
2659
|
+
[ 0xB2, dalvikBytecodeOperationMultiplyIntInPlaceParser ],
|
|
2660
|
+
[ 0xB3, dalvikBytecodeOperationDivideIntInPlaceParser ],
|
|
2661
|
+
[ 0xB4, dalvikBytecodeOperationRemainderIntInPlaceParser ],
|
|
2662
|
+
[ 0xB5, dalvikBytecodeOperationAndIntInPlaceParser ],
|
|
2663
|
+
[ 0xB6, dalvikBytecodeOperationOrIntInPlaceParser ],
|
|
2664
|
+
[ 0xB7, dalvikBytecodeOperationXorIntInPlaceParser ],
|
|
2665
|
+
[ 0xB8, dalvikBytecodeOperationShiftLeftIntInPlaceParser ],
|
|
2666
|
+
[ 0xB9, dalvikBytecodeOperationShiftRightIntInPlaceParser ],
|
|
2667
|
+
[ 0xBA, dalvikBytecodeOperationUnsignedShiftRightIntInPlaceParser ],
|
|
2668
|
+
[ 0xBB, dalvikBytecodeOperationAddLongInPlaceParser ],
|
|
2669
|
+
[ 0xBC, dalvikBytecodeOperationSubtractLongInPlaceParser ],
|
|
2670
|
+
[ 0xBD, dalvikBytecodeOperationMultiplyLongInPlaceParser ],
|
|
2671
|
+
[ 0xBE, dalvikBytecodeOperationDivideLongInPlaceParser ],
|
|
2672
|
+
[ 0xBF, dalvikBytecodeOperationRemainderLongInPlaceParser ],
|
|
2673
|
+
[ 0xC0, dalvikBytecodeOperationAndLongInPlaceParser ],
|
|
2674
|
+
[ 0xC1, dalvikBytecodeOperationOrLongInPlaceParser ],
|
|
2675
|
+
[ 0xC2, dalvikBytecodeOperationXorLongInPlaceParser ],
|
|
2676
|
+
[ 0xC3, dalvikBytecodeOperationShiftLeftLongInPlaceParser ],
|
|
2677
|
+
[ 0xC4, dalvikBytecodeOperationShiftRightLongInPlaceParser ],
|
|
2678
|
+
[ 0xC5, dalvikBytecodeOperationUnsignedShiftRightLongInPlaceParser ],
|
|
2679
|
+
[ 0xC6, dalvikBytecodeOperationAddFloatInPlaceParser ],
|
|
2680
|
+
[ 0xC7, dalvikBytecodeOperationSubtractFloatInPlaceParser ],
|
|
2681
|
+
[ 0xC8, dalvikBytecodeOperationMultiplyFloatInPlaceParser ],
|
|
2682
|
+
[ 0xC9, dalvikBytecodeOperationDivideFloatInPlaceParser ],
|
|
2683
|
+
[ 0xCA, dalvikBytecodeOperationRemainderFloatInPlaceParser ],
|
|
2684
|
+
[ 0xCB, dalvikBytecodeOperationAddDoubleInPlaceParser ],
|
|
2685
|
+
[ 0xCC, dalvikBytecodeOperationSubtractDoubleInPlaceParser ],
|
|
2686
|
+
[ 0xCD, dalvikBytecodeOperationMultiplyDoubleInPlaceParser ],
|
|
2687
|
+
[ 0xCE, dalvikBytecodeOperationDivideDoubleInPlaceParser ],
|
|
2688
|
+
[ 0xCF, dalvikBytecodeOperationRemainderDoubleInPlaceParser ],
|
|
2689
|
+
|
|
2690
|
+
// Binary operations with literal16
|
|
2691
|
+
[ 0xD0, dalvikBytecodeOperationAddIntLiteral16Parser ],
|
|
2692
|
+
[ 0xD1, dalvikBytecodeOperationReverseSubtractIntLiteral16Parser ],
|
|
2693
|
+
[ 0xD2, dalvikBytecodeOperationMultiplyIntLiteral16Parser ],
|
|
2694
|
+
[ 0xD3, dalvikBytecodeOperationDivideIntLiteral16Parser ],
|
|
2695
|
+
[ 0xD4, dalvikBytecodeOperationRemainderIntLiteral16Parser ],
|
|
2696
|
+
[ 0xD5, dalvikBytecodeOperationAndIntLiteral16Parser ],
|
|
2697
|
+
[ 0xD6, dalvikBytecodeOperationOrIntLiteral16Parser ],
|
|
2698
|
+
[ 0xD7, dalvikBytecodeOperationXorIntLiteral16Parser ],
|
|
2699
|
+
|
|
2700
|
+
// Binary operations with literal8
|
|
2701
|
+
[ 0xD8, dalvikBytecodeOperationAddIntLiteral8Parser ],
|
|
2702
|
+
[ 0xD9, dalvikBytecodeOperationReverseSubtractIntLiteral8Parser ],
|
|
2703
|
+
[ 0xDA, dalvikBytecodeOperationMultiplyIntLiteral8Parser ],
|
|
2704
|
+
[ 0xDB, dalvikBytecodeOperationDivideIntLiteral8Parser ],
|
|
2705
|
+
[ 0xDC, dalvikBytecodeOperationRemainderIntLiteral8Parser ],
|
|
2706
|
+
[ 0xDD, dalvikBytecodeOperationAndIntLiteral8Parser ],
|
|
2707
|
+
[ 0xDE, dalvikBytecodeOperationOrIntLiteral8Parser ],
|
|
2708
|
+
[ 0xDF, dalvikBytecodeOperationXorIntLiteral8Parser ],
|
|
2709
|
+
[ 0xE0, dalvikBytecodeOperationShiftLeftIntLiteral8Parser ],
|
|
2710
|
+
[ 0xE1, dalvikBytecodeOperationShiftRightIntLiteral8Parser ],
|
|
2711
|
+
[ 0xE2, dalvikBytecodeOperationUnsignedShiftRightIntLiteral8Parser ],
|
|
2712
|
+
|
|
2713
|
+
// Unary operations
|
|
2714
|
+
[ 0x7B, dalvikBytecodeOperationNegateIntParser ],
|
|
2715
|
+
[ 0x7C, dalvikBytecodeOperationNotIntParser ],
|
|
2716
|
+
[ 0x7D, dalvikBytecodeOperationNegateLongParser ],
|
|
2717
|
+
[ 0x7E, dalvikBytecodeOperationNotLongParser ],
|
|
2718
|
+
[ 0x7F, dalvikBytecodeOperationNegateFloatParser ],
|
|
2719
|
+
[ 0x80, dalvikBytecodeOperationNegateDoubleParser ],
|
|
2720
|
+
[ 0x81, dalvikBytecodeOperationIntToLongParser ],
|
|
2721
|
+
[ 0x82, dalvikBytecodeOperationIntToFloatParser ],
|
|
2722
|
+
[ 0x83, dalvikBytecodeOperationIntToDoubleParser ],
|
|
2723
|
+
[ 0x84, dalvikBytecodeOperationLongToIntParser ],
|
|
2724
|
+
[ 0x85, dalvikBytecodeOperationLongToFloatParser ],
|
|
2725
|
+
[ 0x86, dalvikBytecodeOperationLongToDoubleParser ],
|
|
2726
|
+
[ 0x87, dalvikBytecodeOperationFloatToIntParser ],
|
|
2727
|
+
[ 0x88, dalvikBytecodeOperationFloatToLongParser ],
|
|
2728
|
+
[ 0x89, dalvikBytecodeOperationFloatToDoubleParser ],
|
|
2729
|
+
[ 0x8A, dalvikBytecodeOperationDoubleToIntParser ],
|
|
2730
|
+
[ 0x8B, dalvikBytecodeOperationDoubleToLongParser ],
|
|
2731
|
+
[ 0x8C, dalvikBytecodeOperationDoubleToFloatParser ],
|
|
2732
|
+
[ 0x8D, dalvikBytecodeOperationIntToByteParser ],
|
|
2733
|
+
[ 0x8E, dalvikBytecodeOperationIntToCharParser ],
|
|
2734
|
+
[ 0x8F, dalvikBytecodeOperationIntToShortParser ],
|
|
2735
|
+
|
|
2736
|
+
// Unused opcodes
|
|
2737
|
+
// Range 0x3E-0x43
|
|
2738
|
+
[ 0x3E, dalvikBytecodeOperationUnusedParser ],
|
|
2739
|
+
[ 0x3F, dalvikBytecodeOperationUnusedParser ],
|
|
2740
|
+
[ 0x40, dalvikBytecodeOperationUnusedParser ],
|
|
2741
|
+
[ 0x41, dalvikBytecodeOperationUnusedParser ],
|
|
2742
|
+
[ 0x42, dalvikBytecodeOperationUnusedParser ],
|
|
2743
|
+
[ 0x43, dalvikBytecodeOperationUnusedParser ],
|
|
2744
|
+
// 0x73
|
|
2745
|
+
[ 0x73, dalvikBytecodeOperationUnusedParser ],
|
|
2746
|
+
// Range 0x79-0x7A
|
|
2747
|
+
[ 0x79, dalvikBytecodeOperationUnusedParser ],
|
|
2748
|
+
[ 0x7A, dalvikBytecodeOperationUnusedParser ],
|
|
2749
|
+
// Range 0xE3-0xF9
|
|
2750
|
+
[ 0xE3, dalvikBytecodeOperationUnusedParser ],
|
|
2751
|
+
[ 0xE4, dalvikBytecodeOperationUnusedParser ],
|
|
2752
|
+
[ 0xE5, dalvikBytecodeOperationUnusedParser ],
|
|
2753
|
+
[ 0xE6, dalvikBytecodeOperationUnusedParser ],
|
|
2754
|
+
[ 0xE7, dalvikBytecodeOperationUnusedParser ],
|
|
2755
|
+
[ 0xE8, dalvikBytecodeOperationUnusedParser ],
|
|
2756
|
+
[ 0xE9, dalvikBytecodeOperationUnusedParser ],
|
|
2757
|
+
[ 0xEA, dalvikBytecodeOperationUnusedParser ],
|
|
2758
|
+
[ 0xEB, dalvikBytecodeOperationUnusedParser ],
|
|
2759
|
+
[ 0xEC, dalvikBytecodeOperationUnusedParser ],
|
|
2760
|
+
[ 0xED, dalvikBytecodeOperationUnusedParser ],
|
|
2761
|
+
[ 0xEE, dalvikBytecodeOperationUnusedParser ],
|
|
2762
|
+
[ 0xEF, dalvikBytecodeOperationUnusedParser ],
|
|
2763
|
+
[ 0xF0, dalvikBytecodeOperationUnusedParser ],
|
|
2764
|
+
[ 0xF1, dalvikBytecodeOperationUnusedParser ],
|
|
2765
|
+
[ 0xF2, dalvikBytecodeOperationUnusedParser ],
|
|
2766
|
+
[ 0xF3, dalvikBytecodeOperationUnusedParser ],
|
|
2767
|
+
[ 0xF4, dalvikBytecodeOperationUnusedParser ],
|
|
2768
|
+
[ 0xF5, dalvikBytecodeOperationUnusedParser ],
|
|
2769
|
+
[ 0xF6, dalvikBytecodeOperationUnusedParser ],
|
|
2770
|
+
[ 0xF7, dalvikBytecodeOperationUnusedParser ],
|
|
2771
|
+
[ 0xF8, dalvikBytecodeOperationUnusedParser ],
|
|
2772
|
+
[ 0xF9, dalvikBytecodeOperationUnusedParser ],
|
|
2773
|
+
]);
|
|
1979
2774
|
|
|
1980
|
-
|
|
2775
|
+
// Fallback parser for multi-byte opcodes (nop and payload instructions)
|
|
2776
|
+
const dalvikBytecodeOperationMultiByteParser: Parser<DalvikBytecodeOperation, Uint8Array> = createDisjunctionParser([
|
|
2777
|
+
dalvikBytecodeOperationNoOperationParser,
|
|
2778
|
+
dalvikBytecodeOperationPackedSwitchPayloadParser,
|
|
2779
|
+
dalvikBytecodeOperationSparseSwitchPayloadParser,
|
|
2780
|
+
dalvikBytecodeOperationFillArrayDataPayloadParser,
|
|
2781
|
+
]);
|
|
1981
2782
|
|
|
1982
|
-
|
|
1983
|
-
dalvikBytecodeOperationIfTestZeroParser,
|
|
2783
|
+
setParserName(dalvikBytecodeOperationMultiByteParser, 'dalvikBytecodeOperationMultiByteParser');
|
|
1984
2784
|
|
|
1985
|
-
|
|
1986
|
-
|
|
1987
|
-
|
|
1988
|
-
|
|
1989
|
-
|
|
1990
|
-
|
|
2785
|
+
const dalvikBytecodeOperationParser: Parser<DalvikBytecodeOperation | undefined, Uint8Array> = promiseCompose(
|
|
2786
|
+
createTupleParser([
|
|
2787
|
+
() => {},
|
|
2788
|
+
// CreateDebugLogInputParser(),
|
|
2789
|
+
createElementSwitchParser<DalvikBytecodeOperation, Uint8Array>(
|
|
2790
|
+
dalvikBytecodeOperationOpcodeMap,
|
|
2791
|
+
dalvikBytecodeOperationMultiByteParser,
|
|
2792
|
+
),
|
|
1991
2793
|
]),
|
|
1992
2794
|
([
|
|
1993
2795
|
_debug,
|
|
1994
2796
|
operation,
|
|
1995
|
-
]) =>
|
|
1996
|
-
//
|
|
1997
|
-
|
|
1998
|
-
},
|
|
2797
|
+
]) =>
|
|
2798
|
+
// Console.log(operation);
|
|
2799
|
+
operation,
|
|
1999
2800
|
);
|
|
2000
2801
|
|
|
2001
2802
|
setParserName(dalvikBytecodeOperationParser, 'dalvikBytecodeOperationParser');
|
|
@@ -2003,9 +2804,7 @@ setParserName(dalvikBytecodeOperationParser, 'dalvikBytecodeOperationParser');
|
|
|
2003
2804
|
export type DalvikBytecode = DalvikBytecodeOperation[];
|
|
2004
2805
|
|
|
2005
2806
|
const dalvikBytecodeParser: Parser<DalvikBytecode, Uint8Array> = promiseCompose(
|
|
2006
|
-
createArrayParser(
|
|
2007
|
-
dalvikBytecodeOperationParser,
|
|
2008
|
-
),
|
|
2807
|
+
createArrayParser(dalvikBytecodeOperationParser),
|
|
2009
2808
|
operations => operations.filter((operation): operation is DalvikBytecodeOperation => operation !== undefined),
|
|
2010
2809
|
);
|
|
2011
2810
|
|
|
@@ -2014,12 +2813,12 @@ export const createDalvikBytecodeParser = (size: number): Parser<DalvikBytecode,
|
|
|
2014
2813
|
type ResolvedDalvikBytecodeOperation<T extends DalvikBytecodeOperation> = T extends { stringIndex: IndexIntoFieldIds }
|
|
2015
2814
|
? Omit<T, 'stringIndex'> & { string: string }
|
|
2016
2815
|
: T extends { typeIndex: IndexIntoTypeIds }
|
|
2017
|
-
|
|
2018
|
-
|
|
2019
|
-
|
|
2020
|
-
|
|
2021
|
-
|
|
2022
|
-
|
|
2816
|
+
? Omit<T, 'typeIndex'> & { type: string }
|
|
2817
|
+
: T extends { methodIndex: IndexIntoMethodIds }
|
|
2818
|
+
? Omit<T, 'methodIndex'> & { method: DalvikExecutableMethod }
|
|
2819
|
+
: T extends { fieldIndex: IndexIntoFieldIds }
|
|
2820
|
+
? Omit<T, 'fieldIndex'> & { field: DalvikExecutableField }
|
|
2821
|
+
: T;
|
|
2023
2822
|
|
|
2024
2823
|
export type DalvikBytecodeOperationResolvers = {
|
|
2025
2824
|
resolveIndexIntoStringIds: (index: IndexIntoStringIds) => string;
|
|
@@ -2039,7 +2838,7 @@ export function resolveDalvikBytecodeOperation<T extends DalvikBytecodeOperation
|
|
|
2039
2838
|
|
|
2040
2839
|
return {
|
|
2041
2840
|
...rest,
|
|
2042
|
-
string: resolveIndexIntoStringIds(stringIndex
|
|
2841
|
+
string: resolveIndexIntoStringIds(stringIndex),
|
|
2043
2842
|
} as ResolvedDalvikBytecodeOperation<T>;
|
|
2044
2843
|
}
|
|
2045
2844
|
|
|
@@ -2048,7 +2847,7 @@ export function resolveDalvikBytecodeOperation<T extends DalvikBytecodeOperation
|
|
|
2048
2847
|
|
|
2049
2848
|
return {
|
|
2050
2849
|
...rest,
|
|
2051
|
-
type: resolveIndexIntoTypeIds(typeIndex
|
|
2850
|
+
type: resolveIndexIntoTypeIds(typeIndex),
|
|
2052
2851
|
} as ResolvedDalvikBytecodeOperation<T>;
|
|
2053
2852
|
}
|
|
2054
2853
|
|
|
@@ -2057,7 +2856,7 @@ export function resolveDalvikBytecodeOperation<T extends DalvikBytecodeOperation
|
|
|
2057
2856
|
|
|
2058
2857
|
return {
|
|
2059
2858
|
...rest,
|
|
2060
|
-
method: resolveIndexIntoMethodIds(methodIndex
|
|
2859
|
+
method: resolveIndexIntoMethodIds(methodIndex),
|
|
2061
2860
|
} as ResolvedDalvikBytecodeOperation<T>;
|
|
2062
2861
|
}
|
|
2063
2862
|
|
|
@@ -2066,7 +2865,7 @@ export function resolveDalvikBytecodeOperation<T extends DalvikBytecodeOperation
|
|
|
2066
2865
|
|
|
2067
2866
|
return {
|
|
2068
2867
|
...rest,
|
|
2069
|
-
field: resolveIndexIntoFieldIds(fieldIndex
|
|
2868
|
+
field: resolveIndexIntoFieldIds(fieldIndex),
|
|
2070
2869
|
} as ResolvedDalvikBytecodeOperation<T>;
|
|
2071
2870
|
}
|
|
2072
2871
|
|