@@ -98,6 +98,35 @@ protected DexBackedDexFile(@Nullable Opcodes opcodes, @Nonnull byte[] buf, int o
98
98
mapOffset = dexBuffer .readSmallUint (HeaderItem .MAP_OFFSET );
99
99
}
100
100
101
+ protected DexBackedDexFile (@ Nullable Opcodes opcodes , @ Nonnull DexBuffer dexBuffer , @ Nonnull DexBuffer dataBuffer , int offset , boolean verifyMagic ) {
102
+ this .dexBuffer = dexBuffer ;
103
+ this .dataBuffer = dataBuffer ;
104
+
105
+ byte [] headerBuf = dexBuffer .readByteRange (offset , /* lengthOfHeader= */ 112 );
106
+
107
+ int dexVersion = getVersion (headerBuf , offset , verifyMagic );
108
+
109
+ if (opcodes == null ) {
110
+ this .opcodes = getDefaultOpcodes (dexVersion );
111
+ } else {
112
+ this .opcodes = opcodes ;
113
+ }
114
+
115
+ stringCount = dexBuffer .readSmallUint (HeaderItem .STRING_COUNT_OFFSET );
116
+ stringStartOffset = dexBuffer .readSmallUint (HeaderItem .STRING_START_OFFSET );
117
+ typeCount = dexBuffer .readSmallUint (HeaderItem .TYPE_COUNT_OFFSET );
118
+ typeStartOffset = dexBuffer .readSmallUint (HeaderItem .TYPE_START_OFFSET );
119
+ protoCount = dexBuffer .readSmallUint (HeaderItem .PROTO_COUNT_OFFSET );
120
+ protoStartOffset = dexBuffer .readSmallUint (HeaderItem .PROTO_START_OFFSET );
121
+ fieldCount = dexBuffer .readSmallUint (HeaderItem .FIELD_COUNT_OFFSET );
122
+ fieldStartOffset = dexBuffer .readSmallUint (HeaderItem .FIELD_START_OFFSET );
123
+ methodCount = dexBuffer .readSmallUint (HeaderItem .METHOD_COUNT_OFFSET );
124
+ methodStartOffset = dexBuffer .readSmallUint (HeaderItem .METHOD_START_OFFSET );
125
+ classCount = dexBuffer .readSmallUint (HeaderItem .CLASS_COUNT_OFFSET );
126
+ classStartOffset = dexBuffer .readSmallUint (HeaderItem .CLASS_START_OFFSET );
127
+ mapOffset = dexBuffer .readSmallUint (HeaderItem .MAP_OFFSET );
128
+ }
129
+
101
130
/**
102
131
* @return The offset that various data offsets are relative to. This is always 0 for a dex file, but may be
103
132
* different for other related formats (e.g. cdex).
0 commit comments