@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,24 +1,29 @@
|
|
|
1
|
-
import { createArrayParser } from
|
|
2
|
-
import { createDalvikBytecodeFormat21cParser, createDalvikBytecodeFormat21sParser, createDalvikBytecodeFormat21tParser, createDalvikBytecodeFormat22bParser, createDalvikBytecodeFormat22cParser, createDalvikBytecodeFormat22sParser, createDalvikBytecodeFormat22tParser, dalvikBytecodeFormat23xParser, dalvikBytecodeFormat31iParser, createDalvikBytecodeFormat35cParser, createDalvikBytecodeFormat3rcParser, dalvikBytecodeFormat10tParser, dalvikBytecodeFormat10xParser, dalvikBytecodeFormat11xParser, dalvikBytecodeFormat12xParser, dalvikBytecodeFormat20tParser, dalvikBytecodeFormat22xParser,
|
|
3
|
-
import {
|
|
4
|
-
import {
|
|
5
|
-
import {
|
|
6
|
-
import {
|
|
7
|
-
import {
|
|
8
|
-
import {
|
|
9
|
-
import {
|
|
1
|
+
import { createArrayParser } from './arrayParser.js';
|
|
2
|
+
import { createDalvikBytecodeFormat21cParser, createDalvikBytecodeFormat21sParser, createDalvikBytecodeFormat21tParser, createDalvikBytecodeFormat22bParser, createDalvikBytecodeFormat22cParser, createDalvikBytecodeFormat22sParser, createDalvikBytecodeFormat22tParser, dalvikBytecodeFormat23xParser, createDalvikBytecodeFormat31cParser, dalvikBytecodeFormat31iParser, dalvikBytecodeFormat31tParser, createDalvikBytecodeFormat35cParser, createDalvikBytecodeFormat3rcParser, dalvikBytecodeFormat10tParser, dalvikBytecodeFormat10xParser, dalvikBytecodeFormat11xParser, dalvikBytecodeFormat11nParser, dalvikBytecodeFormat12xParser, dalvikBytecodeFormat20tParser, dalvikBytecodeFormat22xParser, dalvikBytecodeFormat32xParser, dalvikBytecodeFormat30tParser, dalvikBytecodeFormat51lParser, createDalvikBytecodeFormat45ccParser, createDalvikBytecodeFormat4rccParser, } from './dalvikBytecodeParser/formatParsers.js';
|
|
3
|
+
import { ubyteParser, ushortParser, intParser, uintParser, createExactUshortParser, } from './dalvikExecutableParser/typeParsers.js';
|
|
4
|
+
import { isoIndexIntoFieldIds, isoIndexIntoMethodIds, isoIndexIntoPrototypeIds, isoIndexIntoStringIds, isoIndexIntoTypeIds, } from './dalvikExecutableParser/typedNumbers.js';
|
|
5
|
+
import { createExactElementParser } from './exactElementParser.js';
|
|
6
|
+
import { createElementSwitchParser } from './exactElementSwitchParser.js';
|
|
7
|
+
import { setParserName } from './parser.js';
|
|
8
|
+
import { promiseCompose } from './promiseCompose.js';
|
|
9
|
+
import { createSliceBoundedParser } from './sliceBoundedParser.js';
|
|
10
|
+
import { createDisjunctionParser } from './disjunctionParser.js';
|
|
11
|
+
import { parserCreatorCompose } from './parserCreatorCompose.js';
|
|
12
|
+
import { createQuantifierParser } from './quantifierParser.js';
|
|
13
|
+
import { createTupleParser } from './tupleParser.js';
|
|
10
14
|
// https://source.android.com/docs/core/runtime/dalvik-bytecode
|
|
11
15
|
const dalvikBytecodeOperationUnusedParser = async (parserContext) => {
|
|
12
16
|
const opcode = await parserContext.read(0);
|
|
13
|
-
parserContext.invariant(((opcode >=
|
|
17
|
+
parserContext.invariant(((opcode >= 0x3E && opcode <= 0x43)
|
|
14
18
|
|| (opcode === 0x73)
|
|
15
|
-
|| (opcode >= 0x79 && opcode <=
|
|
16
|
-
|| (opcode >=
|
|
19
|
+
|| (opcode >= 0x79 && opcode <= 0x7A)
|
|
20
|
+
|| (opcode >= 0xE3 && opcode <= 0xF9)), 'Expected unused opcode');
|
|
17
21
|
parserContext.skip(1);
|
|
18
22
|
};
|
|
19
23
|
setParserName(dalvikBytecodeOperationUnusedParser, 'dalvikBytecodeOperationUnusedParser');
|
|
20
|
-
const dalvikBytecodeOperationNoOperationParser = promiseCompose(
|
|
21
|
-
|
|
24
|
+
const dalvikBytecodeOperationNoOperationParser = promiseCompose(createExactUshortParser(0x00_00), // nop is 2 bytes: 0x00 0x00
|
|
25
|
+
() => ({
|
|
26
|
+
operation: 'nop',
|
|
22
27
|
}));
|
|
23
28
|
setParserName(dalvikBytecodeOperationNoOperationParser, 'dalvikBytecodeOperationNoOperationParser');
|
|
24
29
|
const createDalvikBytecodeOperationInvoke = (operation, opcode) => promiseCompose(createTupleParser([
|
|
@@ -26,17 +31,17 @@ const createDalvikBytecodeOperationInvoke = (operation, opcode) => promiseCompos
|
|
|
26
31
|
createDalvikBytecodeFormat35cParser({
|
|
27
32
|
isoIndex: isoIndexIntoMethodIds,
|
|
28
33
|
}),
|
|
29
|
-
]), ([_opcode, { index, registers }]) => ({
|
|
34
|
+
]), ([_opcode, { index, registers },]) => ({
|
|
30
35
|
operation,
|
|
31
36
|
methodIndex: index,
|
|
32
37
|
registers,
|
|
33
38
|
}));
|
|
34
|
-
const dalvikBytecodeOperationInvokeVirtualParser = createDalvikBytecodeOperationInvoke('invoke-virtual',
|
|
35
|
-
const dalvikBytecodeOperationInvokeSuperParser = createDalvikBytecodeOperationInvoke('invoke-super',
|
|
39
|
+
const dalvikBytecodeOperationInvokeVirtualParser = createDalvikBytecodeOperationInvoke('invoke-virtual', 0x6E);
|
|
40
|
+
const dalvikBytecodeOperationInvokeSuperParser = createDalvikBytecodeOperationInvoke('invoke-super', 0x6F);
|
|
36
41
|
const dalvikBytecodeOperationInvokeDirectParser = createDalvikBytecodeOperationInvoke('invoke-direct', 0x70);
|
|
37
42
|
const dalvikBytecodeOperationInvokeStaticParser = createDalvikBytecodeOperationInvoke('invoke-static', 0x71);
|
|
38
43
|
const dalvikBytecodeOperationInvokeInterfaceParser = createDalvikBytecodeOperationInvoke('invoke-interface', 0x72);
|
|
39
|
-
const dalvikBytecodeOperationInvokeParser =
|
|
44
|
+
const dalvikBytecodeOperationInvokeParser = createDisjunctionParser([
|
|
40
45
|
dalvikBytecodeOperationInvokeVirtualParser,
|
|
41
46
|
dalvikBytecodeOperationInvokeSuperParser,
|
|
42
47
|
dalvikBytecodeOperationInvokeDirectParser,
|
|
@@ -49,7 +54,7 @@ const createDalvikBytecodeOperationInvokeRange = (operation, opcode) => promiseC
|
|
|
49
54
|
createDalvikBytecodeFormat3rcParser({
|
|
50
55
|
isoIndex: isoIndexIntoMethodIds,
|
|
51
56
|
}),
|
|
52
|
-
]), ([_opcode, { index, registers }]) => ({
|
|
57
|
+
]), ([_opcode, { index, registers },]) => ({
|
|
53
58
|
operation,
|
|
54
59
|
methodIndex: index,
|
|
55
60
|
registers,
|
|
@@ -59,7 +64,7 @@ const dalvikBytecodeOperationInvokeSuperRangeParser = createDalvikBytecodeOperat
|
|
|
59
64
|
const dalvikBytecodeOperationInvokeDirectRangeParser = createDalvikBytecodeOperationInvokeRange('invoke-direct/range', 0x76);
|
|
60
65
|
const dalvikBytecodeOperationInvokeStaticRangeParser = createDalvikBytecodeOperationInvokeRange('invoke-static/range', 0x77);
|
|
61
66
|
const dalvikBytecodeOperationInvokeInterfaceRangeParser = createDalvikBytecodeOperationInvokeRange('invoke-interface/range', 0x78);
|
|
62
|
-
const dalvikBytecodeOperationInvokeRangeParser =
|
|
67
|
+
const dalvikBytecodeOperationInvokeRangeParser = createDisjunctionParser([
|
|
63
68
|
dalvikBytecodeOperationInvokeVirtualRangeParser,
|
|
64
69
|
dalvikBytecodeOperationInvokeSuperRangeParser,
|
|
65
70
|
dalvikBytecodeOperationInvokeDirectRangeParser,
|
|
@@ -67,6 +72,32 @@ const dalvikBytecodeOperationInvokeRangeParser = createUnionParser([
|
|
|
67
72
|
dalvikBytecodeOperationInvokeInterfaceRangeParser,
|
|
68
73
|
]);
|
|
69
74
|
setParserName(dalvikBytecodeOperationInvokeRangeParser, 'dalvikBytecodeOperationInvokeRangeParser');
|
|
75
|
+
const dalvikBytecodeOperationInvokePolymorphicParser = promiseCompose(createTupleParser([
|
|
76
|
+
createExactElementParser(0xFA),
|
|
77
|
+
createDalvikBytecodeFormat45ccParser({
|
|
78
|
+
isoMethodIndex: isoIndexIntoMethodIds,
|
|
79
|
+
isoProtoIndex: isoIndexIntoPrototypeIds,
|
|
80
|
+
}),
|
|
81
|
+
]), ([_opcode, { methodIndex, protoIndex, registers },]) => ({
|
|
82
|
+
operation: 'invoke-polymorphic',
|
|
83
|
+
methodIndex,
|
|
84
|
+
protoIndex,
|
|
85
|
+
registers,
|
|
86
|
+
}));
|
|
87
|
+
setParserName(dalvikBytecodeOperationInvokePolymorphicParser, 'dalvikBytecodeOperationInvokePolymorphicParser');
|
|
88
|
+
const dalvikBytecodeOperationInvokePolymorphicRangeParser = promiseCompose(createTupleParser([
|
|
89
|
+
createExactElementParser(0xFB),
|
|
90
|
+
createDalvikBytecodeFormat4rccParser({
|
|
91
|
+
isoMethodIndex: isoIndexIntoMethodIds,
|
|
92
|
+
isoProtoIndex: isoIndexIntoPrototypeIds,
|
|
93
|
+
}),
|
|
94
|
+
]), ([_opcode, { methodIndex, protoIndex, registers },]) => ({
|
|
95
|
+
operation: 'invoke-polymorphic/range',
|
|
96
|
+
methodIndex,
|
|
97
|
+
protoIndex,
|
|
98
|
+
registers,
|
|
99
|
+
}));
|
|
100
|
+
setParserName(dalvikBytecodeOperationInvokePolymorphicRangeParser, 'dalvikBytecodeOperationInvokePolymorphicRangeParser');
|
|
70
101
|
const dalvikBytecodeOperationGotoParser = promiseCompose(createTupleParser([
|
|
71
102
|
createExactElementParser(0x28),
|
|
72
103
|
dalvikBytecodeFormat10tParser,
|
|
@@ -81,6 +112,78 @@ const dalvikBytecodeOperationGoto16Parser = promiseCompose(createTupleParser([
|
|
|
81
112
|
operation: 'goto/16',
|
|
82
113
|
branchOffset,
|
|
83
114
|
}));
|
|
115
|
+
const dalvikBytecodeOperationGoto32Parser = promiseCompose(createTupleParser([
|
|
116
|
+
createExactElementParser(0x2A),
|
|
117
|
+
dalvikBytecodeFormat30tParser,
|
|
118
|
+
]), ([_opcode, { branchOffset }]) => ({
|
|
119
|
+
operation: 'goto/32',
|
|
120
|
+
branchOffset,
|
|
121
|
+
}));
|
|
122
|
+
const dalvikBytecodeOperationPackedSwitchParser = promiseCompose(createTupleParser([
|
|
123
|
+
createExactElementParser(0x2B),
|
|
124
|
+
dalvikBytecodeFormat31tParser,
|
|
125
|
+
]), ([_opcode, { branchOffset, registers }]) => ({
|
|
126
|
+
operation: 'packed-switch',
|
|
127
|
+
branchOffset,
|
|
128
|
+
registers,
|
|
129
|
+
}));
|
|
130
|
+
setParserName(dalvikBytecodeOperationPackedSwitchParser, 'dalvikBytecodeOperationPackedSwitchParser');
|
|
131
|
+
const dalvikBytecodeOperationPackedSwitchPayloadParser = parserCreatorCompose(() => promiseCompose(createTupleParser([
|
|
132
|
+
createExactUshortParser(0x01_00),
|
|
133
|
+
ushortParser,
|
|
134
|
+
intParser,
|
|
135
|
+
]), ([_ident, size, value]) => ({
|
|
136
|
+
size,
|
|
137
|
+
value,
|
|
138
|
+
})), ({ size, value }) => promiseCompose(createQuantifierParser(intParser, size), branchOffsets => ({
|
|
139
|
+
operation: 'packed-switch-payload',
|
|
140
|
+
value,
|
|
141
|
+
branchOffsets,
|
|
142
|
+
})))();
|
|
143
|
+
setParserName(dalvikBytecodeOperationPackedSwitchPayloadParser, 'dalvikBytecodeOperationPackedSwitchPayloadParser');
|
|
144
|
+
const dalvikBytecodeOperationSparseSwitchParser = promiseCompose(createTupleParser([
|
|
145
|
+
createExactElementParser(0x2C),
|
|
146
|
+
dalvikBytecodeFormat31tParser,
|
|
147
|
+
]), ([_opcode, { branchOffset, registers }]) => ({
|
|
148
|
+
operation: 'sparse-switch',
|
|
149
|
+
branchOffset,
|
|
150
|
+
registers,
|
|
151
|
+
}));
|
|
152
|
+
setParserName(dalvikBytecodeOperationSparseSwitchParser, 'dalvikBytecodeOperationSparseSwitchParser');
|
|
153
|
+
const dalvikBytecodeOperationSparseSwitchPayloadParser = parserCreatorCompose(() => promiseCompose(createTupleParser([
|
|
154
|
+
createExactUshortParser(0x02_00),
|
|
155
|
+
ushortParser,
|
|
156
|
+
]), ([_ident, size]) => ({
|
|
157
|
+
size,
|
|
158
|
+
})), ({ size }) => promiseCompose(createTupleParser([
|
|
159
|
+
createQuantifierParser(intParser, size),
|
|
160
|
+
createQuantifierParser(intParser, size),
|
|
161
|
+
]), ([keys, branchOffsets]) => ({
|
|
162
|
+
operation: 'sparse-switch-payload',
|
|
163
|
+
keys,
|
|
164
|
+
branchOffsets,
|
|
165
|
+
})))();
|
|
166
|
+
setParserName(dalvikBytecodeOperationSparseSwitchPayloadParser, 'dalvikBytecodeOperationSparseSwitchPayloadParser');
|
|
167
|
+
const dalvikBytecodeOperationFillArrayDataPayloadParser = parserCreatorCompose(() => promiseCompose(createTupleParser([
|
|
168
|
+
createExactUshortParser(0x03_00),
|
|
169
|
+
ushortParser,
|
|
170
|
+
uintParser,
|
|
171
|
+
]), ([_ident, elementWidth, size]) => ({
|
|
172
|
+
elementWidth,
|
|
173
|
+
size,
|
|
174
|
+
})), ({ elementWidth, size }) => {
|
|
175
|
+
const dataSize = size * elementWidth;
|
|
176
|
+
const paddingSize = dataSize % 2; // 1 if odd, 0 if even
|
|
177
|
+
return promiseCompose(createTupleParser([
|
|
178
|
+
createQuantifierParser(ubyteParser, dataSize),
|
|
179
|
+
paddingSize > 0 ? createQuantifierParser(ubyteParser, paddingSize) : () => [],
|
|
180
|
+
]), ([data, _padding]) => ({
|
|
181
|
+
operation: 'fill-array-data-payload',
|
|
182
|
+
elementWidth,
|
|
183
|
+
data,
|
|
184
|
+
}));
|
|
185
|
+
})();
|
|
186
|
+
setParserName(dalvikBytecodeOperationFillArrayDataPayloadParser, 'dalvikBytecodeOperationFillArrayDataPayloadParser');
|
|
84
187
|
const dalvikBytecodeOperationInstanceOfParser = promiseCompose(createTupleParser([
|
|
85
188
|
createExactElementParser(0x20),
|
|
86
189
|
createDalvikBytecodeFormat22cParser({
|
|
@@ -105,15 +208,15 @@ const dalvikBytecodeOperationArrayElementGetObjectParser = createDalvikBytecodeO
|
|
|
105
208
|
const dalvikBytecodeOperationArrayElementGetBooleanParser = createDalvikBytecodeOperationArrayElement('aget-boolean', 0x47);
|
|
106
209
|
const dalvikBytecodeOperationArrayElementGetByteParser = createDalvikBytecodeOperationArrayElement('aget-byte', 0x48);
|
|
107
210
|
const dalvikBytecodeOperationArrayElementGetCharParser = createDalvikBytecodeOperationArrayElement('aget-char', 0x49);
|
|
108
|
-
const dalvikBytecodeOperationArrayElementGetShortParser = createDalvikBytecodeOperationArrayElement('aget-short',
|
|
109
|
-
const dalvikBytecodeOperationArrayElementPutParser = createDalvikBytecodeOperationArrayElement('aput',
|
|
110
|
-
const dalvikBytecodeOperationArrayElementPutWideParser = createDalvikBytecodeOperationArrayElement('aput-wide',
|
|
111
|
-
const dalvikBytecodeOperationArrayElementPutObjectParser = createDalvikBytecodeOperationArrayElement('aput-object',
|
|
112
|
-
const dalvikBytecodeOperationArrayElementPutBooleanParser = createDalvikBytecodeOperationArrayElement('aput-boolean',
|
|
113
|
-
const dalvikBytecodeOperationArrayElementPutByteParser = createDalvikBytecodeOperationArrayElement('aput-byte',
|
|
211
|
+
const dalvikBytecodeOperationArrayElementGetShortParser = createDalvikBytecodeOperationArrayElement('aget-short', 0x4A);
|
|
212
|
+
const dalvikBytecodeOperationArrayElementPutParser = createDalvikBytecodeOperationArrayElement('aput', 0x4B);
|
|
213
|
+
const dalvikBytecodeOperationArrayElementPutWideParser = createDalvikBytecodeOperationArrayElement('aput-wide', 0x4C);
|
|
214
|
+
const dalvikBytecodeOperationArrayElementPutObjectParser = createDalvikBytecodeOperationArrayElement('aput-object', 0x4D);
|
|
215
|
+
const dalvikBytecodeOperationArrayElementPutBooleanParser = createDalvikBytecodeOperationArrayElement('aput-boolean', 0x4E);
|
|
216
|
+
const dalvikBytecodeOperationArrayElementPutByteParser = createDalvikBytecodeOperationArrayElement('aput-byte', 0x4F);
|
|
114
217
|
const dalvikBytecodeOperationArrayElementPutCharParser = createDalvikBytecodeOperationArrayElement('aput-char', 0x50);
|
|
115
218
|
const dalvikBytecodeOperationArrayElementPutShortParser = createDalvikBytecodeOperationArrayElement('aput-short', 0x51);
|
|
116
|
-
const dalvikBytecodeOperationArrayElementParser =
|
|
219
|
+
const dalvikBytecodeOperationArrayElementParser = createDisjunctionParser([
|
|
117
220
|
dalvikBytecodeOperationArrayElementGetParser,
|
|
118
221
|
dalvikBytecodeOperationArrayElementGetWideParser,
|
|
119
222
|
dalvikBytecodeOperationArrayElementGetObjectParser,
|
|
@@ -148,13 +251,13 @@ const dalvikBytecodeOperationInstanceFieldGetByteParser = createDalvikBytecodeOp
|
|
|
148
251
|
const dalvikBytecodeOperationInstanceFieldGetCharParser = createDalvikBytecodeOperationInstanceField('iget-char', 0x57);
|
|
149
252
|
const dalvikBytecodeOperationInstanceFieldGetShortParser = createDalvikBytecodeOperationInstanceField('iget-short', 0x58);
|
|
150
253
|
const dalvikBytecodeOperationInstanceFieldPutParser = createDalvikBytecodeOperationInstanceField('iput', 0x59);
|
|
151
|
-
const dalvikBytecodeOperationInstanceFieldPutWideParser = createDalvikBytecodeOperationInstanceField('iput-wide',
|
|
152
|
-
const dalvikBytecodeOperationInstanceFieldPutObjectParser = createDalvikBytecodeOperationInstanceField('iput-object',
|
|
153
|
-
const dalvikBytecodeOperationInstanceFieldPutBooleanParser = createDalvikBytecodeOperationInstanceField('iput-boolean',
|
|
154
|
-
const dalvikBytecodeOperationInstanceFieldPutByteParser = createDalvikBytecodeOperationInstanceField('iput-byte',
|
|
155
|
-
const dalvikBytecodeOperationInstanceFieldPutCharParser = createDalvikBytecodeOperationInstanceField('iput-char',
|
|
156
|
-
const dalvikBytecodeOperationInstanceFieldPutShortParser = createDalvikBytecodeOperationInstanceField('iput-short',
|
|
157
|
-
const dalvikBytecodeOperationInstanceFieldParser =
|
|
254
|
+
const dalvikBytecodeOperationInstanceFieldPutWideParser = createDalvikBytecodeOperationInstanceField('iput-wide', 0x5A);
|
|
255
|
+
const dalvikBytecodeOperationInstanceFieldPutObjectParser = createDalvikBytecodeOperationInstanceField('iput-object', 0x5B);
|
|
256
|
+
const dalvikBytecodeOperationInstanceFieldPutBooleanParser = createDalvikBytecodeOperationInstanceField('iput-boolean', 0x5C);
|
|
257
|
+
const dalvikBytecodeOperationInstanceFieldPutByteParser = createDalvikBytecodeOperationInstanceField('iput-byte', 0x5D);
|
|
258
|
+
const dalvikBytecodeOperationInstanceFieldPutCharParser = createDalvikBytecodeOperationInstanceField('iput-char', 0x5E);
|
|
259
|
+
const dalvikBytecodeOperationInstanceFieldPutShortParser = createDalvikBytecodeOperationInstanceField('iput-short', 0x5F);
|
|
260
|
+
const dalvikBytecodeOperationInstanceFieldParser = createDisjunctionParser([
|
|
158
261
|
dalvikBytecodeOperationInstanceFieldGetParser,
|
|
159
262
|
dalvikBytecodeOperationInstanceFieldGetWideParser,
|
|
160
263
|
dalvikBytecodeOperationInstanceFieldGetObjectParser,
|
|
@@ -191,11 +294,11 @@ const dalvikBytecodeOperationStaticFieldGetShortParser = createDalvikBytecodeOpe
|
|
|
191
294
|
const dalvikBytecodeOperationStaticFieldPutParser = createDalvikBytecodeOperationStaticField('sput', 0x67);
|
|
192
295
|
const dalvikBytecodeOperationStaticFieldPutWideParser = createDalvikBytecodeOperationStaticField('sput-wide', 0x68);
|
|
193
296
|
const dalvikBytecodeOperationStaticFieldPutObjectParser = createDalvikBytecodeOperationStaticField('sput-object', 0x69);
|
|
194
|
-
const dalvikBytecodeOperationStaticFieldPutBooleanParser = createDalvikBytecodeOperationStaticField('sput-boolean',
|
|
195
|
-
const dalvikBytecodeOperationStaticFieldPutByteParser = createDalvikBytecodeOperationStaticField('sput-byte',
|
|
196
|
-
const dalvikBytecodeOperationStaticFieldPutCharParser = createDalvikBytecodeOperationStaticField('sput-char',
|
|
197
|
-
const dalvikBytecodeOperationStaticFieldPutShortParser = createDalvikBytecodeOperationStaticField('sput-short',
|
|
198
|
-
const dalvikBytecodeOperationStaticFieldParser =
|
|
297
|
+
const dalvikBytecodeOperationStaticFieldPutBooleanParser = createDalvikBytecodeOperationStaticField('sput-boolean', 0x6A);
|
|
298
|
+
const dalvikBytecodeOperationStaticFieldPutByteParser = createDalvikBytecodeOperationStaticField('sput-byte', 0x6B);
|
|
299
|
+
const dalvikBytecodeOperationStaticFieldPutCharParser = createDalvikBytecodeOperationStaticField('sput-char', 0x6C);
|
|
300
|
+
const dalvikBytecodeOperationStaticFieldPutShortParser = createDalvikBytecodeOperationStaticField('sput-short', 0x6D);
|
|
301
|
+
const dalvikBytecodeOperationStaticFieldParser = createDisjunctionParser([
|
|
199
302
|
dalvikBytecodeOperationStaticFieldGetParser,
|
|
200
303
|
dalvikBytecodeOperationStaticFieldGetWideParser,
|
|
201
304
|
dalvikBytecodeOperationStaticFieldGetObjectParser,
|
|
@@ -220,18 +323,18 @@ const createDalvikBytecodeOperationBinaryOperationLiteral8 = (operation, opcode)
|
|
|
220
323
|
registers,
|
|
221
324
|
value,
|
|
222
325
|
}));
|
|
223
|
-
const dalvikBytecodeOperationAddIntLiteral8Parser = createDalvikBytecodeOperationBinaryOperationLiteral8('add-int/lit8',
|
|
224
|
-
const dalvikBytecodeOperationReverseSubtractIntLiteral8Parser = createDalvikBytecodeOperationBinaryOperationLiteral8('rsub-int/lit8',
|
|
225
|
-
const dalvikBytecodeOperationMultiplyIntLiteral8Parser = createDalvikBytecodeOperationBinaryOperationLiteral8('mul-int/lit8',
|
|
226
|
-
const dalvikBytecodeOperationDivideIntLiteral8Parser = createDalvikBytecodeOperationBinaryOperationLiteral8('div-int/lit8',
|
|
227
|
-
const dalvikBytecodeOperationRemainderIntLiteral8Parser = createDalvikBytecodeOperationBinaryOperationLiteral8('rem-int/lit8',
|
|
228
|
-
const dalvikBytecodeOperationAndIntLiteral8Parser = createDalvikBytecodeOperationBinaryOperationLiteral8('and-int/lit8',
|
|
229
|
-
const dalvikBytecodeOperationOrIntLiteral8Parser = createDalvikBytecodeOperationBinaryOperationLiteral8('or-int/lit8',
|
|
230
|
-
const dalvikBytecodeOperationXorIntLiteral8Parser = createDalvikBytecodeOperationBinaryOperationLiteral8('xor-int/lit8',
|
|
231
|
-
const dalvikBytecodeOperationShiftLeftIntLiteral8Parser = createDalvikBytecodeOperationBinaryOperationLiteral8('shl-int/lit8',
|
|
232
|
-
const dalvikBytecodeOperationShiftRightIntLiteral8Parser = createDalvikBytecodeOperationBinaryOperationLiteral8('shr-int/lit8',
|
|
233
|
-
const dalvikBytecodeOperationUnsignedShiftRightIntLiteral8Parser = createDalvikBytecodeOperationBinaryOperationLiteral8('ushr-int/lit8',
|
|
234
|
-
const dalvikBytecodeOperationBinaryOperationLiteral8Parser =
|
|
326
|
+
const dalvikBytecodeOperationAddIntLiteral8Parser = createDalvikBytecodeOperationBinaryOperationLiteral8('add-int/lit8', 0xD8);
|
|
327
|
+
const dalvikBytecodeOperationReverseSubtractIntLiteral8Parser = createDalvikBytecodeOperationBinaryOperationLiteral8('rsub-int/lit8', 0xD9);
|
|
328
|
+
const dalvikBytecodeOperationMultiplyIntLiteral8Parser = createDalvikBytecodeOperationBinaryOperationLiteral8('mul-int/lit8', 0xDA);
|
|
329
|
+
const dalvikBytecodeOperationDivideIntLiteral8Parser = createDalvikBytecodeOperationBinaryOperationLiteral8('div-int/lit8', 0xDB);
|
|
330
|
+
const dalvikBytecodeOperationRemainderIntLiteral8Parser = createDalvikBytecodeOperationBinaryOperationLiteral8('rem-int/lit8', 0xDC);
|
|
331
|
+
const dalvikBytecodeOperationAndIntLiteral8Parser = createDalvikBytecodeOperationBinaryOperationLiteral8('and-int/lit8', 0xDD);
|
|
332
|
+
const dalvikBytecodeOperationOrIntLiteral8Parser = createDalvikBytecodeOperationBinaryOperationLiteral8('or-int/lit8', 0xDE);
|
|
333
|
+
const dalvikBytecodeOperationXorIntLiteral8Parser = createDalvikBytecodeOperationBinaryOperationLiteral8('xor-int/lit8', 0xDF);
|
|
334
|
+
const dalvikBytecodeOperationShiftLeftIntLiteral8Parser = createDalvikBytecodeOperationBinaryOperationLiteral8('shl-int/lit8', 0xE0);
|
|
335
|
+
const dalvikBytecodeOperationShiftRightIntLiteral8Parser = createDalvikBytecodeOperationBinaryOperationLiteral8('shr-int/lit8', 0xE1);
|
|
336
|
+
const dalvikBytecodeOperationUnsignedShiftRightIntLiteral8Parser = createDalvikBytecodeOperationBinaryOperationLiteral8('ushr-int/lit8', 0xE2);
|
|
337
|
+
const dalvikBytecodeOperationBinaryOperationLiteral8Parser = createDisjunctionParser([
|
|
235
338
|
dalvikBytecodeOperationAddIntLiteral8Parser,
|
|
236
339
|
dalvikBytecodeOperationReverseSubtractIntLiteral8Parser,
|
|
237
340
|
dalvikBytecodeOperationMultiplyIntLiteral8Parser,
|
|
@@ -253,15 +356,15 @@ const createDalvikBytecodeOperationBinaryOperationLiteral16 = (operation, opcode
|
|
|
253
356
|
registers,
|
|
254
357
|
value,
|
|
255
358
|
}));
|
|
256
|
-
const dalvikBytecodeOperationAddIntLiteral16Parser = createDalvikBytecodeOperationBinaryOperationLiteral16('add-int/lit16',
|
|
257
|
-
const dalvikBytecodeOperationReverseSubtractIntLiteral16Parser = createDalvikBytecodeOperationBinaryOperationLiteral16('rsub-int
|
|
258
|
-
const dalvikBytecodeOperationMultiplyIntLiteral16Parser = createDalvikBytecodeOperationBinaryOperationLiteral16('mul-int/lit16',
|
|
259
|
-
const dalvikBytecodeOperationDivideIntLiteral16Parser = createDalvikBytecodeOperationBinaryOperationLiteral16('div-int/lit16',
|
|
260
|
-
const dalvikBytecodeOperationRemainderIntLiteral16Parser = createDalvikBytecodeOperationBinaryOperationLiteral16('rem-int/lit16',
|
|
261
|
-
const dalvikBytecodeOperationAndIntLiteral16Parser = createDalvikBytecodeOperationBinaryOperationLiteral16('and-int/lit16',
|
|
262
|
-
const dalvikBytecodeOperationOrIntLiteral16Parser = createDalvikBytecodeOperationBinaryOperationLiteral16('or-int/lit16',
|
|
263
|
-
const dalvikBytecodeOperationXorIntLiteral16Parser = createDalvikBytecodeOperationBinaryOperationLiteral16('xor-int/lit16',
|
|
264
|
-
const dalvikBytecodeOperationBinaryOperationLiteral16Parser =
|
|
359
|
+
const dalvikBytecodeOperationAddIntLiteral16Parser = createDalvikBytecodeOperationBinaryOperationLiteral16('add-int/lit16', 0xD0);
|
|
360
|
+
const dalvikBytecodeOperationReverseSubtractIntLiteral16Parser = createDalvikBytecodeOperationBinaryOperationLiteral16('rsub-int', 0xD1);
|
|
361
|
+
const dalvikBytecodeOperationMultiplyIntLiteral16Parser = createDalvikBytecodeOperationBinaryOperationLiteral16('mul-int/lit16', 0xD2);
|
|
362
|
+
const dalvikBytecodeOperationDivideIntLiteral16Parser = createDalvikBytecodeOperationBinaryOperationLiteral16('div-int/lit16', 0xD3);
|
|
363
|
+
const dalvikBytecodeOperationRemainderIntLiteral16Parser = createDalvikBytecodeOperationBinaryOperationLiteral16('rem-int/lit16', 0xD4);
|
|
364
|
+
const dalvikBytecodeOperationAndIntLiteral16Parser = createDalvikBytecodeOperationBinaryOperationLiteral16('and-int/lit16', 0xD5);
|
|
365
|
+
const dalvikBytecodeOperationOrIntLiteral16Parser = createDalvikBytecodeOperationBinaryOperationLiteral16('or-int/lit16', 0xD6);
|
|
366
|
+
const dalvikBytecodeOperationXorIntLiteral16Parser = createDalvikBytecodeOperationBinaryOperationLiteral16('xor-int/lit16', 0xD7);
|
|
367
|
+
const dalvikBytecodeOperationBinaryOperationLiteral16Parser = createDisjunctionParser([
|
|
265
368
|
dalvikBytecodeOperationAddIntLiteral16Parser,
|
|
266
369
|
dalvikBytecodeOperationReverseSubtractIntLiteral16Parser,
|
|
267
370
|
dalvikBytecodeOperationMultiplyIntLiteral16Parser,
|
|
@@ -279,38 +382,39 @@ const createDalvikBytecodeOperationBinaryOperationInPlace = (operation, opcode)
|
|
|
279
382
|
operation,
|
|
280
383
|
registers,
|
|
281
384
|
}));
|
|
282
|
-
const dalvikBytecodeOperationAddIntInPlaceParser = createDalvikBytecodeOperationBinaryOperationInPlace('add-int/2addr',
|
|
283
|
-
const dalvikBytecodeOperationReverseSubtractIntInPlaceParser = createDalvikBytecodeOperationBinaryOperationInPlace('
|
|
284
|
-
const dalvikBytecodeOperationMultiplyIntInPlaceParser = createDalvikBytecodeOperationBinaryOperationInPlace('mul-int/2addr',
|
|
285
|
-
const dalvikBytecodeOperationDivideIntInPlaceParser = createDalvikBytecodeOperationBinaryOperationInPlace('div-int/2addr',
|
|
286
|
-
const dalvikBytecodeOperationRemainderIntInPlaceParser = createDalvikBytecodeOperationBinaryOperationInPlace('rem-int/2addr',
|
|
287
|
-
const dalvikBytecodeOperationAndIntInPlaceParser = createDalvikBytecodeOperationBinaryOperationInPlace('and-int/2addr',
|
|
288
|
-
const dalvikBytecodeOperationOrIntInPlaceParser = createDalvikBytecodeOperationBinaryOperationInPlace('or-int/2addr',
|
|
289
|
-
const dalvikBytecodeOperationXorIntInPlaceParser = createDalvikBytecodeOperationBinaryOperationInPlace('xor-int/2addr',
|
|
290
|
-
const dalvikBytecodeOperationShiftLeftIntInPlaceParser = createDalvikBytecodeOperationBinaryOperationInPlace('shl-int/2addr',
|
|
291
|
-
const dalvikBytecodeOperationShiftRightIntInPlaceParser = createDalvikBytecodeOperationBinaryOperationInPlace('shr-int/2addr',
|
|
292
|
-
const dalvikBytecodeOperationUnsignedShiftRightIntInPlaceParser = createDalvikBytecodeOperationBinaryOperationInPlace('ushr-int/2addr',
|
|
293
|
-
const dalvikBytecodeOperationAddLongInPlaceParser = createDalvikBytecodeOperationBinaryOperationInPlace('add-long/2addr',
|
|
294
|
-
const
|
|
295
|
-
const dalvikBytecodeOperationMultiplyLongInPlaceParser = createDalvikBytecodeOperationBinaryOperationInPlace('mul-long/2addr',
|
|
296
|
-
const dalvikBytecodeOperationDivideLongInPlaceParser = createDalvikBytecodeOperationBinaryOperationInPlace('div-long/2addr',
|
|
297
|
-
const dalvikBytecodeOperationRemainderLongInPlaceParser = createDalvikBytecodeOperationBinaryOperationInPlace('rem-long/2addr',
|
|
298
|
-
const dalvikBytecodeOperationAndLongInPlaceParser = createDalvikBytecodeOperationBinaryOperationInPlace('and-long/2addr',
|
|
299
|
-
const dalvikBytecodeOperationOrLongInPlaceParser = createDalvikBytecodeOperationBinaryOperationInPlace('or-long/2addr',
|
|
300
|
-
const dalvikBytecodeOperationXorLongInPlaceParser = createDalvikBytecodeOperationBinaryOperationInPlace('xor-long/2addr',
|
|
301
|
-
const dalvikBytecodeOperationShiftLeftLongInPlaceParser = createDalvikBytecodeOperationBinaryOperationInPlace('shl-long/2addr',
|
|
302
|
-
const dalvikBytecodeOperationShiftRightLongInPlaceParser = createDalvikBytecodeOperationBinaryOperationInPlace('shr-long/2addr',
|
|
303
|
-
const dalvikBytecodeOperationUnsignedShiftRightLongInPlaceParser = createDalvikBytecodeOperationBinaryOperationInPlace('ushr-long/2addr',
|
|
304
|
-
const dalvikBytecodeOperationAddFloatInPlaceParser = createDalvikBytecodeOperationBinaryOperationInPlace('add-float/2addr',
|
|
305
|
-
const dalvikBytecodeOperationSubtractFloatInPlaceParser = createDalvikBytecodeOperationBinaryOperationInPlace('sub-float/2addr',
|
|
306
|
-
const dalvikBytecodeOperationMultiplyFloatInPlaceParser = createDalvikBytecodeOperationBinaryOperationInPlace('mul-float/2addr',
|
|
307
|
-
const dalvikBytecodeOperationDivideFloatInPlaceParser = createDalvikBytecodeOperationBinaryOperationInPlace('div-float/2addr',
|
|
308
|
-
const
|
|
309
|
-
const
|
|
310
|
-
const
|
|
311
|
-
const
|
|
312
|
-
const
|
|
313
|
-
const
|
|
385
|
+
const dalvikBytecodeOperationAddIntInPlaceParser = createDalvikBytecodeOperationBinaryOperationInPlace('add-int/2addr', 0xB0);
|
|
386
|
+
const dalvikBytecodeOperationReverseSubtractIntInPlaceParser = createDalvikBytecodeOperationBinaryOperationInPlace('sub-int/2addr', 0xB1);
|
|
387
|
+
const dalvikBytecodeOperationMultiplyIntInPlaceParser = createDalvikBytecodeOperationBinaryOperationInPlace('mul-int/2addr', 0xB2);
|
|
388
|
+
const dalvikBytecodeOperationDivideIntInPlaceParser = createDalvikBytecodeOperationBinaryOperationInPlace('div-int/2addr', 0xB3);
|
|
389
|
+
const dalvikBytecodeOperationRemainderIntInPlaceParser = createDalvikBytecodeOperationBinaryOperationInPlace('rem-int/2addr', 0xB4);
|
|
390
|
+
const dalvikBytecodeOperationAndIntInPlaceParser = createDalvikBytecodeOperationBinaryOperationInPlace('and-int/2addr', 0xB5);
|
|
391
|
+
const dalvikBytecodeOperationOrIntInPlaceParser = createDalvikBytecodeOperationBinaryOperationInPlace('or-int/2addr', 0xB6);
|
|
392
|
+
const dalvikBytecodeOperationXorIntInPlaceParser = createDalvikBytecodeOperationBinaryOperationInPlace('xor-int/2addr', 0xB7);
|
|
393
|
+
const dalvikBytecodeOperationShiftLeftIntInPlaceParser = createDalvikBytecodeOperationBinaryOperationInPlace('shl-int/2addr', 0xB8);
|
|
394
|
+
const dalvikBytecodeOperationShiftRightIntInPlaceParser = createDalvikBytecodeOperationBinaryOperationInPlace('shr-int/2addr', 0xB9);
|
|
395
|
+
const dalvikBytecodeOperationUnsignedShiftRightIntInPlaceParser = createDalvikBytecodeOperationBinaryOperationInPlace('ushr-int/2addr', 0xBA);
|
|
396
|
+
const dalvikBytecodeOperationAddLongInPlaceParser = createDalvikBytecodeOperationBinaryOperationInPlace('add-long/2addr', 0xBB);
|
|
397
|
+
const dalvikBytecodeOperationSubtractLongInPlaceParser = createDalvikBytecodeOperationBinaryOperationInPlace('sub-long/2addr', 0xBC);
|
|
398
|
+
const dalvikBytecodeOperationMultiplyLongInPlaceParser = createDalvikBytecodeOperationBinaryOperationInPlace('mul-long/2addr', 0xBD);
|
|
399
|
+
const dalvikBytecodeOperationDivideLongInPlaceParser = createDalvikBytecodeOperationBinaryOperationInPlace('div-long/2addr', 0xBE);
|
|
400
|
+
const dalvikBytecodeOperationRemainderLongInPlaceParser = createDalvikBytecodeOperationBinaryOperationInPlace('rem-long/2addr', 0xBF);
|
|
401
|
+
const dalvikBytecodeOperationAndLongInPlaceParser = createDalvikBytecodeOperationBinaryOperationInPlace('and-long/2addr', 0xC0);
|
|
402
|
+
const dalvikBytecodeOperationOrLongInPlaceParser = createDalvikBytecodeOperationBinaryOperationInPlace('or-long/2addr', 0xC1);
|
|
403
|
+
const dalvikBytecodeOperationXorLongInPlaceParser = createDalvikBytecodeOperationBinaryOperationInPlace('xor-long/2addr', 0xC2);
|
|
404
|
+
const dalvikBytecodeOperationShiftLeftLongInPlaceParser = createDalvikBytecodeOperationBinaryOperationInPlace('shl-long/2addr', 0xC3);
|
|
405
|
+
const dalvikBytecodeOperationShiftRightLongInPlaceParser = createDalvikBytecodeOperationBinaryOperationInPlace('shr-long/2addr', 0xC4);
|
|
406
|
+
const dalvikBytecodeOperationUnsignedShiftRightLongInPlaceParser = createDalvikBytecodeOperationBinaryOperationInPlace('ushr-long/2addr', 0xC5);
|
|
407
|
+
const dalvikBytecodeOperationAddFloatInPlaceParser = createDalvikBytecodeOperationBinaryOperationInPlace('add-float/2addr', 0xC6);
|
|
408
|
+
const dalvikBytecodeOperationSubtractFloatInPlaceParser = createDalvikBytecodeOperationBinaryOperationInPlace('sub-float/2addr', 0xC7);
|
|
409
|
+
const dalvikBytecodeOperationMultiplyFloatInPlaceParser = createDalvikBytecodeOperationBinaryOperationInPlace('mul-float/2addr', 0xC8);
|
|
410
|
+
const dalvikBytecodeOperationDivideFloatInPlaceParser = createDalvikBytecodeOperationBinaryOperationInPlace('div-float/2addr', 0xC9);
|
|
411
|
+
const dalvikBytecodeOperationRemainderFloatInPlaceParser = createDalvikBytecodeOperationBinaryOperationInPlace('rem-float/2addr', 0xCA);
|
|
412
|
+
const dalvikBytecodeOperationAddDoubleInPlaceParser = createDalvikBytecodeOperationBinaryOperationInPlace('add-double/2addr', 0xCB);
|
|
413
|
+
const dalvikBytecodeOperationSubtractDoubleInPlaceParser = createDalvikBytecodeOperationBinaryOperationInPlace('sub-double/2addr', 0xCC);
|
|
414
|
+
const dalvikBytecodeOperationMultiplyDoubleInPlaceParser = createDalvikBytecodeOperationBinaryOperationInPlace('mul-double/2addr', 0xCD);
|
|
415
|
+
const dalvikBytecodeOperationDivideDoubleInPlaceParser = createDalvikBytecodeOperationBinaryOperationInPlace('div-double/2addr', 0xCE);
|
|
416
|
+
const dalvikBytecodeOperationRemainderDoubleInPlaceParser = createDalvikBytecodeOperationBinaryOperationInPlace('rem-double/2addr', 0xCF);
|
|
417
|
+
const dalvikBytecodeOperationBinaryOperationInPlaceParser = createDisjunctionParser([
|
|
314
418
|
dalvikBytecodeOperationAddIntInPlaceParser,
|
|
315
419
|
dalvikBytecodeOperationReverseSubtractIntInPlaceParser,
|
|
316
420
|
dalvikBytecodeOperationMultiplyIntInPlaceParser,
|
|
@@ -323,7 +427,7 @@ const dalvikBytecodeOperationBinaryOperationInPlaceParser = createUnionParser([
|
|
|
323
427
|
dalvikBytecodeOperationShiftRightIntInPlaceParser,
|
|
324
428
|
dalvikBytecodeOperationUnsignedShiftRightIntInPlaceParser,
|
|
325
429
|
dalvikBytecodeOperationAddLongInPlaceParser,
|
|
326
|
-
|
|
430
|
+
dalvikBytecodeOperationSubtractLongInPlaceParser,
|
|
327
431
|
dalvikBytecodeOperationMultiplyLongInPlaceParser,
|
|
328
432
|
dalvikBytecodeOperationDivideLongInPlaceParser,
|
|
329
433
|
dalvikBytecodeOperationRemainderLongInPlaceParser,
|
|
@@ -337,6 +441,7 @@ const dalvikBytecodeOperationBinaryOperationInPlaceParser = createUnionParser([
|
|
|
337
441
|
dalvikBytecodeOperationSubtractFloatInPlaceParser,
|
|
338
442
|
dalvikBytecodeOperationMultiplyFloatInPlaceParser,
|
|
339
443
|
dalvikBytecodeOperationDivideFloatInPlaceParser,
|
|
444
|
+
dalvikBytecodeOperationRemainderFloatInPlaceParser,
|
|
340
445
|
dalvikBytecodeOperationAddDoubleInPlaceParser,
|
|
341
446
|
dalvikBytecodeOperationSubtractDoubleInPlaceParser,
|
|
342
447
|
dalvikBytecodeOperationMultiplyDoubleInPlaceParser,
|
|
@@ -361,28 +466,28 @@ const dalvikBytecodeOperationOrIntParser = createDalvikBytecodeOperationBinaryOp
|
|
|
361
466
|
const dalvikBytecodeOperationXorIntParser = createDalvikBytecodeOperationBinaryOperation('xor-int', 0x97);
|
|
362
467
|
const dalvikBytecodeOperationShiftLeftIntParser = createDalvikBytecodeOperationBinaryOperation('shl-int', 0x98);
|
|
363
468
|
const dalvikBytecodeOperationShiftRightIntParser = createDalvikBytecodeOperationBinaryOperation('shr-int', 0x99);
|
|
364
|
-
const dalvikBytecodeOperationUnsignedShiftRightIntParser = createDalvikBytecodeOperationBinaryOperation('ushr-int',
|
|
365
|
-
const dalvikBytecodeOperationAddLongParser = createDalvikBytecodeOperationBinaryOperation('add-long',
|
|
366
|
-
const dalvikBytecodeOperationSubtractLongParser = createDalvikBytecodeOperationBinaryOperation('sub-long',
|
|
367
|
-
const dalvikBytecodeOperationMultiplyLongParser = createDalvikBytecodeOperationBinaryOperation('mul-long',
|
|
368
|
-
const dalvikBytecodeOperationDivideLongParser = createDalvikBytecodeOperationBinaryOperation('div-long',
|
|
369
|
-
const dalvikBytecodeOperationRemainderLongParser = createDalvikBytecodeOperationBinaryOperation('rem-long',
|
|
370
|
-
const dalvikBytecodeOperationAndLongParser = createDalvikBytecodeOperationBinaryOperation('and-long',
|
|
371
|
-
const dalvikBytecodeOperationOrLongParser = createDalvikBytecodeOperationBinaryOperation('or-long',
|
|
372
|
-
const dalvikBytecodeOperationXorLongParser = createDalvikBytecodeOperationBinaryOperation('xor-long',
|
|
373
|
-
const dalvikBytecodeOperationShiftLeftLongParser = createDalvikBytecodeOperationBinaryOperation('shl-long',
|
|
374
|
-
const dalvikBytecodeOperationShiftRightLongParser = createDalvikBytecodeOperationBinaryOperation('shr-long',
|
|
375
|
-
const dalvikBytecodeOperationUnsignedShiftRightLongParser = createDalvikBytecodeOperationBinaryOperation('ushr-long',
|
|
376
|
-
const dalvikBytecodeOperationAddFloatParser = createDalvikBytecodeOperationBinaryOperation('add-float',
|
|
377
|
-
const dalvikBytecodeOperationSubtractFloatParser = createDalvikBytecodeOperationBinaryOperation('sub-float',
|
|
378
|
-
const dalvikBytecodeOperationMultiplyFloatParser = createDalvikBytecodeOperationBinaryOperation('mul-float',
|
|
379
|
-
const dalvikBytecodeOperationDivideFloatParser = createDalvikBytecodeOperationBinaryOperation('div-float',
|
|
380
|
-
const dalvikBytecodeOperationAddDoubleParser = createDalvikBytecodeOperationBinaryOperation('add-double',
|
|
381
|
-
const dalvikBytecodeOperationSubtractDoubleParser = createDalvikBytecodeOperationBinaryOperation('sub-double',
|
|
382
|
-
const dalvikBytecodeOperationMultiplyDoubleParser = createDalvikBytecodeOperationBinaryOperation('mul-double',
|
|
383
|
-
const dalvikBytecodeOperationDivideDoubleParser = createDalvikBytecodeOperationBinaryOperation('div-double',
|
|
384
|
-
const dalvikBytecodeOperationRemainderDoubleParser = createDalvikBytecodeOperationBinaryOperation('rem-double',
|
|
385
|
-
const dalvikBytecodeOperationBinaryOperationParser =
|
|
469
|
+
const dalvikBytecodeOperationUnsignedShiftRightIntParser = createDalvikBytecodeOperationBinaryOperation('ushr-int', 0x9A);
|
|
470
|
+
const dalvikBytecodeOperationAddLongParser = createDalvikBytecodeOperationBinaryOperation('add-long', 0x9B);
|
|
471
|
+
const dalvikBytecodeOperationSubtractLongParser = createDalvikBytecodeOperationBinaryOperation('sub-long', 0x9C);
|
|
472
|
+
const dalvikBytecodeOperationMultiplyLongParser = createDalvikBytecodeOperationBinaryOperation('mul-long', 0x9D);
|
|
473
|
+
const dalvikBytecodeOperationDivideLongParser = createDalvikBytecodeOperationBinaryOperation('div-long', 0x9E);
|
|
474
|
+
const dalvikBytecodeOperationRemainderLongParser = createDalvikBytecodeOperationBinaryOperation('rem-long', 0x9F);
|
|
475
|
+
const dalvikBytecodeOperationAndLongParser = createDalvikBytecodeOperationBinaryOperation('and-long', 0xA0);
|
|
476
|
+
const dalvikBytecodeOperationOrLongParser = createDalvikBytecodeOperationBinaryOperation('or-long', 0xA1);
|
|
477
|
+
const dalvikBytecodeOperationXorLongParser = createDalvikBytecodeOperationBinaryOperation('xor-long', 0xA2);
|
|
478
|
+
const dalvikBytecodeOperationShiftLeftLongParser = createDalvikBytecodeOperationBinaryOperation('shl-long', 0xA3);
|
|
479
|
+
const dalvikBytecodeOperationShiftRightLongParser = createDalvikBytecodeOperationBinaryOperation('shr-long', 0xA4);
|
|
480
|
+
const dalvikBytecodeOperationUnsignedShiftRightLongParser = createDalvikBytecodeOperationBinaryOperation('ushr-long', 0xA5);
|
|
481
|
+
const dalvikBytecodeOperationAddFloatParser = createDalvikBytecodeOperationBinaryOperation('add-float', 0xA6);
|
|
482
|
+
const dalvikBytecodeOperationSubtractFloatParser = createDalvikBytecodeOperationBinaryOperation('sub-float', 0xA7);
|
|
483
|
+
const dalvikBytecodeOperationMultiplyFloatParser = createDalvikBytecodeOperationBinaryOperation('mul-float', 0xA8);
|
|
484
|
+
const dalvikBytecodeOperationDivideFloatParser = createDalvikBytecodeOperationBinaryOperation('div-float', 0xA9);
|
|
485
|
+
const dalvikBytecodeOperationAddDoubleParser = createDalvikBytecodeOperationBinaryOperation('add-double', 0xAB);
|
|
486
|
+
const dalvikBytecodeOperationSubtractDoubleParser = createDalvikBytecodeOperationBinaryOperation('sub-double', 0xAC);
|
|
487
|
+
const dalvikBytecodeOperationMultiplyDoubleParser = createDalvikBytecodeOperationBinaryOperation('mul-double', 0xAD);
|
|
488
|
+
const dalvikBytecodeOperationDivideDoubleParser = createDalvikBytecodeOperationBinaryOperation('div-double', 0xAE);
|
|
489
|
+
const dalvikBytecodeOperationRemainderDoubleParser = createDalvikBytecodeOperationBinaryOperation('rem-double', 0xAF);
|
|
490
|
+
const dalvikBytecodeOperationBinaryOperationParser = createDisjunctionParser([
|
|
386
491
|
dalvikBytecodeOperationAddIntParser,
|
|
387
492
|
dalvikBytecodeOperationSubtractIntParser,
|
|
388
493
|
dalvikBytecodeOperationMultiplyIntParser,
|
|
@@ -423,11 +528,11 @@ const createDalvikBytecodeOperationUnaryOperation = (operation, opcode) => promi
|
|
|
423
528
|
operation,
|
|
424
529
|
registers,
|
|
425
530
|
}));
|
|
426
|
-
const dalvikBytecodeOperationNegateIntParser = createDalvikBytecodeOperationUnaryOperation('neg-int',
|
|
427
|
-
const dalvikBytecodeOperationNotIntParser = createDalvikBytecodeOperationUnaryOperation('not-int',
|
|
428
|
-
const dalvikBytecodeOperationNegateLongParser = createDalvikBytecodeOperationUnaryOperation('neg-long',
|
|
429
|
-
const dalvikBytecodeOperationNotLongParser = createDalvikBytecodeOperationUnaryOperation('not-long',
|
|
430
|
-
const dalvikBytecodeOperationNegateFloatParser = createDalvikBytecodeOperationUnaryOperation('neg-float',
|
|
531
|
+
const dalvikBytecodeOperationNegateIntParser = createDalvikBytecodeOperationUnaryOperation('neg-int', 0x7B);
|
|
532
|
+
const dalvikBytecodeOperationNotIntParser = createDalvikBytecodeOperationUnaryOperation('not-int', 0x7C);
|
|
533
|
+
const dalvikBytecodeOperationNegateLongParser = createDalvikBytecodeOperationUnaryOperation('neg-long', 0x7D);
|
|
534
|
+
const dalvikBytecodeOperationNotLongParser = createDalvikBytecodeOperationUnaryOperation('not-long', 0x7E);
|
|
535
|
+
const dalvikBytecodeOperationNegateFloatParser = createDalvikBytecodeOperationUnaryOperation('neg-float', 0x7F);
|
|
431
536
|
const dalvikBytecodeOperationNegateDoubleParser = createDalvikBytecodeOperationUnaryOperation('neg-double', 0x80);
|
|
432
537
|
const dalvikBytecodeOperationIntToLongParser = createDalvikBytecodeOperationUnaryOperation('int-to-long', 0x81);
|
|
433
538
|
const dalvikBytecodeOperationIntToFloatParser = createDalvikBytecodeOperationUnaryOperation('int-to-float', 0x82);
|
|
@@ -438,13 +543,13 @@ const dalvikBytecodeOperationLongToDoubleParser = createDalvikBytecodeOperationU
|
|
|
438
543
|
const dalvikBytecodeOperationFloatToIntParser = createDalvikBytecodeOperationUnaryOperation('float-to-int', 0x87);
|
|
439
544
|
const dalvikBytecodeOperationFloatToLongParser = createDalvikBytecodeOperationUnaryOperation('float-to-long', 0x88);
|
|
440
545
|
const dalvikBytecodeOperationFloatToDoubleParser = createDalvikBytecodeOperationUnaryOperation('float-to-double', 0x89);
|
|
441
|
-
const dalvikBytecodeOperationDoubleToIntParser = createDalvikBytecodeOperationUnaryOperation('double-to-int',
|
|
442
|
-
const dalvikBytecodeOperationDoubleToLongParser = createDalvikBytecodeOperationUnaryOperation('double-to-long',
|
|
443
|
-
const dalvikBytecodeOperationDoubleToFloatParser = createDalvikBytecodeOperationUnaryOperation('double-to-float',
|
|
444
|
-
const dalvikBytecodeOperationIntToByteParser = createDalvikBytecodeOperationUnaryOperation('int-to-byte',
|
|
445
|
-
const dalvikBytecodeOperationIntToCharParser = createDalvikBytecodeOperationUnaryOperation('int-to-char',
|
|
446
|
-
const dalvikBytecodeOperationIntToShortParser = createDalvikBytecodeOperationUnaryOperation('int-to-short',
|
|
447
|
-
const dalvikBytecodeOperationUnaryOperationParser =
|
|
546
|
+
const dalvikBytecodeOperationDoubleToIntParser = createDalvikBytecodeOperationUnaryOperation('double-to-int', 0x8A);
|
|
547
|
+
const dalvikBytecodeOperationDoubleToLongParser = createDalvikBytecodeOperationUnaryOperation('double-to-long', 0x8B);
|
|
548
|
+
const dalvikBytecodeOperationDoubleToFloatParser = createDalvikBytecodeOperationUnaryOperation('double-to-float', 0x8C);
|
|
549
|
+
const dalvikBytecodeOperationIntToByteParser = createDalvikBytecodeOperationUnaryOperation('int-to-byte', 0x8D);
|
|
550
|
+
const dalvikBytecodeOperationIntToCharParser = createDalvikBytecodeOperationUnaryOperation('int-to-char', 0x8E);
|
|
551
|
+
const dalvikBytecodeOperationIntToShortParser = createDalvikBytecodeOperationUnaryOperation('int-to-short', 0x8F);
|
|
552
|
+
const dalvikBytecodeOperationUnaryOperationParser = createDisjunctionParser([
|
|
448
553
|
dalvikBytecodeOperationNegateIntParser,
|
|
449
554
|
dalvikBytecodeOperationNotIntParser,
|
|
450
555
|
dalvikBytecodeOperationNegateLongParser,
|
|
@@ -468,21 +573,31 @@ const dalvikBytecodeOperationUnaryOperationParser = createUnionParser([
|
|
|
468
573
|
dalvikBytecodeOperationIntToShortParser,
|
|
469
574
|
]);
|
|
470
575
|
setParserName(dalvikBytecodeOperationUnaryOperationParser, 'dalvikBytecodeOperationUnaryOperationParser');
|
|
576
|
+
// For commutative comparison operations (if-eq, if-ne), sort registers to match baksmali's canonical output
|
|
577
|
+
const createDalvikBytecodeOperationIfTestCommutative = (operation, opcode) => promiseCompose(createTupleParser([
|
|
578
|
+
createExactElementParser(opcode),
|
|
579
|
+
createDalvikBytecodeFormat22tParser(),
|
|
580
|
+
]), ([_opcode, { registers, branchOffset }]) => ({
|
|
581
|
+
operation,
|
|
582
|
+
registers: registers.sort((a, b) => a - b),
|
|
583
|
+
branchOffset,
|
|
584
|
+
}));
|
|
585
|
+
// For non-commutative comparison operations (if-lt, if-ge, if-gt, if-le), reverse to get correct semantic order
|
|
471
586
|
const createDalvikBytecodeOperationIfTest = (operation, opcode) => promiseCompose(createTupleParser([
|
|
472
587
|
createExactElementParser(opcode),
|
|
473
588
|
createDalvikBytecodeFormat22tParser(),
|
|
474
589
|
]), ([_opcode, { registers, branchOffset }]) => ({
|
|
475
590
|
operation,
|
|
476
|
-
registers,
|
|
591
|
+
registers: registers.reverse(),
|
|
477
592
|
branchOffset,
|
|
478
593
|
}));
|
|
479
|
-
const dalvikBytecodeIfEqualParser =
|
|
480
|
-
const dalvikBytecodeIfNotEqualParser =
|
|
594
|
+
const dalvikBytecodeIfEqualParser = createDalvikBytecodeOperationIfTestCommutative('if-eq', 0x32);
|
|
595
|
+
const dalvikBytecodeIfNotEqualParser = createDalvikBytecodeOperationIfTestCommutative('if-ne', 0x33);
|
|
481
596
|
const dalvikBytecodeIfLessThanParser = createDalvikBytecodeOperationIfTest('if-lt', 0x34);
|
|
482
597
|
const dalvikBytecodeIfGreaterThanOrEqualToParser = createDalvikBytecodeOperationIfTest('if-ge', 0x35);
|
|
483
598
|
const dalvikBytecodeIfGreaterThanParser = createDalvikBytecodeOperationIfTest('if-gt', 0x36);
|
|
484
599
|
const dalvikBytecodeIfLessThanOrEqualToParser = createDalvikBytecodeOperationIfTest('if-le', 0x37);
|
|
485
|
-
const dalvikBytecodeOperationIfTestParser =
|
|
600
|
+
const dalvikBytecodeOperationIfTestParser = createDisjunctionParser([
|
|
486
601
|
dalvikBytecodeIfEqualParser,
|
|
487
602
|
dalvikBytecodeIfNotEqualParser,
|
|
488
603
|
dalvikBytecodeIfLessThanParser,
|
|
@@ -501,11 +616,11 @@ const createDalvikBytecodeOperationIfTestZero = (operation, opcode) => promiseCo
|
|
|
501
616
|
}));
|
|
502
617
|
const dalvikBytecodeIfEqualZeroParser = createDalvikBytecodeOperationIfTestZero('if-eqz', 0x38);
|
|
503
618
|
const dalvikBytecodeIfNotEqualZeroParser = createDalvikBytecodeOperationIfTestZero('if-nez', 0x39);
|
|
504
|
-
const dalvikBytecodeIfLessThanZeroParser = createDalvikBytecodeOperationIfTestZero('if-ltz',
|
|
505
|
-
const dalvikBytecodeIfGreaterThanOrEqualToZeroParser = createDalvikBytecodeOperationIfTestZero('if-gez',
|
|
506
|
-
const dalvikBytecodeIfGreaterThanZeroParser = createDalvikBytecodeOperationIfTestZero('if-gtz',
|
|
507
|
-
const dalvikBytecodeIfLessThanOrEqualToZeroParser = createDalvikBytecodeOperationIfTestZero('if-lez',
|
|
508
|
-
const dalvikBytecodeOperationIfTestZeroParser =
|
|
619
|
+
const dalvikBytecodeIfLessThanZeroParser = createDalvikBytecodeOperationIfTestZero('if-ltz', 0x3A);
|
|
620
|
+
const dalvikBytecodeIfGreaterThanOrEqualToZeroParser = createDalvikBytecodeOperationIfTestZero('if-gez', 0x3B);
|
|
621
|
+
const dalvikBytecodeIfGreaterThanZeroParser = createDalvikBytecodeOperationIfTestZero('if-gtz', 0x3C);
|
|
622
|
+
const dalvikBytecodeIfLessThanOrEqualToZeroParser = createDalvikBytecodeOperationIfTestZero('if-lez', 0x3D);
|
|
623
|
+
const dalvikBytecodeOperationIfTestZeroParser = createDisjunctionParser([
|
|
509
624
|
dalvikBytecodeIfEqualZeroParser,
|
|
510
625
|
dalvikBytecodeIfNotEqualZeroParser,
|
|
511
626
|
dalvikBytecodeIfLessThanZeroParser,
|
|
@@ -515,7 +630,7 @@ const dalvikBytecodeOperationIfTestZeroParser = createUnionParser([
|
|
|
515
630
|
]);
|
|
516
631
|
setParserName(dalvikBytecodeOperationIfTestZeroParser, 'dalvikBytecodeOperationIfTestZeroParser');
|
|
517
632
|
const dalvikBytecodeOperationConstStringParser = promiseCompose(createTupleParser([
|
|
518
|
-
createExactElementParser(
|
|
633
|
+
createExactElementParser(0x1A),
|
|
519
634
|
createDalvikBytecodeFormat21cParser({
|
|
520
635
|
isoIndex: isoIndexIntoStringIds,
|
|
521
636
|
}),
|
|
@@ -525,8 +640,19 @@ const dalvikBytecodeOperationConstStringParser = promiseCompose(createTupleParse
|
|
|
525
640
|
registers,
|
|
526
641
|
}));
|
|
527
642
|
setParserName(dalvikBytecodeOperationConstStringParser, 'dalvikBytecodeOperationConstStringParser');
|
|
643
|
+
const dalvikBytecodeOperationConstStringJumboParser = promiseCompose(createTupleParser([
|
|
644
|
+
createExactElementParser(0x1B),
|
|
645
|
+
createDalvikBytecodeFormat31cParser({
|
|
646
|
+
isoIndex: isoIndexIntoStringIds,
|
|
647
|
+
}),
|
|
648
|
+
]), ([_opcode, { index, registers }]) => ({
|
|
649
|
+
operation: 'const-string/jumbo',
|
|
650
|
+
stringIndex: index,
|
|
651
|
+
registers,
|
|
652
|
+
}));
|
|
653
|
+
setParserName(dalvikBytecodeOperationConstStringJumboParser, 'dalvikBytecodeOperationConstStringJumboParser');
|
|
528
654
|
const dalvikBytecodeOperationConstMethodHandleParser = promiseCompose(createTupleParser([
|
|
529
|
-
createExactElementParser(
|
|
655
|
+
createExactElementParser(0xFE),
|
|
530
656
|
createDalvikBytecodeFormat21cParser({
|
|
531
657
|
isoIndex: isoIndexIntoMethodIds,
|
|
532
658
|
}),
|
|
@@ -558,8 +684,39 @@ const dalvikBytecodeOperationNewArrayParser = promiseCompose(createTupleParser([
|
|
|
558
684
|
registers,
|
|
559
685
|
}));
|
|
560
686
|
setParserName(dalvikBytecodeOperationNewArrayParser, 'dalvikBytecodeOperationNewArrayParser');
|
|
687
|
+
const dalvikBytecodeOperationFilledNewArrayParser = promiseCompose(createTupleParser([
|
|
688
|
+
createExactElementParser(0x24),
|
|
689
|
+
createDalvikBytecodeFormat35cParser({
|
|
690
|
+
isoIndex: isoIndexIntoTypeIds,
|
|
691
|
+
}),
|
|
692
|
+
]), ([_opcode, { index, registers }]) => ({
|
|
693
|
+
operation: 'filled-new-array',
|
|
694
|
+
typeIndex: index,
|
|
695
|
+
registers,
|
|
696
|
+
}));
|
|
697
|
+
setParserName(dalvikBytecodeOperationFilledNewArrayParser, 'dalvikBytecodeOperationFilledNewArrayParser');
|
|
698
|
+
const dalvikBytecodeOperationFilledNewArrayRangeParser = promiseCompose(createTupleParser([
|
|
699
|
+
createExactElementParser(0x25),
|
|
700
|
+
createDalvikBytecodeFormat3rcParser({
|
|
701
|
+
isoIndex: isoIndexIntoTypeIds,
|
|
702
|
+
}),
|
|
703
|
+
]), ([_opcode, { index, registers }]) => ({
|
|
704
|
+
operation: 'filled-new-array/range',
|
|
705
|
+
typeIndex: index,
|
|
706
|
+
registers,
|
|
707
|
+
}));
|
|
708
|
+
setParserName(dalvikBytecodeOperationFilledNewArrayRangeParser, 'dalvikBytecodeOperationFilledNewArrayRangeParser');
|
|
709
|
+
const dalvikBytecodeOperationFillArrayDataParser = promiseCompose(createTupleParser([
|
|
710
|
+
createExactElementParser(0x26),
|
|
711
|
+
dalvikBytecodeFormat31tParser,
|
|
712
|
+
]), ([_opcode, { branchOffset, registers }]) => ({
|
|
713
|
+
operation: 'fill-array-data',
|
|
714
|
+
branchOffset,
|
|
715
|
+
registers,
|
|
716
|
+
}));
|
|
717
|
+
setParserName(dalvikBytecodeOperationFillArrayDataParser, 'dalvikBytecodeOperationFillArrayDataParser');
|
|
561
718
|
const dalvikBytecodeOperationCheckCastParser = promiseCompose(createTupleParser([
|
|
562
|
-
createExactElementParser(
|
|
719
|
+
createExactElementParser(0x1F),
|
|
563
720
|
createDalvikBytecodeFormat21cParser({
|
|
564
721
|
isoIndex: isoIndexIntoTypeIds,
|
|
565
722
|
}),
|
|
@@ -569,8 +726,16 @@ const dalvikBytecodeOperationCheckCastParser = promiseCompose(createTupleParser(
|
|
|
569
726
|
registers,
|
|
570
727
|
}));
|
|
571
728
|
setParserName(dalvikBytecodeOperationCheckCastParser, 'dalvikBytecodeOperationCheckCastParser');
|
|
729
|
+
const dalvikBytecodeOperationArrayLengthParser = promiseCompose(createTupleParser([
|
|
730
|
+
createExactElementParser(0x21),
|
|
731
|
+
dalvikBytecodeFormat12xParser,
|
|
732
|
+
]), ([_opcode, { registers }]) => ({
|
|
733
|
+
operation: 'array-length',
|
|
734
|
+
registers: registers.reverse(),
|
|
735
|
+
}));
|
|
736
|
+
setParserName(dalvikBytecodeOperationArrayLengthParser, 'dalvikBytecodeOperationArrayLengthParser');
|
|
572
737
|
const dalvikBytecodeOperationConstClassParser = promiseCompose(createTupleParser([
|
|
573
|
-
createExactElementParser(
|
|
738
|
+
createExactElementParser(0x1C),
|
|
574
739
|
createDalvikBytecodeFormat21cParser({
|
|
575
740
|
isoIndex: isoIndexIntoTypeIds,
|
|
576
741
|
}),
|
|
@@ -580,8 +745,24 @@ const dalvikBytecodeOperationConstClassParser = promiseCompose(createTupleParser
|
|
|
580
745
|
registers,
|
|
581
746
|
}));
|
|
582
747
|
setParserName(dalvikBytecodeOperationConstClassParser, 'dalvikBytecodeOperationConstClassParser');
|
|
748
|
+
const dalvikBytecodeOperationMonitorEnterParser = promiseCompose(createTupleParser([
|
|
749
|
+
createExactElementParser(0x1D),
|
|
750
|
+
dalvikBytecodeFormat11xParser,
|
|
751
|
+
]), ([_opcode, { registers }]) => ({
|
|
752
|
+
operation: 'monitor-enter',
|
|
753
|
+
registers,
|
|
754
|
+
}));
|
|
755
|
+
setParserName(dalvikBytecodeOperationMonitorEnterParser, 'dalvikBytecodeOperationMonitorEnterParser');
|
|
756
|
+
const dalvikBytecodeOperationMonitorExitParser = promiseCompose(createTupleParser([
|
|
757
|
+
createExactElementParser(0x1E),
|
|
758
|
+
dalvikBytecodeFormat11xParser,
|
|
759
|
+
]), ([_opcode, { registers }]) => ({
|
|
760
|
+
operation: 'monitor-exit',
|
|
761
|
+
registers,
|
|
762
|
+
}));
|
|
763
|
+
setParserName(dalvikBytecodeOperationMonitorExitParser, 'dalvikBytecodeOperationMonitorExitParser');
|
|
583
764
|
const dalvikBytecodeOperationReturnVoidParser = promiseCompose(createTupleParser([
|
|
584
|
-
createExactElementParser(
|
|
765
|
+
createExactElementParser(0x0E),
|
|
585
766
|
dalvikBytecodeFormat10xParser,
|
|
586
767
|
]), () => ({
|
|
587
768
|
operation: 'return-void',
|
|
@@ -594,11 +775,11 @@ const createDalvikBytecodeMoveResult1Parser = (operation, opcode) => promiseComp
|
|
|
594
775
|
operation,
|
|
595
776
|
registers,
|
|
596
777
|
}));
|
|
597
|
-
const dalvikBytecodeMoveResultParser = createDalvikBytecodeMoveResult1Parser('move-result',
|
|
598
|
-
const dalvikBytecodeMoveResultWideParser = createDalvikBytecodeMoveResult1Parser('move-result-wide',
|
|
599
|
-
const dalvikBytecodeMoveResultObjectParser = createDalvikBytecodeMoveResult1Parser('move-result-object',
|
|
600
|
-
const dalvikBytecodeMoveExceptionParser = createDalvikBytecodeMoveResult1Parser('move-exception',
|
|
601
|
-
const dalvikBytecodeOperationMoveResult1Parser =
|
|
778
|
+
const dalvikBytecodeMoveResultParser = createDalvikBytecodeMoveResult1Parser('move-result', 0x0A);
|
|
779
|
+
const dalvikBytecodeMoveResultWideParser = createDalvikBytecodeMoveResult1Parser('move-result-wide', 0x0B);
|
|
780
|
+
const dalvikBytecodeMoveResultObjectParser = createDalvikBytecodeMoveResult1Parser('move-result-object', 0x0C);
|
|
781
|
+
const dalvikBytecodeMoveExceptionParser = createDalvikBytecodeMoveResult1Parser('move-exception', 0x0D);
|
|
782
|
+
const dalvikBytecodeOperationMoveResult1Parser = createDisjunctionParser([
|
|
602
783
|
dalvikBytecodeMoveResultParser,
|
|
603
784
|
dalvikBytecodeMoveResultWideParser,
|
|
604
785
|
dalvikBytecodeMoveResultObjectParser,
|
|
@@ -659,10 +840,10 @@ const dalvikBytecodeOperationMoveWide16Parser = promiseCompose(createTupleParser
|
|
|
659
840
|
}));
|
|
660
841
|
setParserName(dalvikBytecodeOperationMoveWide16Parser, 'dalvikBytecodeOperationMoveWide16Parser');
|
|
661
842
|
const createDalvikBytecodeOperationReturn1Parser = createDalvikBytecodeMoveResult1Parser;
|
|
662
|
-
const dalvikBytecodeOperationReturnParser = createDalvikBytecodeOperationReturn1Parser('return',
|
|
843
|
+
const dalvikBytecodeOperationReturnParser = createDalvikBytecodeOperationReturn1Parser('return', 0x0F);
|
|
663
844
|
const dalvikBytecodeOperationReturnWideParser = createDalvikBytecodeOperationReturn1Parser('return-wide', 0x10);
|
|
664
845
|
const dalvikBytecodeOperationReturnObjectParser = createDalvikBytecodeOperationReturn1Parser('return-object', 0x11);
|
|
665
|
-
const dalvikBytecodeOperationReturn1Parser =
|
|
846
|
+
const dalvikBytecodeOperationReturn1Parser = createDisjunctionParser([
|
|
666
847
|
dalvikBytecodeOperationReturnParser,
|
|
667
848
|
dalvikBytecodeOperationReturnWideParser,
|
|
668
849
|
dalvikBytecodeOperationReturnObjectParser,
|
|
@@ -670,13 +851,11 @@ const dalvikBytecodeOperationReturn1Parser = createUnionParser([
|
|
|
670
851
|
setParserName(dalvikBytecodeOperationReturn1Parser, 'dalvikBytecodeOperationReturn1Parser');
|
|
671
852
|
const dalvikBytecodeOperationConst4Parser = promiseCompose(createTupleParser([
|
|
672
853
|
createExactElementParser(0x12),
|
|
673
|
-
|
|
674
|
-
]), ([_opcode,
|
|
854
|
+
dalvikBytecodeFormat11nParser,
|
|
855
|
+
]), ([_opcode, { value, registers },]) => ({
|
|
675
856
|
operation: 'const/4',
|
|
676
|
-
registers
|
|
677
|
-
|
|
678
|
-
],
|
|
679
|
-
value: value << 28 >> 28,
|
|
857
|
+
registers,
|
|
858
|
+
value,
|
|
680
859
|
}));
|
|
681
860
|
setParserName(dalvikBytecodeOperationConst4Parser, 'dalvikBytecodeOperationConst4Parser');
|
|
682
861
|
const dalvikBytecodeOperationConst16Parser = promiseCompose(createTupleParser([
|
|
@@ -706,6 +885,33 @@ const dalvikBytecodeOperationConstWide16Parser = promiseCompose(createTupleParse
|
|
|
706
885
|
value: BigInt(value) << 48n >> 48n,
|
|
707
886
|
}));
|
|
708
887
|
setParserName(dalvikBytecodeOperationConstWide16Parser, 'dalvikBytecodeOperationConstWide16Parser');
|
|
888
|
+
const dalvikBytecodeOperationConstWide32Parser = promiseCompose(createTupleParser([
|
|
889
|
+
createExactElementParser(0x17),
|
|
890
|
+
dalvikBytecodeFormat31iParser,
|
|
891
|
+
]), ([_opcode, { registers, value }]) => ({
|
|
892
|
+
operation: 'const-wide/32',
|
|
893
|
+
registers,
|
|
894
|
+
value: BigInt(value) << 32n >> 32n,
|
|
895
|
+
}));
|
|
896
|
+
setParserName(dalvikBytecodeOperationConstWide32Parser, 'dalvikBytecodeOperationConstWide32Parser');
|
|
897
|
+
const dalvikBytecodeOperationConstWideParser = promiseCompose(createTupleParser([
|
|
898
|
+
createExactElementParser(0x18),
|
|
899
|
+
dalvikBytecodeFormat51lParser,
|
|
900
|
+
]), ([_opcode, { registers, value }]) => ({
|
|
901
|
+
operation: 'const-wide',
|
|
902
|
+
registers,
|
|
903
|
+
value,
|
|
904
|
+
}));
|
|
905
|
+
setParserName(dalvikBytecodeOperationConstWideParser, 'dalvikBytecodeOperationConstWideParser');
|
|
906
|
+
const dalvikBytecodeOperationConstWideHigh16Parser = promiseCompose(createTupleParser([
|
|
907
|
+
createExactElementParser(0x19),
|
|
908
|
+
createDalvikBytecodeFormat21sParser(),
|
|
909
|
+
]), ([_opcode, { registers, value }]) => ({
|
|
910
|
+
operation: 'const-wide/high16',
|
|
911
|
+
registers,
|
|
912
|
+
value: BigInt(value) << 48n,
|
|
913
|
+
}));
|
|
914
|
+
setParserName(dalvikBytecodeOperationConstWideHigh16Parser, 'dalvikBytecodeOperationConstWideHigh16Parser');
|
|
709
915
|
const dalvikBytecodeOperationConstParser = promiseCompose(createTupleParser([
|
|
710
916
|
createExactElementParser(0x14),
|
|
711
917
|
dalvikBytecodeFormat31iParser,
|
|
@@ -730,12 +936,12 @@ const createDalvikBytecodeOperationCompare = (operation, opcode) => promiseCompo
|
|
|
730
936
|
operation,
|
|
731
937
|
registers,
|
|
732
938
|
}));
|
|
733
|
-
const dalvikBytecodeOperationCompareFloatWithLessThanBiasParser = createDalvikBytecodeOperationCompare('cmpl-float',
|
|
734
|
-
const dalvikBytecodeOperationCompareFloatWithGreaterThanBiasParser = createDalvikBytecodeOperationCompare('cmpg-float',
|
|
735
|
-
const dalvikBytecodeOperationCompareDoubleWithLessThanBiasParser = createDalvikBytecodeOperationCompare('cmpl-double',
|
|
939
|
+
const dalvikBytecodeOperationCompareFloatWithLessThanBiasParser = createDalvikBytecodeOperationCompare('cmpl-float', 0x2D);
|
|
940
|
+
const dalvikBytecodeOperationCompareFloatWithGreaterThanBiasParser = createDalvikBytecodeOperationCompare('cmpg-float', 0x2E);
|
|
941
|
+
const dalvikBytecodeOperationCompareDoubleWithLessThanBiasParser = createDalvikBytecodeOperationCompare('cmpl-double', 0x2F);
|
|
736
942
|
const dalvikBytecodeOperationCompareDoubleWithGreaterThanBiasParser = createDalvikBytecodeOperationCompare('cmpg-double', 0x30);
|
|
737
943
|
const dalvikBytecodeOperationCompareLongParser = createDalvikBytecodeOperationCompare('cmp-long', 0x31);
|
|
738
|
-
const dalvikBytecodeOperationCompareParser =
|
|
944
|
+
const dalvikBytecodeOperationCompareParser = createDisjunctionParser([
|
|
739
945
|
dalvikBytecodeOperationCompareFloatWithLessThanBiasParser,
|
|
740
946
|
dalvikBytecodeOperationCompareFloatWithGreaterThanBiasParser,
|
|
741
947
|
dalvikBytecodeOperationCompareDoubleWithLessThanBiasParser,
|
|
@@ -751,55 +957,302 @@ export const dalvikBytecodeOperationCompanion = {
|
|
|
751
957
|
return [];
|
|
752
958
|
},
|
|
753
959
|
};
|
|
960
|
+
// Map of single-byte opcodes to their parsers for O(1) lookup
|
|
961
|
+
const dalvikBytecodeOperationOpcodeMap = new Map([
|
|
962
|
+
// Invoke operations
|
|
963
|
+
[0x6E, dalvikBytecodeOperationInvokeVirtualParser],
|
|
964
|
+
[0x6F, dalvikBytecodeOperationInvokeSuperParser],
|
|
965
|
+
[0x70, dalvikBytecodeOperationInvokeDirectParser],
|
|
966
|
+
[0x71, dalvikBytecodeOperationInvokeStaticParser],
|
|
967
|
+
[0x72, dalvikBytecodeOperationInvokeInterfaceParser],
|
|
968
|
+
// Invoke range operations
|
|
969
|
+
[0x74, dalvikBytecodeOperationInvokeVirtualRangeParser],
|
|
970
|
+
[0x75, dalvikBytecodeOperationInvokeSuperRangeParser],
|
|
971
|
+
[0x76, dalvikBytecodeOperationInvokeDirectRangeParser],
|
|
972
|
+
[0x77, dalvikBytecodeOperationInvokeStaticRangeParser],
|
|
973
|
+
[0x78, dalvikBytecodeOperationInvokeInterfaceRangeParser],
|
|
974
|
+
// Invoke polymorphic operations
|
|
975
|
+
[0xFA, dalvikBytecodeOperationInvokePolymorphicParser],
|
|
976
|
+
[0xFB, dalvikBytecodeOperationInvokePolymorphicRangeParser],
|
|
977
|
+
// New instance/array operations
|
|
978
|
+
[0x22, dalvikBytecodeOperationNewInstanceParser],
|
|
979
|
+
[0x23, dalvikBytecodeOperationNewArrayParser],
|
|
980
|
+
[0x24, dalvikBytecodeOperationFilledNewArrayParser],
|
|
981
|
+
[0x25, dalvikBytecodeOperationFilledNewArrayRangeParser],
|
|
982
|
+
[0x26, dalvikBytecodeOperationFillArrayDataParser],
|
|
983
|
+
[0x1F, dalvikBytecodeOperationCheckCastParser],
|
|
984
|
+
[0x20, dalvikBytecodeOperationInstanceOfParser],
|
|
985
|
+
[0x21, dalvikBytecodeOperationArrayLengthParser],
|
|
986
|
+
// Array element operations (aget/aput)
|
|
987
|
+
[0x44, dalvikBytecodeOperationArrayElementGetParser],
|
|
988
|
+
[0x45, dalvikBytecodeOperationArrayElementGetWideParser],
|
|
989
|
+
[0x46, dalvikBytecodeOperationArrayElementGetObjectParser],
|
|
990
|
+
[0x47, dalvikBytecodeOperationArrayElementGetBooleanParser],
|
|
991
|
+
[0x48, dalvikBytecodeOperationArrayElementGetByteParser],
|
|
992
|
+
[0x49, dalvikBytecodeOperationArrayElementGetCharParser],
|
|
993
|
+
[0x4A, dalvikBytecodeOperationArrayElementGetShortParser],
|
|
994
|
+
[0x4B, dalvikBytecodeOperationArrayElementPutParser],
|
|
995
|
+
[0x4C, dalvikBytecodeOperationArrayElementPutWideParser],
|
|
996
|
+
[0x4D, dalvikBytecodeOperationArrayElementPutObjectParser],
|
|
997
|
+
[0x4E, dalvikBytecodeOperationArrayElementPutBooleanParser],
|
|
998
|
+
[0x4F, dalvikBytecodeOperationArrayElementPutByteParser],
|
|
999
|
+
[0x50, dalvikBytecodeOperationArrayElementPutCharParser],
|
|
1000
|
+
[0x51, dalvikBytecodeOperationArrayElementPutShortParser],
|
|
1001
|
+
// Instance field operations (iget/iput)
|
|
1002
|
+
[0x52, dalvikBytecodeOperationInstanceFieldGetParser],
|
|
1003
|
+
[0x53, dalvikBytecodeOperationInstanceFieldGetWideParser],
|
|
1004
|
+
[0x54, dalvikBytecodeOperationInstanceFieldGetObjectParser],
|
|
1005
|
+
[0x55, dalvikBytecodeOperationInstanceFieldGetBooleanParser],
|
|
1006
|
+
[0x56, dalvikBytecodeOperationInstanceFieldGetByteParser],
|
|
1007
|
+
[0x57, dalvikBytecodeOperationInstanceFieldGetCharParser],
|
|
1008
|
+
[0x58, dalvikBytecodeOperationInstanceFieldGetShortParser],
|
|
1009
|
+
[0x59, dalvikBytecodeOperationInstanceFieldPutParser],
|
|
1010
|
+
[0x5A, dalvikBytecodeOperationInstanceFieldPutWideParser],
|
|
1011
|
+
[0x5B, dalvikBytecodeOperationInstanceFieldPutObjectParser],
|
|
1012
|
+
[0x5C, dalvikBytecodeOperationInstanceFieldPutBooleanParser],
|
|
1013
|
+
[0x5D, dalvikBytecodeOperationInstanceFieldPutByteParser],
|
|
1014
|
+
[0x5E, dalvikBytecodeOperationInstanceFieldPutCharParser],
|
|
1015
|
+
[0x5F, dalvikBytecodeOperationInstanceFieldPutShortParser],
|
|
1016
|
+
// Static field operations (sget/sput)
|
|
1017
|
+
[0x60, dalvikBytecodeOperationStaticFieldGetParser],
|
|
1018
|
+
[0x61, dalvikBytecodeOperationStaticFieldGetWideParser],
|
|
1019
|
+
[0x62, dalvikBytecodeOperationStaticFieldGetObjectParser],
|
|
1020
|
+
[0x63, dalvikBytecodeOperationStaticFieldGetBooleanParser],
|
|
1021
|
+
[0x64, dalvikBytecodeOperationStaticFieldGetByteParser],
|
|
1022
|
+
[0x65, dalvikBytecodeOperationStaticFieldGetCharParser],
|
|
1023
|
+
[0x66, dalvikBytecodeOperationStaticFieldGetShortParser],
|
|
1024
|
+
[0x67, dalvikBytecodeOperationStaticFieldPutParser],
|
|
1025
|
+
[0x68, dalvikBytecodeOperationStaticFieldPutWideParser],
|
|
1026
|
+
[0x69, dalvikBytecodeOperationStaticFieldPutObjectParser],
|
|
1027
|
+
[0x6A, dalvikBytecodeOperationStaticFieldPutBooleanParser],
|
|
1028
|
+
[0x6B, dalvikBytecodeOperationStaticFieldPutByteParser],
|
|
1029
|
+
[0x6C, dalvikBytecodeOperationStaticFieldPutCharParser],
|
|
1030
|
+
[0x6D, dalvikBytecodeOperationStaticFieldPutShortParser],
|
|
1031
|
+
// Const operations
|
|
1032
|
+
[0x1A, dalvikBytecodeOperationConstStringParser],
|
|
1033
|
+
[0x1B, dalvikBytecodeOperationConstStringJumboParser],
|
|
1034
|
+
[0xFE, dalvikBytecodeOperationConstMethodHandleParser],
|
|
1035
|
+
[0x1C, dalvikBytecodeOperationConstClassParser],
|
|
1036
|
+
// Monitor operations
|
|
1037
|
+
[0x1D, dalvikBytecodeOperationMonitorEnterParser],
|
|
1038
|
+
[0x1E, dalvikBytecodeOperationMonitorExitParser],
|
|
1039
|
+
// Return operations
|
|
1040
|
+
[0x0E, dalvikBytecodeOperationReturnVoidParser],
|
|
1041
|
+
[0x0F, dalvikBytecodeOperationReturnParser],
|
|
1042
|
+
[0x10, dalvikBytecodeOperationReturnWideParser],
|
|
1043
|
+
[0x11, dalvikBytecodeOperationReturnObjectParser],
|
|
1044
|
+
// Throw operation
|
|
1045
|
+
[0x27, dalvikBytecodeOperationThrowParser],
|
|
1046
|
+
// Goto operations
|
|
1047
|
+
[0x28, dalvikBytecodeOperationGotoParser],
|
|
1048
|
+
[0x29, dalvikBytecodeOperationGoto16Parser],
|
|
1049
|
+
[0x2A, dalvikBytecodeOperationGoto32Parser],
|
|
1050
|
+
[0x2B, dalvikBytecodeOperationPackedSwitchParser],
|
|
1051
|
+
[0x2C, dalvikBytecodeOperationSparseSwitchParser],
|
|
1052
|
+
// Move result operations
|
|
1053
|
+
[0x0A, dalvikBytecodeMoveResultParser],
|
|
1054
|
+
[0x0B, dalvikBytecodeMoveResultWideParser],
|
|
1055
|
+
[0x0C, dalvikBytecodeMoveResultObjectParser],
|
|
1056
|
+
[0x0D, dalvikBytecodeMoveExceptionParser],
|
|
1057
|
+
// Move operations
|
|
1058
|
+
[0x01, dalvikBytecodeOperationMoveParser],
|
|
1059
|
+
[0x04, dalvikBytecodeOperationMoveWideParser],
|
|
1060
|
+
[0x07, dalvikBytecodeOperationMoveObjectParser],
|
|
1061
|
+
[0x02, dalvikBytecodeOperationMoveFrom16Parser],
|
|
1062
|
+
[0x05, dalvikBytecodeOperationMoveWideFrom16Parser],
|
|
1063
|
+
[0x08, dalvikBytecodeOperationMoveObjectFrom16Parser],
|
|
1064
|
+
[0x06, dalvikBytecodeOperationMoveWide16Parser],
|
|
1065
|
+
// Const value operations
|
|
1066
|
+
[0x12, dalvikBytecodeOperationConst4Parser],
|
|
1067
|
+
[0x13, dalvikBytecodeOperationConst16Parser],
|
|
1068
|
+
[0x15, dalvikBytecodeOperationConstHigh16Parser],
|
|
1069
|
+
[0x16, dalvikBytecodeOperationConstWide16Parser],
|
|
1070
|
+
[0x17, dalvikBytecodeOperationConstWide32Parser],
|
|
1071
|
+
[0x18, dalvikBytecodeOperationConstWideParser],
|
|
1072
|
+
[0x19, dalvikBytecodeOperationConstWideHigh16Parser],
|
|
1073
|
+
[0x14, dalvikBytecodeOperationConstParser],
|
|
1074
|
+
// Compare operations
|
|
1075
|
+
[0x2D, dalvikBytecodeOperationCompareFloatWithLessThanBiasParser],
|
|
1076
|
+
[0x2E, dalvikBytecodeOperationCompareFloatWithGreaterThanBiasParser],
|
|
1077
|
+
[0x2F, dalvikBytecodeOperationCompareDoubleWithLessThanBiasParser],
|
|
1078
|
+
[0x30, dalvikBytecodeOperationCompareDoubleWithGreaterThanBiasParser],
|
|
1079
|
+
[0x31, dalvikBytecodeOperationCompareLongParser],
|
|
1080
|
+
// If test operations
|
|
1081
|
+
[0x32, dalvikBytecodeIfEqualParser],
|
|
1082
|
+
[0x33, dalvikBytecodeIfNotEqualParser],
|
|
1083
|
+
[0x34, dalvikBytecodeIfLessThanParser],
|
|
1084
|
+
[0x35, dalvikBytecodeIfGreaterThanOrEqualToParser],
|
|
1085
|
+
[0x36, dalvikBytecodeIfGreaterThanParser],
|
|
1086
|
+
[0x37, dalvikBytecodeIfLessThanOrEqualToParser],
|
|
1087
|
+
// If test zero operations
|
|
1088
|
+
[0x38, dalvikBytecodeIfEqualZeroParser],
|
|
1089
|
+
[0x39, dalvikBytecodeIfNotEqualZeroParser],
|
|
1090
|
+
[0x3A, dalvikBytecodeIfLessThanZeroParser],
|
|
1091
|
+
[0x3B, dalvikBytecodeIfGreaterThanOrEqualToZeroParser],
|
|
1092
|
+
[0x3C, dalvikBytecodeIfGreaterThanZeroParser],
|
|
1093
|
+
[0x3D, dalvikBytecodeIfLessThanOrEqualToZeroParser],
|
|
1094
|
+
// Binary operations
|
|
1095
|
+
[0x90, dalvikBytecodeOperationAddIntParser],
|
|
1096
|
+
[0x91, dalvikBytecodeOperationSubtractIntParser],
|
|
1097
|
+
[0x92, dalvikBytecodeOperationMultiplyIntParser],
|
|
1098
|
+
[0x93, dalvikBytecodeOperationDivideIntParser],
|
|
1099
|
+
[0x94, dalvikBytecodeOperationRemainderIntParser],
|
|
1100
|
+
[0x95, dalvikBytecodeOperationAndIntParser],
|
|
1101
|
+
[0x96, dalvikBytecodeOperationOrIntParser],
|
|
1102
|
+
[0x97, dalvikBytecodeOperationXorIntParser],
|
|
1103
|
+
[0x98, dalvikBytecodeOperationShiftLeftIntParser],
|
|
1104
|
+
[0x99, dalvikBytecodeOperationShiftRightIntParser],
|
|
1105
|
+
[0x9A, dalvikBytecodeOperationUnsignedShiftRightIntParser],
|
|
1106
|
+
[0x9B, dalvikBytecodeOperationAddLongParser],
|
|
1107
|
+
[0x9C, dalvikBytecodeOperationSubtractLongParser],
|
|
1108
|
+
[0x9D, dalvikBytecodeOperationMultiplyLongParser],
|
|
1109
|
+
[0x9E, dalvikBytecodeOperationDivideLongParser],
|
|
1110
|
+
[0x9F, dalvikBytecodeOperationRemainderLongParser],
|
|
1111
|
+
[0xA0, dalvikBytecodeOperationAndLongParser],
|
|
1112
|
+
[0xA1, dalvikBytecodeOperationOrLongParser],
|
|
1113
|
+
[0xA2, dalvikBytecodeOperationXorLongParser],
|
|
1114
|
+
[0xA3, dalvikBytecodeOperationShiftLeftLongParser],
|
|
1115
|
+
[0xA4, dalvikBytecodeOperationShiftRightLongParser],
|
|
1116
|
+
[0xA5, dalvikBytecodeOperationUnsignedShiftRightLongParser],
|
|
1117
|
+
[0xA6, dalvikBytecodeOperationAddFloatParser],
|
|
1118
|
+
[0xA7, dalvikBytecodeOperationSubtractFloatParser],
|
|
1119
|
+
[0xA8, dalvikBytecodeOperationMultiplyFloatParser],
|
|
1120
|
+
[0xA9, dalvikBytecodeOperationDivideFloatParser],
|
|
1121
|
+
// Note: 0xAA (rem-float) parser is missing in codebase
|
|
1122
|
+
[0xAB, dalvikBytecodeOperationAddDoubleParser],
|
|
1123
|
+
[0xAC, dalvikBytecodeOperationSubtractDoubleParser],
|
|
1124
|
+
[0xAD, dalvikBytecodeOperationMultiplyDoubleParser],
|
|
1125
|
+
[0xAE, dalvikBytecodeOperationDivideDoubleParser],
|
|
1126
|
+
[0xAF, dalvikBytecodeOperationRemainderDoubleParser],
|
|
1127
|
+
// Binary operations in place (2addr)
|
|
1128
|
+
[0xB0, dalvikBytecodeOperationAddIntInPlaceParser],
|
|
1129
|
+
[0xB1, dalvikBytecodeOperationReverseSubtractIntInPlaceParser],
|
|
1130
|
+
[0xB2, dalvikBytecodeOperationMultiplyIntInPlaceParser],
|
|
1131
|
+
[0xB3, dalvikBytecodeOperationDivideIntInPlaceParser],
|
|
1132
|
+
[0xB4, dalvikBytecodeOperationRemainderIntInPlaceParser],
|
|
1133
|
+
[0xB5, dalvikBytecodeOperationAndIntInPlaceParser],
|
|
1134
|
+
[0xB6, dalvikBytecodeOperationOrIntInPlaceParser],
|
|
1135
|
+
[0xB7, dalvikBytecodeOperationXorIntInPlaceParser],
|
|
1136
|
+
[0xB8, dalvikBytecodeOperationShiftLeftIntInPlaceParser],
|
|
1137
|
+
[0xB9, dalvikBytecodeOperationShiftRightIntInPlaceParser],
|
|
1138
|
+
[0xBA, dalvikBytecodeOperationUnsignedShiftRightIntInPlaceParser],
|
|
1139
|
+
[0xBB, dalvikBytecodeOperationAddLongInPlaceParser],
|
|
1140
|
+
[0xBC, dalvikBytecodeOperationSubtractLongInPlaceParser],
|
|
1141
|
+
[0xBD, dalvikBytecodeOperationMultiplyLongInPlaceParser],
|
|
1142
|
+
[0xBE, dalvikBytecodeOperationDivideLongInPlaceParser],
|
|
1143
|
+
[0xBF, dalvikBytecodeOperationRemainderLongInPlaceParser],
|
|
1144
|
+
[0xC0, dalvikBytecodeOperationAndLongInPlaceParser],
|
|
1145
|
+
[0xC1, dalvikBytecodeOperationOrLongInPlaceParser],
|
|
1146
|
+
[0xC2, dalvikBytecodeOperationXorLongInPlaceParser],
|
|
1147
|
+
[0xC3, dalvikBytecodeOperationShiftLeftLongInPlaceParser],
|
|
1148
|
+
[0xC4, dalvikBytecodeOperationShiftRightLongInPlaceParser],
|
|
1149
|
+
[0xC5, dalvikBytecodeOperationUnsignedShiftRightLongInPlaceParser],
|
|
1150
|
+
[0xC6, dalvikBytecodeOperationAddFloatInPlaceParser],
|
|
1151
|
+
[0xC7, dalvikBytecodeOperationSubtractFloatInPlaceParser],
|
|
1152
|
+
[0xC8, dalvikBytecodeOperationMultiplyFloatInPlaceParser],
|
|
1153
|
+
[0xC9, dalvikBytecodeOperationDivideFloatInPlaceParser],
|
|
1154
|
+
[0xCA, dalvikBytecodeOperationRemainderFloatInPlaceParser],
|
|
1155
|
+
[0xCB, dalvikBytecodeOperationAddDoubleInPlaceParser],
|
|
1156
|
+
[0xCC, dalvikBytecodeOperationSubtractDoubleInPlaceParser],
|
|
1157
|
+
[0xCD, dalvikBytecodeOperationMultiplyDoubleInPlaceParser],
|
|
1158
|
+
[0xCE, dalvikBytecodeOperationDivideDoubleInPlaceParser],
|
|
1159
|
+
[0xCF, dalvikBytecodeOperationRemainderDoubleInPlaceParser],
|
|
1160
|
+
// Binary operations with literal16
|
|
1161
|
+
[0xD0, dalvikBytecodeOperationAddIntLiteral16Parser],
|
|
1162
|
+
[0xD1, dalvikBytecodeOperationReverseSubtractIntLiteral16Parser],
|
|
1163
|
+
[0xD2, dalvikBytecodeOperationMultiplyIntLiteral16Parser],
|
|
1164
|
+
[0xD3, dalvikBytecodeOperationDivideIntLiteral16Parser],
|
|
1165
|
+
[0xD4, dalvikBytecodeOperationRemainderIntLiteral16Parser],
|
|
1166
|
+
[0xD5, dalvikBytecodeOperationAndIntLiteral16Parser],
|
|
1167
|
+
[0xD6, dalvikBytecodeOperationOrIntLiteral16Parser],
|
|
1168
|
+
[0xD7, dalvikBytecodeOperationXorIntLiteral16Parser],
|
|
1169
|
+
// Binary operations with literal8
|
|
1170
|
+
[0xD8, dalvikBytecodeOperationAddIntLiteral8Parser],
|
|
1171
|
+
[0xD9, dalvikBytecodeOperationReverseSubtractIntLiteral8Parser],
|
|
1172
|
+
[0xDA, dalvikBytecodeOperationMultiplyIntLiteral8Parser],
|
|
1173
|
+
[0xDB, dalvikBytecodeOperationDivideIntLiteral8Parser],
|
|
1174
|
+
[0xDC, dalvikBytecodeOperationRemainderIntLiteral8Parser],
|
|
1175
|
+
[0xDD, dalvikBytecodeOperationAndIntLiteral8Parser],
|
|
1176
|
+
[0xDE, dalvikBytecodeOperationOrIntLiteral8Parser],
|
|
1177
|
+
[0xDF, dalvikBytecodeOperationXorIntLiteral8Parser],
|
|
1178
|
+
[0xE0, dalvikBytecodeOperationShiftLeftIntLiteral8Parser],
|
|
1179
|
+
[0xE1, dalvikBytecodeOperationShiftRightIntLiteral8Parser],
|
|
1180
|
+
[0xE2, dalvikBytecodeOperationUnsignedShiftRightIntLiteral8Parser],
|
|
1181
|
+
// Unary operations
|
|
1182
|
+
[0x7B, dalvikBytecodeOperationNegateIntParser],
|
|
1183
|
+
[0x7C, dalvikBytecodeOperationNotIntParser],
|
|
1184
|
+
[0x7D, dalvikBytecodeOperationNegateLongParser],
|
|
1185
|
+
[0x7E, dalvikBytecodeOperationNotLongParser],
|
|
1186
|
+
[0x7F, dalvikBytecodeOperationNegateFloatParser],
|
|
1187
|
+
[0x80, dalvikBytecodeOperationNegateDoubleParser],
|
|
1188
|
+
[0x81, dalvikBytecodeOperationIntToLongParser],
|
|
1189
|
+
[0x82, dalvikBytecodeOperationIntToFloatParser],
|
|
1190
|
+
[0x83, dalvikBytecodeOperationIntToDoubleParser],
|
|
1191
|
+
[0x84, dalvikBytecodeOperationLongToIntParser],
|
|
1192
|
+
[0x85, dalvikBytecodeOperationLongToFloatParser],
|
|
1193
|
+
[0x86, dalvikBytecodeOperationLongToDoubleParser],
|
|
1194
|
+
[0x87, dalvikBytecodeOperationFloatToIntParser],
|
|
1195
|
+
[0x88, dalvikBytecodeOperationFloatToLongParser],
|
|
1196
|
+
[0x89, dalvikBytecodeOperationFloatToDoubleParser],
|
|
1197
|
+
[0x8A, dalvikBytecodeOperationDoubleToIntParser],
|
|
1198
|
+
[0x8B, dalvikBytecodeOperationDoubleToLongParser],
|
|
1199
|
+
[0x8C, dalvikBytecodeOperationDoubleToFloatParser],
|
|
1200
|
+
[0x8D, dalvikBytecodeOperationIntToByteParser],
|
|
1201
|
+
[0x8E, dalvikBytecodeOperationIntToCharParser],
|
|
1202
|
+
[0x8F, dalvikBytecodeOperationIntToShortParser],
|
|
1203
|
+
// Unused opcodes
|
|
1204
|
+
// Range 0x3E-0x43
|
|
1205
|
+
[0x3E, dalvikBytecodeOperationUnusedParser],
|
|
1206
|
+
[0x3F, dalvikBytecodeOperationUnusedParser],
|
|
1207
|
+
[0x40, dalvikBytecodeOperationUnusedParser],
|
|
1208
|
+
[0x41, dalvikBytecodeOperationUnusedParser],
|
|
1209
|
+
[0x42, dalvikBytecodeOperationUnusedParser],
|
|
1210
|
+
[0x43, dalvikBytecodeOperationUnusedParser],
|
|
1211
|
+
// 0x73
|
|
1212
|
+
[0x73, dalvikBytecodeOperationUnusedParser],
|
|
1213
|
+
// Range 0x79-0x7A
|
|
1214
|
+
[0x79, dalvikBytecodeOperationUnusedParser],
|
|
1215
|
+
[0x7A, dalvikBytecodeOperationUnusedParser],
|
|
1216
|
+
// Range 0xE3-0xF9
|
|
1217
|
+
[0xE3, dalvikBytecodeOperationUnusedParser],
|
|
1218
|
+
[0xE4, dalvikBytecodeOperationUnusedParser],
|
|
1219
|
+
[0xE5, dalvikBytecodeOperationUnusedParser],
|
|
1220
|
+
[0xE6, dalvikBytecodeOperationUnusedParser],
|
|
1221
|
+
[0xE7, dalvikBytecodeOperationUnusedParser],
|
|
1222
|
+
[0xE8, dalvikBytecodeOperationUnusedParser],
|
|
1223
|
+
[0xE9, dalvikBytecodeOperationUnusedParser],
|
|
1224
|
+
[0xEA, dalvikBytecodeOperationUnusedParser],
|
|
1225
|
+
[0xEB, dalvikBytecodeOperationUnusedParser],
|
|
1226
|
+
[0xEC, dalvikBytecodeOperationUnusedParser],
|
|
1227
|
+
[0xED, dalvikBytecodeOperationUnusedParser],
|
|
1228
|
+
[0xEE, dalvikBytecodeOperationUnusedParser],
|
|
1229
|
+
[0xEF, dalvikBytecodeOperationUnusedParser],
|
|
1230
|
+
[0xF0, dalvikBytecodeOperationUnusedParser],
|
|
1231
|
+
[0xF1, dalvikBytecodeOperationUnusedParser],
|
|
1232
|
+
[0xF2, dalvikBytecodeOperationUnusedParser],
|
|
1233
|
+
[0xF3, dalvikBytecodeOperationUnusedParser],
|
|
1234
|
+
[0xF4, dalvikBytecodeOperationUnusedParser],
|
|
1235
|
+
[0xF5, dalvikBytecodeOperationUnusedParser],
|
|
1236
|
+
[0xF6, dalvikBytecodeOperationUnusedParser],
|
|
1237
|
+
[0xF7, dalvikBytecodeOperationUnusedParser],
|
|
1238
|
+
[0xF8, dalvikBytecodeOperationUnusedParser],
|
|
1239
|
+
[0xF9, dalvikBytecodeOperationUnusedParser],
|
|
1240
|
+
]);
|
|
1241
|
+
// Fallback parser for multi-byte opcodes (nop and payload instructions)
|
|
1242
|
+
const dalvikBytecodeOperationMultiByteParser = createDisjunctionParser([
|
|
1243
|
+
dalvikBytecodeOperationNoOperationParser,
|
|
1244
|
+
dalvikBytecodeOperationPackedSwitchPayloadParser,
|
|
1245
|
+
dalvikBytecodeOperationSparseSwitchPayloadParser,
|
|
1246
|
+
dalvikBytecodeOperationFillArrayDataPayloadParser,
|
|
1247
|
+
]);
|
|
1248
|
+
setParserName(dalvikBytecodeOperationMultiByteParser, 'dalvikBytecodeOperationMultiByteParser');
|
|
754
1249
|
const dalvikBytecodeOperationParser = promiseCompose(createTupleParser([
|
|
755
1250
|
() => { },
|
|
756
|
-
//
|
|
757
|
-
|
|
758
|
-
|
|
759
|
-
|
|
760
|
-
|
|
761
|
-
dalvikBytecodeOperationInvokeRangeParser,
|
|
762
|
-
dalvikBytecodeOperationNewInstanceParser,
|
|
763
|
-
dalvikBytecodeOperationNewArrayParser,
|
|
764
|
-
dalvikBytecodeOperationCheckCastParser,
|
|
765
|
-
dalvikBytecodeOperationInstanceOfParser,
|
|
766
|
-
dalvikBytecodeOperationArrayElementParser,
|
|
767
|
-
dalvikBytecodeOperationInstanceFieldParser,
|
|
768
|
-
dalvikBytecodeOperationStaticFieldParser,
|
|
769
|
-
dalvikBytecodeOperationConstStringParser,
|
|
770
|
-
dalvikBytecodeOperationConstMethodHandleParser,
|
|
771
|
-
dalvikBytecodeOperationConstClassParser,
|
|
772
|
-
dalvikBytecodeOperationReturnVoidParser,
|
|
773
|
-
dalvikBytecodeOperationReturn1Parser,
|
|
774
|
-
dalvikBytecodeOperationThrowParser,
|
|
775
|
-
dalvikBytecodeOperationGotoParser,
|
|
776
|
-
dalvikBytecodeOperationGoto16Parser,
|
|
777
|
-
dalvikBytecodeOperationMoveResult1Parser,
|
|
778
|
-
dalvikBytecodeOperationMoveParser,
|
|
779
|
-
dalvikBytecodeOperationMoveWideParser,
|
|
780
|
-
dalvikBytecodeOperationMoveObjectParser,
|
|
781
|
-
dalvikBytecodeOperationMoveFrom16Parser,
|
|
782
|
-
dalvikBytecodeOperationMoveWideFrom16Parser,
|
|
783
|
-
dalvikBytecodeOperationMoveObjectFrom16Parser,
|
|
784
|
-
dalvikBytecodeOperationMoveWide16Parser,
|
|
785
|
-
dalvikBytecodeOperationConst4Parser,
|
|
786
|
-
dalvikBytecodeOperationConst16Parser,
|
|
787
|
-
dalvikBytecodeOperationConstHigh16Parser,
|
|
788
|
-
dalvikBytecodeOperationConstWide16Parser,
|
|
789
|
-
dalvikBytecodeOperationConstParser,
|
|
790
|
-
dalvikBytecodeOperationCompareParser,
|
|
791
|
-
dalvikBytecodeOperationIfTestParser,
|
|
792
|
-
dalvikBytecodeOperationIfTestZeroParser,
|
|
793
|
-
dalvikBytecodeOperationBinaryOperationParser,
|
|
794
|
-
dalvikBytecodeOperationBinaryOperationLiteral8Parser,
|
|
795
|
-
dalvikBytecodeOperationBinaryOperationLiteral16Parser,
|
|
796
|
-
dalvikBytecodeOperationBinaryOperationInPlaceParser,
|
|
797
|
-
dalvikBytecodeOperationUnaryOperationParser,
|
|
798
|
-
]),
|
|
799
|
-
]), ([_debug, operation,]) => {
|
|
800
|
-
// console.log(operation);
|
|
801
|
-
return operation;
|
|
802
|
-
});
|
|
1251
|
+
// CreateDebugLogInputParser(),
|
|
1252
|
+
createElementSwitchParser(dalvikBytecodeOperationOpcodeMap, dalvikBytecodeOperationMultiByteParser),
|
|
1253
|
+
]), ([_debug, operation,]) =>
|
|
1254
|
+
// Console.log(operation);
|
|
1255
|
+
operation);
|
|
803
1256
|
setParserName(dalvikBytecodeOperationParser, 'dalvikBytecodeOperationParser');
|
|
804
1257
|
const dalvikBytecodeParser = promiseCompose(createArrayParser(dalvikBytecodeOperationParser), operations => operations.filter((operation) => operation !== undefined));
|
|
805
1258
|
export const createDalvikBytecodeParser = (size) => createSliceBoundedParser(dalvikBytecodeParser, size, true);
|