コード例 #1
0
ファイル: InstructionReader.cs プロジェクト: shuixi2013/Dexer
 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;
 }
コード例 #2
0
ファイル: Dex.cs プロジェクト: LoyieKing/Dexer
        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);
        }
コード例 #3
0
        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>();
        }
コード例 #4
0
ファイル: Dex.cs プロジェクト: oujunke/Dexer
        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);
            }
        }
コード例 #5
0
ファイル: Dex.cs プロジェクト: shuixi2013/Dexer
        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);
                }
            }
        }
コード例 #6
0
ファイル: RoundtripTest.cs プロジェクト: shuixi2013/Dexer
        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()));
        }
コード例 #7
0
ファイル: DexReader.cs プロジェクト: shuixi2013/Dexer
 public DexReader(Dex dex)
 {
     Dex = dex;
     Map = new Map();
     Header = new DexHeader();
 }
コード例 #8
0
ファイル: TypeDescriptor.cs プロジェクト: shuixi2013/Dexer
        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;
                }
            }
        }
コード例 #9
0
        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);
        }
コード例 #10
0
ファイル: Dex.cs プロジェクト: shuixi2013/Dexer
        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;
                }
            }
        }
コード例 #11
0
 internal ClassDefinition(Dex dexSource, ClassReference cref) : this(dexSource)
 {
     Fullname  = cref.Fullname;
     Namespace = cref.Namespace;
     Name      = cref.Name;
 }
コード例 #12
0
ファイル: ClassDefinition.cs プロジェクト: shuixi2013/Dexer
 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;
 }