public static int getEndian(byte[] buf, int offset) { BaseDexBuffer bdb = new BaseDexBuffer(buf); return bdb.readInt(offset + ENDIAN_TAG_OFFSET); } }
@Nonnull public List<String> getDependencies() { final int dexOffset = OdexHeaderItem.getDexOffset(odexBuf); final int dependencyOffset = OdexHeaderItem.getDependenciesOffset(odexBuf) - dexOffset; BaseDexBuffer buf = new BaseDexBuffer(this.buf); int dependencyCount = buf.readInt(dependencyOffset + DEPENDENCY_COUNT_OFFSET); return new VariableSizeList<String>(this, dependencyOffset + DEPENDENCY_START_OFFSET, dependencyCount) { @Override protected String readNextItem(@Nonnull DexReader reader, int index) { int length = reader.readInt(); int offset = reader.getOffset(); reader.moveRelative(length + 20); try { return new String(DexBackedOdexFile.this.buf, offset, length-1, "US-ASCII"); } catch (UnsupportedEncodingException ex) { throw new RuntimeException(ex); } } }; }
public static int getDependenciesOffset(byte[] buf) { BaseDexBuffer bdb = new BaseDexBuffer(buf); return bdb.readSmallUint(DEPENDENCIES_OFFSET); } }
public static int getDependenciesOffset(byte[] buf) { BaseDexBuffer bdb = new BaseDexBuffer(buf); return bdb.readSmallUint(DEPENDENCIES_OFFSET); } }
@Test public void testReadOptionalUintSuccess() { BaseDexBuffer dexBuf = new BaseDexBuffer(new byte[] {0x11, 0x22, 0x33, 0x44}); Assert.assertEquals(0x44332211, dexBuf.readSmallUint(0)); dexBuf = new BaseDexBuffer(new byte[] {0x00, 0x00, 0x00, 0x00}); Assert.assertEquals(0, dexBuf.readSmallUint(0)); dexBuf = new BaseDexBuffer(new byte[] {(byte)0xff, (byte)0xff, (byte)0xff, 0x7f}); Assert.assertEquals(0x7fffffff, dexBuf.readSmallUint(0)); dexBuf = new BaseDexBuffer(new byte[] {(byte)0xff, (byte)0xff, (byte)0xff, (byte)0xff}); Assert.assertEquals(-1, dexBuf.readOptionalUint(0)); }
@Test public void testReadSmallUintSuccess() { BaseDexBuffer dexBuf = new BaseDexBuffer(new byte[] {0x11, 0x22, 0x33, 0x44}); Assert.assertEquals(0x44332211, dexBuf.readSmallUint(0)); dexBuf = new BaseDexBuffer(new byte[] {0x00, 0x00, 0x00, 0x00}); Assert.assertEquals(0, dexBuf.readSmallUint(0)); dexBuf = new BaseDexBuffer(new byte[] {(byte)0xff, (byte)0xff, (byte)0xff, 0x7f}); Assert.assertEquals(0x7fffffff, dexBuf.readSmallUint(0)); }
@Test public void testReadUbyte() { byte[] buf = new byte[1]; BaseDexBuffer dexBuf = new BaseDexBuffer(buf); for (int i=0; i<=0xff; i++) { buf[0] = (byte)i; Assert.assertEquals(i, dexBuf.readUbyte(0)); } }
private void performSizedRightExtendedIntFailureTest(byte[] buf) { BaseDexBuffer dexBuf = new BaseDexBuffer(buf); BaseDexReader reader = dexBuf.readerAt(0); try { reader.readSizedRightExtendedInt(buf.length); Assert.fail(); } catch (ExceptionWithContext ex) { // expected } }
private void performSizedLongTest(long expectedValue, byte[] buf) { BaseDexBuffer dexBuf = new BaseDexBuffer(buf); BaseDexReader reader = dexBuf.readerAt(0); Assert.assertEquals(expectedValue, reader.readSizedLong(buf.length)); }
@Test public void testReadByte() { byte[] buf = new byte[1]; BaseDexBuffer dexBuf = new BaseDexBuffer(buf); for (int i=0; i<=0xff; i++) { buf[0] = (byte)i; Assert.assertEquals((byte)i, dexBuf.readByte(0)); } }
private void performSizedRightExtendedIntTest(int expectedValue, byte[] buf) { BaseDexBuffer dexBuf = new BaseDexBuffer(buf); BaseDexReader reader = dexBuf.readerAt(0); Assert.assertEquals(expectedValue, reader.readSizedRightExtendedInt(buf.length)); }
private void performSizedRightExtendedLongFailureTest(byte[] buf) { BaseDexBuffer dexBuf = new BaseDexBuffer(buf); BaseDexReader reader = dexBuf.readerAt(0); try { reader.readSizedRightExtendedLong(buf.length); Assert.fail(); } catch (ExceptionWithContext ex) { // expected } }
private void performSizedIntFailureTest(byte[] buf) { BaseDexBuffer dexBuf = new BaseDexBuffer(buf); BaseDexReader reader = dexBuf.readerAt(0); try { reader.readSizedInt(buf.length); Assert.fail(); } catch (ExceptionWithContext ex) { // expected } }
private void performSizedRightExtendedLongTest(long expectedValue, byte[] buf) { BaseDexBuffer dexBuf = new BaseDexBuffer(buf); BaseDexReader reader = dexBuf.readerAt(0); Assert.assertEquals(expectedValue, reader.readSizedRightExtendedLong(buf.length)); }
private void performSizedLongFailureTest(byte[] buf) { BaseDexBuffer dexBuf = new BaseDexBuffer(buf); BaseDexReader reader = dexBuf.readerAt(0); try { reader.readSizedLong(buf.length); Assert.fail(); } catch (ExceptionWithContext ex) { // expected } } }
private void performSizedSmallUintTest(int expectedValue, byte[] buf) { BaseDexBuffer dexBuf = new BaseDexBuffer(buf); BaseDexReader reader = dexBuf.readerAt(0); Assert.assertEquals(expectedValue, reader.readSizedSmallUint(buf.length)); }
@Test(expected=ExceptionWithContext.class) public void testReadSmallUintTooLarge3() { BaseDexBuffer dexBuf = new BaseDexBuffer(new byte[] {(byte)0xff, (byte)0xff, (byte)0xff, (byte)0xff}); dexBuf.readSmallUint(0); }
@Test(expected=ExceptionWithContext.class) public void testReadOptionalUintTooLarge1() { BaseDexBuffer dexBuf = new BaseDexBuffer(new byte[] {0x00, 0x00, 0x00, (byte)0x80}); dexBuf.readSmallUint(0); }
@Test(expected=ExceptionWithContext.class) public void testReadSmallUintTooLarge1() { BaseDexBuffer dexBuf = new BaseDexBuffer(new byte[] {0x00, 0x00, 0x00, (byte)0x80}); dexBuf.readSmallUint(0); }
private void performTest(int expectedValue, byte[] buf, int expectedLength) { BaseDexBuffer dexBuf = new BaseDexBuffer(buf); BaseDexReader reader = dexBuf.readerAt(0); Assert.assertEquals(expectedValue, reader.readSmallUleb128()); Assert.assertEquals(expectedLength, reader.getOffset()); reader = dexBuf.readerAt(0); reader.skipUleb128(); Assert.assertEquals(expectedLength, reader.getOffset()); reader = dexBuf.readerAt(0); Assert.assertEquals(expectedLength, reader.peekSmallUleb128Size()); }