@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,15 +1,17 @@
|
|
|
1
|
-
import { Iso } from
|
|
2
|
-
import {
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
import {
|
|
6
|
-
import {
|
|
1
|
+
import { type Iso } from 'monocle-ts';
|
|
2
|
+
import {
|
|
3
|
+
byteParser, intParser, longParser, shortParser, ubyteParser, uintParser, ushortParser,
|
|
4
|
+
} from '../dalvikExecutableParser/typeParsers.js';
|
|
5
|
+
import { createElementParser } from '../elementParser.js';
|
|
6
|
+
import { type Parser, setParserName } from '../parser.js';
|
|
7
|
+
import { promiseCompose } from '../promiseCompose.js';
|
|
8
|
+
import { createTupleParser } from '../tupleParser.js';
|
|
7
9
|
|
|
8
10
|
// https://source.android.com/docs/core/runtime/instruction-formats
|
|
9
11
|
|
|
10
12
|
export const nibblesParser: Parser<[ number, number ], Uint8Array> = promiseCompose(
|
|
11
13
|
createElementParser(),
|
|
12
|
-
|
|
14
|
+
byte => [
|
|
13
15
|
byte >> 4,
|
|
14
16
|
byte & 0b1111,
|
|
15
17
|
],
|
|
@@ -23,7 +25,7 @@ type DalvikBytecodeFormat10t = {
|
|
|
23
25
|
|
|
24
26
|
export const dalvikBytecodeFormat10tParser: Parser<DalvikBytecodeFormat10t, Uint8Array> = promiseCompose(
|
|
25
27
|
byteParser,
|
|
26
|
-
|
|
28
|
+
branchOffset => ({
|
|
27
29
|
branchOffset,
|
|
28
30
|
}),
|
|
29
31
|
);
|
|
@@ -48,6 +50,24 @@ export const dalvikBytecodeFormat11xParser: Parser<DalvikBytecodeFormat11x, Uint
|
|
|
48
50
|
}),
|
|
49
51
|
);
|
|
50
52
|
|
|
53
|
+
type DalvikBytecodeFormat11n = {
|
|
54
|
+
value: number;
|
|
55
|
+
registers: number[];
|
|
56
|
+
};
|
|
57
|
+
|
|
58
|
+
export const dalvikBytecodeFormat11nParser: Parser<DalvikBytecodeFormat11n, Uint8Array> = promiseCompose(
|
|
59
|
+
nibblesParser,
|
|
60
|
+
([
|
|
61
|
+
value,
|
|
62
|
+
register0,
|
|
63
|
+
]) => ({
|
|
64
|
+
value: value << 28 >> 28, // Sign extend 4-bit value
|
|
65
|
+
registers: [
|
|
66
|
+
register0,
|
|
67
|
+
],
|
|
68
|
+
}),
|
|
69
|
+
);
|
|
70
|
+
|
|
51
71
|
type DalvikBytecodeFormat12x = {
|
|
52
72
|
registers: number[];
|
|
53
73
|
};
|
|
@@ -70,8 +90,14 @@ type DalvikBytecodeFormat20t = {
|
|
|
70
90
|
};
|
|
71
91
|
|
|
72
92
|
export const dalvikBytecodeFormat20tParser: Parser<DalvikBytecodeFormat20t, Uint8Array> = promiseCompose(
|
|
73
|
-
|
|
74
|
-
|
|
93
|
+
createTupleParser([
|
|
94
|
+
ubyteParser,
|
|
95
|
+
shortParser,
|
|
96
|
+
]),
|
|
97
|
+
([
|
|
98
|
+
_zero,
|
|
99
|
+
branchOffset,
|
|
100
|
+
]) => ({
|
|
75
101
|
branchOffset,
|
|
76
102
|
}),
|
|
77
103
|
);
|
|
@@ -122,7 +148,7 @@ export const dalvikBytecodeFormat21hParser: Parser<DalvikBytecodeFormat21h, Uint
|
|
|
122
148
|
}),
|
|
123
149
|
);
|
|
124
150
|
|
|
125
|
-
type DalvikBytecodeFormat21t= {
|
|
151
|
+
type DalvikBytecodeFormat21t = {
|
|
126
152
|
branchOffset: number;
|
|
127
153
|
registers: number[];
|
|
128
154
|
};
|
|
@@ -143,7 +169,7 @@ export const createDalvikBytecodeFormat21tParser = (): Parser<DalvikBytecodeForm
|
|
|
143
169
|
}),
|
|
144
170
|
);
|
|
145
171
|
|
|
146
|
-
type DalvikBytecodeFormat21s= {
|
|
172
|
+
type DalvikBytecodeFormat21s = {
|
|
147
173
|
registers: number[];
|
|
148
174
|
value: number;
|
|
149
175
|
};
|
|
@@ -204,8 +230,8 @@ export const createDalvikBytecodeFormat22cParser = <Index>({
|
|
|
204
230
|
]),
|
|
205
231
|
([
|
|
206
232
|
[
|
|
207
|
-
register0,
|
|
208
233
|
register1,
|
|
234
|
+
register0,
|
|
209
235
|
],
|
|
210
236
|
index,
|
|
211
237
|
]) => ({
|
|
@@ -236,8 +262,8 @@ export const createDalvikBytecodeFormat22sParser = (): Parser<DalvikBytecodeForm
|
|
|
236
262
|
]) => ({
|
|
237
263
|
value,
|
|
238
264
|
registers: [
|
|
239
|
-
register0,
|
|
240
265
|
register1,
|
|
266
|
+
register0,
|
|
241
267
|
],
|
|
242
268
|
}),
|
|
243
269
|
);
|
|
@@ -289,7 +315,7 @@ export const dalvikBytecodeFormat22xParser: Parser<DalvikBytecodeFormat22x, Uint
|
|
|
289
315
|
|
|
290
316
|
type DalvikBytecodeFormat23x = {
|
|
291
317
|
registers: number[];
|
|
292
|
-
}
|
|
318
|
+
};
|
|
293
319
|
|
|
294
320
|
export const dalvikBytecodeFormat23xParser: Parser<DalvikBytecodeFormat23x, Uint8Array> = promiseCompose(
|
|
295
321
|
createTupleParser([
|
|
@@ -310,6 +336,17 @@ export const dalvikBytecodeFormat23xParser: Parser<DalvikBytecodeFormat23x, Uint
|
|
|
310
336
|
}),
|
|
311
337
|
);
|
|
312
338
|
|
|
339
|
+
type DalvikBytecodeFormat30t = {
|
|
340
|
+
branchOffset: number;
|
|
341
|
+
};
|
|
342
|
+
|
|
343
|
+
export const dalvikBytecodeFormat30tParser: Parser<DalvikBytecodeFormat30t, Uint8Array> = promiseCompose(
|
|
344
|
+
intParser,
|
|
345
|
+
branchOffset => ({
|
|
346
|
+
branchOffset,
|
|
347
|
+
}),
|
|
348
|
+
);
|
|
349
|
+
|
|
313
350
|
type DalvikBytecodeFormat31i = {
|
|
314
351
|
value: number;
|
|
315
352
|
registers: number[];
|
|
@@ -331,6 +368,52 @@ export const dalvikBytecodeFormat31iParser: Parser<DalvikBytecodeFormat31i, Uint
|
|
|
331
368
|
}),
|
|
332
369
|
);
|
|
333
370
|
|
|
371
|
+
type DalvikBytecodeFormat31c<Index> = {
|
|
372
|
+
index: Index;
|
|
373
|
+
registers: number[];
|
|
374
|
+
};
|
|
375
|
+
|
|
376
|
+
export const createDalvikBytecodeFormat31cParser = <Index>({
|
|
377
|
+
isoIndex,
|
|
378
|
+
}: {
|
|
379
|
+
isoIndex: Iso<Index, number>;
|
|
380
|
+
}): Parser<DalvikBytecodeFormat31c<Index>, Uint8Array> => promiseCompose(
|
|
381
|
+
createTupleParser([
|
|
382
|
+
ubyteParser,
|
|
383
|
+
uintParser,
|
|
384
|
+
]),
|
|
385
|
+
([
|
|
386
|
+
register0,
|
|
387
|
+
index,
|
|
388
|
+
]) => ({
|
|
389
|
+
index: isoIndex.wrap(index),
|
|
390
|
+
registers: [
|
|
391
|
+
register0,
|
|
392
|
+
],
|
|
393
|
+
}),
|
|
394
|
+
);
|
|
395
|
+
|
|
396
|
+
type DalvikBytecodeFormat31t = {
|
|
397
|
+
branchOffset: number;
|
|
398
|
+
registers: number[];
|
|
399
|
+
};
|
|
400
|
+
|
|
401
|
+
export const dalvikBytecodeFormat31tParser: Parser<DalvikBytecodeFormat31t, Uint8Array> = promiseCompose(
|
|
402
|
+
createTupleParser([
|
|
403
|
+
ubyteParser,
|
|
404
|
+
intParser,
|
|
405
|
+
]),
|
|
406
|
+
([
|
|
407
|
+
register0,
|
|
408
|
+
branchOffset,
|
|
409
|
+
]) => ({
|
|
410
|
+
branchOffset,
|
|
411
|
+
registers: [
|
|
412
|
+
register0,
|
|
413
|
+
],
|
|
414
|
+
}),
|
|
415
|
+
);
|
|
416
|
+
|
|
334
417
|
type DalvikBytecodeFormat32x = {
|
|
335
418
|
registers: number[];
|
|
336
419
|
};
|
|
@@ -374,12 +457,12 @@ export const createDalvikBytecodeFormat35cParser = <Index>({
|
|
|
374
457
|
],
|
|
375
458
|
index,
|
|
376
459
|
[
|
|
377
|
-
register0,
|
|
378
460
|
register1,
|
|
461
|
+
register0,
|
|
379
462
|
],
|
|
380
463
|
[
|
|
381
|
-
register2,
|
|
382
464
|
register3,
|
|
465
|
+
register2,
|
|
383
466
|
],
|
|
384
467
|
]) => ({
|
|
385
468
|
index: isoIndex.wrap(index),
|
|
@@ -419,3 +502,279 @@ export const createDalvikBytecodeFormat3rcParser = <Index>({
|
|
|
419
502
|
registers: Array.from({ length: registerCount }, (_, index) => firstRegister + index),
|
|
420
503
|
}),
|
|
421
504
|
);
|
|
505
|
+
|
|
506
|
+
type DalvikBytecodeFormat51l = {
|
|
507
|
+
value: bigint;
|
|
508
|
+
registers: number[];
|
|
509
|
+
};
|
|
510
|
+
|
|
511
|
+
export const dalvikBytecodeFormat51lParser: Parser<DalvikBytecodeFormat51l, Uint8Array> = promiseCompose(
|
|
512
|
+
createTupleParser([
|
|
513
|
+
ubyteParser,
|
|
514
|
+
longParser,
|
|
515
|
+
]),
|
|
516
|
+
([
|
|
517
|
+
register0,
|
|
518
|
+
value,
|
|
519
|
+
]) => ({
|
|
520
|
+
value,
|
|
521
|
+
registers: [
|
|
522
|
+
register0,
|
|
523
|
+
],
|
|
524
|
+
}),
|
|
525
|
+
);
|
|
526
|
+
|
|
527
|
+
// Format 20bc: throw-verification-error
|
|
528
|
+
type DalvikBytecodeFormat20bc = {
|
|
529
|
+
kind: number;
|
|
530
|
+
index: number;
|
|
531
|
+
};
|
|
532
|
+
|
|
533
|
+
export const dalvikBytecodeFormat20bcParser: Parser<DalvikBytecodeFormat20bc, Uint8Array> = promiseCompose(
|
|
534
|
+
createTupleParser([
|
|
535
|
+
ubyteParser,
|
|
536
|
+
ushortParser,
|
|
537
|
+
]),
|
|
538
|
+
([
|
|
539
|
+
kind,
|
|
540
|
+
index,
|
|
541
|
+
]) => ({
|
|
542
|
+
kind,
|
|
543
|
+
index,
|
|
544
|
+
}),
|
|
545
|
+
);
|
|
546
|
+
|
|
547
|
+
// Format 22cs: field access quick (deprecated)
|
|
548
|
+
type DalvikBytecodeFormat22cs = {
|
|
549
|
+
registers: number[];
|
|
550
|
+
fieldOffset: number;
|
|
551
|
+
};
|
|
552
|
+
|
|
553
|
+
export const dalvikBytecodeFormat22csParser: Parser<DalvikBytecodeFormat22cs, Uint8Array> = promiseCompose(
|
|
554
|
+
createTupleParser([
|
|
555
|
+
nibblesParser,
|
|
556
|
+
ushortParser,
|
|
557
|
+
]),
|
|
558
|
+
([
|
|
559
|
+
[
|
|
560
|
+
register0,
|
|
561
|
+
register1,
|
|
562
|
+
],
|
|
563
|
+
fieldOffset,
|
|
564
|
+
]) => ({
|
|
565
|
+
fieldOffset,
|
|
566
|
+
registers: [
|
|
567
|
+
register0,
|
|
568
|
+
register1,
|
|
569
|
+
],
|
|
570
|
+
}),
|
|
571
|
+
);
|
|
572
|
+
|
|
573
|
+
// Format 35mi: invoke-*/inline (deprecated)
|
|
574
|
+
type DalvikBytecodeFormat35mi = {
|
|
575
|
+
inlineIndex: number;
|
|
576
|
+
registers: number[];
|
|
577
|
+
};
|
|
578
|
+
|
|
579
|
+
export const dalvikBytecodeFormat35miParser: Parser<DalvikBytecodeFormat35mi, Uint8Array> = promiseCompose(
|
|
580
|
+
createTupleParser([
|
|
581
|
+
nibblesParser,
|
|
582
|
+
ushortParser,
|
|
583
|
+
nibblesParser,
|
|
584
|
+
nibblesParser,
|
|
585
|
+
]),
|
|
586
|
+
([
|
|
587
|
+
[
|
|
588
|
+
registerCount,
|
|
589
|
+
register4,
|
|
590
|
+
],
|
|
591
|
+
inlineIndex,
|
|
592
|
+
[
|
|
593
|
+
register1,
|
|
594
|
+
register0,
|
|
595
|
+
],
|
|
596
|
+
[
|
|
597
|
+
register3,
|
|
598
|
+
register2,
|
|
599
|
+
],
|
|
600
|
+
]) => ({
|
|
601
|
+
inlineIndex,
|
|
602
|
+
registers: Object.assign([
|
|
603
|
+
register0,
|
|
604
|
+
register1,
|
|
605
|
+
register2,
|
|
606
|
+
register3,
|
|
607
|
+
register4,
|
|
608
|
+
], {
|
|
609
|
+
length: registerCount,
|
|
610
|
+
}),
|
|
611
|
+
}),
|
|
612
|
+
);
|
|
613
|
+
|
|
614
|
+
// Format 35ms: invoke-*/quick (deprecated)
|
|
615
|
+
type DalvikBytecodeFormat35ms = {
|
|
616
|
+
vtableOffset: number;
|
|
617
|
+
registers: number[];
|
|
618
|
+
};
|
|
619
|
+
|
|
620
|
+
export const dalvikBytecodeFormat35msParser: Parser<DalvikBytecodeFormat35ms, Uint8Array> = promiseCompose(
|
|
621
|
+
createTupleParser([
|
|
622
|
+
nibblesParser,
|
|
623
|
+
ushortParser,
|
|
624
|
+
nibblesParser,
|
|
625
|
+
nibblesParser,
|
|
626
|
+
]),
|
|
627
|
+
([
|
|
628
|
+
[
|
|
629
|
+
registerCount,
|
|
630
|
+
register4,
|
|
631
|
+
],
|
|
632
|
+
vtableOffset,
|
|
633
|
+
[
|
|
634
|
+
register1,
|
|
635
|
+
register0,
|
|
636
|
+
],
|
|
637
|
+
[
|
|
638
|
+
register3,
|
|
639
|
+
register2,
|
|
640
|
+
],
|
|
641
|
+
]) => ({
|
|
642
|
+
vtableOffset,
|
|
643
|
+
registers: Object.assign([
|
|
644
|
+
register0,
|
|
645
|
+
register1,
|
|
646
|
+
register2,
|
|
647
|
+
register3,
|
|
648
|
+
register4,
|
|
649
|
+
], {
|
|
650
|
+
length: registerCount,
|
|
651
|
+
}),
|
|
652
|
+
}),
|
|
653
|
+
);
|
|
654
|
+
|
|
655
|
+
// Format 3rmi: invoke-*/inline/range (deprecated)
|
|
656
|
+
type DalvikBytecodeFormat3rmi = {
|
|
657
|
+
inlineIndex: number;
|
|
658
|
+
registers: number[];
|
|
659
|
+
};
|
|
660
|
+
|
|
661
|
+
export const dalvikBytecodeFormat3rmiParser: Parser<DalvikBytecodeFormat3rmi, Uint8Array> = promiseCompose(
|
|
662
|
+
createTupleParser([
|
|
663
|
+
ubyteParser,
|
|
664
|
+
ushortParser,
|
|
665
|
+
ushortParser,
|
|
666
|
+
]),
|
|
667
|
+
([
|
|
668
|
+
registerCount,
|
|
669
|
+
inlineIndex,
|
|
670
|
+
firstRegister,
|
|
671
|
+
]) => ({
|
|
672
|
+
inlineIndex,
|
|
673
|
+
registers: Array.from({ length: registerCount }, (_, index) => firstRegister + index),
|
|
674
|
+
}),
|
|
675
|
+
);
|
|
676
|
+
|
|
677
|
+
// Format 3rms: invoke-*/quick/range (deprecated)
|
|
678
|
+
type DalvikBytecodeFormat3rms = {
|
|
679
|
+
vtableOffset: number;
|
|
680
|
+
registers: number[];
|
|
681
|
+
};
|
|
682
|
+
|
|
683
|
+
export const dalvikBytecodeFormat3rmsParser: Parser<DalvikBytecodeFormat3rms, Uint8Array> = promiseCompose(
|
|
684
|
+
createTupleParser([
|
|
685
|
+
ubyteParser,
|
|
686
|
+
ushortParser,
|
|
687
|
+
ushortParser,
|
|
688
|
+
]),
|
|
689
|
+
([
|
|
690
|
+
registerCount,
|
|
691
|
+
vtableOffset,
|
|
692
|
+
firstRegister,
|
|
693
|
+
]) => ({
|
|
694
|
+
vtableOffset,
|
|
695
|
+
registers: Array.from({ length: registerCount }, (_, index) => firstRegister + index),
|
|
696
|
+
}),
|
|
697
|
+
);
|
|
698
|
+
|
|
699
|
+
// Format 45cc: invoke-polymorphic
|
|
700
|
+
type DalvikBytecodeFormat45cc<MethodIndex, ProtoIndex> = {
|
|
701
|
+
methodIndex: MethodIndex;
|
|
702
|
+
protoIndex: ProtoIndex;
|
|
703
|
+
registers: number[];
|
|
704
|
+
};
|
|
705
|
+
|
|
706
|
+
export const createDalvikBytecodeFormat45ccParser = <MethodIndex, ProtoIndex>({
|
|
707
|
+
isoMethodIndex,
|
|
708
|
+
isoProtoIndex,
|
|
709
|
+
}: {
|
|
710
|
+
isoMethodIndex: Iso<MethodIndex, number>;
|
|
711
|
+
isoProtoIndex: Iso<ProtoIndex, number>;
|
|
712
|
+
}): Parser<DalvikBytecodeFormat45cc<MethodIndex, ProtoIndex>, Uint8Array> => promiseCompose(
|
|
713
|
+
createTupleParser([
|
|
714
|
+
nibblesParser,
|
|
715
|
+
ushortParser,
|
|
716
|
+
nibblesParser,
|
|
717
|
+
nibblesParser,
|
|
718
|
+
ushortParser,
|
|
719
|
+
]),
|
|
720
|
+
([
|
|
721
|
+
[
|
|
722
|
+
registerCount,
|
|
723
|
+
register4,
|
|
724
|
+
],
|
|
725
|
+
methodIndex,
|
|
726
|
+
[
|
|
727
|
+
register1,
|
|
728
|
+
register0,
|
|
729
|
+
],
|
|
730
|
+
[
|
|
731
|
+
register3,
|
|
732
|
+
register2,
|
|
733
|
+
],
|
|
734
|
+
protoIndex,
|
|
735
|
+
]) => ({
|
|
736
|
+
methodIndex: isoMethodIndex.wrap(methodIndex),
|
|
737
|
+
protoIndex: isoProtoIndex.wrap(protoIndex),
|
|
738
|
+
registers: Object.assign([
|
|
739
|
+
register0,
|
|
740
|
+
register1,
|
|
741
|
+
register2,
|
|
742
|
+
register3,
|
|
743
|
+
register4,
|
|
744
|
+
], {
|
|
745
|
+
length: registerCount,
|
|
746
|
+
}),
|
|
747
|
+
}),
|
|
748
|
+
);
|
|
749
|
+
|
|
750
|
+
// Format 4rcc: invoke-polymorphic/range
|
|
751
|
+
type DalvikBytecodeFormat4rcc<MethodIndex, ProtoIndex> = {
|
|
752
|
+
methodIndex: MethodIndex;
|
|
753
|
+
protoIndex: ProtoIndex;
|
|
754
|
+
registers: number[];
|
|
755
|
+
};
|
|
756
|
+
|
|
757
|
+
export const createDalvikBytecodeFormat4rccParser = <MethodIndex, ProtoIndex>({
|
|
758
|
+
isoMethodIndex,
|
|
759
|
+
isoProtoIndex,
|
|
760
|
+
}: {
|
|
761
|
+
isoMethodIndex: Iso<MethodIndex, number>;
|
|
762
|
+
isoProtoIndex: Iso<ProtoIndex, number>;
|
|
763
|
+
}): Parser<DalvikBytecodeFormat4rcc<MethodIndex, ProtoIndex>, Uint8Array> => promiseCompose(
|
|
764
|
+
createTupleParser([
|
|
765
|
+
ubyteParser,
|
|
766
|
+
ushortParser,
|
|
767
|
+
ushortParser,
|
|
768
|
+
ushortParser,
|
|
769
|
+
]),
|
|
770
|
+
([
|
|
771
|
+
registerCount,
|
|
772
|
+
methodIndex,
|
|
773
|
+
firstRegister,
|
|
774
|
+
protoIndex,
|
|
775
|
+
]) => ({
|
|
776
|
+
methodIndex: isoMethodIndex.wrap(methodIndex),
|
|
777
|
+
protoIndex: isoProtoIndex.wrap(protoIndex),
|
|
778
|
+
registers: Array.from({ length: registerCount }, (_, index) => firstRegister + index),
|
|
779
|
+
}),
|
|
780
|
+
);
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
|
|
2
|
+
export const formatSizes = {
|
|
3
|
+
'10x': 1,
|
|
4
|
+
'11x': 1,
|
|
5
|
+
'11n': 1,
|
|
6
|
+
'12x': 1,
|
|
7
|
+
'10t': 1,
|
|
8
|
+
'20t': 2,
|
|
9
|
+
'20bc': 2,
|
|
10
|
+
'22x': 2,
|
|
11
|
+
'21t': 2,
|
|
12
|
+
'21s': 2,
|
|
13
|
+
'21h': 2,
|
|
14
|
+
'21c': 2,
|
|
15
|
+
'23x': 2,
|
|
16
|
+
'22b': 2,
|
|
17
|
+
'22t': 2,
|
|
18
|
+
'22s': 2,
|
|
19
|
+
'22c': 2,
|
|
20
|
+
'22cs': 2,
|
|
21
|
+
'30t': 3,
|
|
22
|
+
'32x': 3,
|
|
23
|
+
'31i': 3,
|
|
24
|
+
'31t': 3,
|
|
25
|
+
'31c': 3,
|
|
26
|
+
'35c': 3,
|
|
27
|
+
'35ms': 3,
|
|
28
|
+
'35mi': 3,
|
|
29
|
+
'3rc': 3,
|
|
30
|
+
'3rms': 3,
|
|
31
|
+
'3rmi': 3,
|
|
32
|
+
'45cc': 4,
|
|
33
|
+
'4rcc': 4,
|
|
34
|
+
'51l': 5,
|
|
35
|
+
} as const;
|