public InstructionReader(Dex dex, MethodDefinition mdef) { Dex = dex; MethodDefinition = mdef; Lookup = new Dictionary<int, Instruction>(); LookupLast = new Dictionary<int, Instruction>(); LazyInstructionsSetters = new List<Action>(); _ip = 0; }
public static Dex Read(Stream stream) { Dex result = new Dex(stream); var buffer = result.buffer; var binaryReader = new BinaryReader(buffer); DexReader dexReader = new DexReader(result); dexReader.ReadFrom(binaryReader); return(result); }
internal ClassDefinition(Dex dexSource) { DexSource = dexSource; TypeDescriptor = TypeDescriptors.FullyQualifiedName; Interfaces = new List <ClassReference>(); Annotations = new List <Annotation>(); Fields = new List <FieldDefinition>(); Methods = new List <MethodDefinition>(); InnerClasses = new List <ClassDefinition>(); }
public static Dex Read(Stream stream, bool bufferize) { var result = new Dex(); if (bufferize) { var memorystream = new MemoryStream(); stream.CopyTo(memorystream); memorystream.Position = 0; stream = memorystream; } using (var binaryReader = new BinaryReader(stream)) { var reader = new DexReader(result); reader.ReadFrom(binaryReader); return(result); } }
public static Dex Read(string filename, bool bufferize) { var result = new Dex(); using (var filestream = new FileStream(filename, FileMode.Open)) { Stream sourcestream = filestream; if (bufferize) { var memorystream = new MemoryStream(); filestream.CopyTo(memorystream); memorystream.Position = 0; sourcestream = memorystream; } using (var binaryReader = new BinaryReader(sourcestream)) { var reader = new DexReader(result); reader.ReadFrom(binaryReader); return(result); } } }
private void TestReadWrite(string file, out DexReader dexreader, out DexWriter dexwriter) { TestContext.WriteLine("Testing {0}", file); var dex = new Dex(); dexreader = new DexReader(dex); using (Stream fs = new FileStream(file, FileMode.Open)) using (var reader = new BinaryReader(fs)) dexreader.ReadFrom(reader); dexwriter = new DexWriter(dex); dexwriter.WriteTo(new BinaryWriter(new MemoryStream())); }
public DexReader(Dex dex) { Dex = dex; Map = new Map(); Header = new DexHeader(); }
internal static void Fill(string tdString, TypeReference item, Dex context) { if (!string.IsNullOrEmpty(tdString)) { char prefix = tdString[0]; var td = (TypeDescriptors)prefix; switch (td) { case TypeDescriptors.Array: var atype = (ArrayType)item; TypeReference elementType = Allocate(tdString.Substring(1)); Fill(tdString.Substring(1), elementType, context); /* All types are already allocated * We want to reuse object reference if already in type repository * BUT if not, we don't want to add a new reference to this type: * it's a 'transient' type only used in the Dexer object model but * not persisted in dex file. */ atype.ElementType = context.Import(elementType, false); break; case TypeDescriptors.FullyQualifiedName: var cref = (ClassReference)item; cref.Fullname = tdString.Substring(1, tdString.Length-2); break; } } }
static internal List <ClassDefinition> Hierarchicalize(List <ClassDefinition> container, Dex dex) { var result = new List <ClassDefinition>(); foreach (var cdef in container) { if (cdef.Fullname.Contains(DexConsts.InnerClassMarker.ToString(CultureInfo.InvariantCulture))) { var items = cdef.Fullname.Split(DexConsts.InnerClassMarker); var fullname = items[0]; //var name = items[1]; var owner = dex.GetClass(fullname); if (owner != null) { owner.InnerClasses.Add(cdef); cdef.Owner = owner; } } else { result.Add(cdef); } } return(result); }
public static Dex Read(string filename, bool bufferize) { var result = new Dex(); using (var filestream = new FileStream(filename, FileMode.Open)) { Stream sourcestream = filestream; if (bufferize) { var memorystream = new MemoryStream(); filestream.CopyTo(memorystream); memorystream.Position = 0; sourcestream = memorystream; } using (var binaryReader = new BinaryReader(sourcestream)) { var reader = new DexReader(result); reader.ReadFrom(binaryReader); return result; } } }
internal ClassDefinition(Dex dexSource, ClassReference cref) : this(dexSource) { Fullname = cref.Fullname; Namespace = cref.Namespace; Name = cref.Name; }
internal static List<ClassDefinition> Hierarchicalize(List<ClassDefinition> container, Dex dex) { var result = new List<ClassDefinition>(); foreach (var cdef in container) { if (cdef.Fullname.Contains(DexConsts.InnerClassMarker.ToString(CultureInfo.InvariantCulture))) { var items = cdef.Fullname.Split(DexConsts.InnerClassMarker); var fullname = items[0]; //var name = items[1]; var owner = dex.GetClass(fullname); if (owner != null) { owner.InnerClasses.Add(cdef); cdef.Owner = owner; } } else { result.Add(cdef); } } return result; }