private void writeMapItem(@Nonnull DexDataWriter writer, int type, int size, int offset) throws IOException { if (size > 0) { writer.writeUshort(type); writer.writeUshort(0); writer.writeInt(size); writer.writeInt(offset); } }
private void writeMethods(@Nonnull DexDataWriter writer) throws IOException { methodSectionOffset = writer.getPosition(); int index = 0; List<Map.Entry<? extends MethodRefKey, Integer>> methodEntries = Lists.newArrayList(methodSection.getItems()); Collections.sort(methodEntries, DexWriter.<MethodRefKey>comparableKeyComparator()); for (Map.Entry<? extends MethodRefKey, Integer> entry: methodEntries) { entry.setValue(index++); MethodRefKey key = entry.getKey(); writer.writeUshort(typeSection.getItemIndex(methodSection.getDefiningClass(key))); writer.writeUshort(protoSection.getItemIndex(methodSection.getPrototype(key))); writer.writeInt(stringSection.getItemIndex(methodSection.getName(key))); } }
private void writeFields(@Nonnull DexDataWriter writer) throws IOException { fieldSectionOffset = writer.getPosition(); int index = 0; List<Map.Entry<? extends FieldRefKey, Integer>> fieldEntries = Lists.newArrayList(fieldSection.getItems()); Collections.sort(fieldEntries, DexWriter.<FieldRefKey>comparableKeyComparator()); for (Map.Entry<? extends FieldRefKey, Integer> entry: fieldEntries) { entry.setValue(index++); FieldRefKey key = entry.getKey(); writer.writeUshort(typeSection.getItemIndex(fieldSection.getDefiningClass(key))); writer.writeUshort(typeSection.getItemIndex(fieldSection.getFieldType(key))); writer.writeInt(stringSection.getItemIndex(fieldSection.getName(key))); } }
private void writeTypeLists(@Nonnull DexDataWriter writer) throws IOException { writer.align(); typeListSectionOffset = writer.getPosition(); for (Map.Entry<? extends TypeListKey, Integer> entry: typeListSection.getItems()) { writer.align(); entry.setValue(writer.getPosition()); Collection<? extends TypeKey> types = typeListSection.getTypes(entry.getKey()); writer.writeInt(types.size()); for (TypeKey typeKey: types) { writer.writeUshort(typeSection.getItemIndex(typeKey)); } } }
entry.setValue(index++); MethodHandleKey methodHandleReference = entry.getKey(); writer.writeUshort(methodHandleReference.getMethodHandleType()); writer.writeUshort(0); int memberIndex; switch (methodHandleReference.getMethodHandleType()) { writer.writeUshort(memberIndex); writer.writeUshort(0);
writer.writeUshort(classSection.getRegisterCount(methodKey)); protoSection.getParameters(methodSection.getPrototype(methodKey))); writer.writeUshort(MethodUtil.getParameterRegisterCount(parameters, isStatic)); writer.writeUshort(outParamCount); writer.writeUshort(tryBlocks.size()); writer.writeInt(debugItemOffset); writer.writeUshort(tbCodeUnitCount); if (offset != 0) { writer.writeUshort(offset); } else { writer.writeUshort(offset); exceptionHandlerOffsetMap.put(tryBlock.getExceptionHandlers(), offset); writer.writeUshort(0); writer.writeUshort(0); writer.writeInt(debugItemOffset); writer.writeInt(0);
@Test public void testWriteUshort() throws IOException { writer.writeUshort(0); writer.writeUshort(0x1122); writer.writeUshort(0x8899); writer.writeUshort(0xFFFF); expectData(0x00, 0x00, 0x22, 0x11, 0x99, 0x88, 0xFF, 0xFF); }
public void write(@Nonnull Instruction4rcc instruction) { try { writer.write(getOpcodeValue(instruction.getOpcode())); writer.write(instruction.getRegisterCount()); writer.writeUshort(getReferenceIndex(instruction)); writer.writeUshort(instruction.getStartRegister()); writer.writeUshort(getReference2Index(instruction)); } catch (IOException ex) { throw new RuntimeException(ex); } }
public void write(@Nonnull Instruction32x instruction) { try { writer.write(getOpcodeValue(instruction.getOpcode())); writer.write(0); writer.writeUshort(instruction.getRegisterA()); writer.writeUshort(instruction.getRegisterB()); } catch (IOException ex) { throw new RuntimeException(ex); } }
public void write(@Nonnull Instruction32x instruction) { try { writer.write(getOpcodeValue(instruction.getOpcode())); writer.write(0); writer.writeUshort(instruction.getRegisterA()); writer.writeUshort(instruction.getRegisterB()); } catch (IOException ex) { throw new RuntimeException(ex); } }
public void write(@Nonnull Instruction3rc instruction) { try { writer.write(getOpcodeValue(instruction.getOpcode())); writer.write(instruction.getRegisterCount()); writer.writeUshort(getReferenceIndex(instruction)); writer.writeUshort(instruction.getStartRegister()); } catch (IOException ex) { throw new RuntimeException(ex); } }
public void write(@Nonnull Instruction3rmi instruction) { try { writer.write(getOpcodeValue(instruction.getOpcode())); writer.write(instruction.getRegisterCount()); writer.writeUshort(instruction.getInlineIndex()); writer.writeUshort(instruction.getStartRegister()); } catch (IOException ex) { throw new RuntimeException(ex); } }
public void write(@Nonnull Instruction3rmi instruction) { try { writer.write(getOpcodeValue(instruction.getOpcode())); writer.write(instruction.getRegisterCount()); writer.writeUshort(instruction.getInlineIndex()); writer.writeUshort(instruction.getStartRegister()); } catch (IOException ex) { throw new RuntimeException(ex); } }
public void write(@Nonnull Instruction21c instruction) { try { writer.write(getOpcodeValue(instruction.getOpcode())); writer.write(instruction.getRegisterA()); writer.writeUshort(getReferenceIndex(instruction)); } catch (IOException ex) { throw new RuntimeException(ex); } }
public void write(@Nonnull Instruction22x instruction) { try { writer.write(getOpcodeValue(instruction.getOpcode())); writer.write(instruction.getRegisterA()); writer.writeUshort(instruction.getRegisterB()); } catch (IOException ex) { throw new RuntimeException(ex); } }
public void write(@Nonnull Instruction20bc instruction) { try { writer.write(getOpcodeValue(instruction.getOpcode())); writer.write(instruction.getVerificationError()); writer.writeUshort(getReferenceIndex(instruction)); } catch (IOException ex) { throw new RuntimeException(ex); } }
public void write(@Nonnull Instruction21c instruction) { try { writer.write(getOpcodeValue(instruction.getOpcode())); writer.write(instruction.getRegisterA()); writer.writeUshort(getReferenceIndex(instruction)); } catch (IOException ex) { throw new RuntimeException(ex); } }
public void write(@Nonnull Instruction35ms instruction) { try { writer.write(getOpcodeValue(instruction.getOpcode())); writer.write(packNibbles(instruction.getRegisterG(), instruction.getRegisterCount())); writer.writeUshort(instruction.getVtableIndex()); writer.write(packNibbles(instruction.getRegisterC(), instruction.getRegisterD())); writer.write(packNibbles(instruction.getRegisterE(), instruction.getRegisterF())); } catch (IOException ex) { throw new RuntimeException(ex); } }
public void write(@Nonnull Instruction35ms instruction) { try { writer.write(getOpcodeValue(instruction.getOpcode())); writer.write(packNibbles(instruction.getRegisterG(), instruction.getRegisterCount())); writer.writeUshort(instruction.getVtableIndex()); writer.write(packNibbles(instruction.getRegisterC(), instruction.getRegisterD())); writer.write(packNibbles(instruction.getRegisterE(), instruction.getRegisterF())); } catch (IOException ex) { throw new RuntimeException(ex); } }
public void write(@Nonnull Instruction35mi instruction) { try { writer.write(getOpcodeValue(instruction.getOpcode())); writer.write(packNibbles(instruction.getRegisterG(), instruction.getRegisterCount())); writer.writeUshort(instruction.getInlineIndex()); writer.write(packNibbles(instruction.getRegisterC(), instruction.getRegisterD())); writer.write(packNibbles(instruction.getRegisterE(), instruction.getRegisterF())); } catch (IOException ex) { throw new RuntimeException(ex); } }