Ejemplo n.º 1
0
        public void Decompile(byte[] data)
        {
            AbcStream stream = data;

            MinorVersion = stream.ReadShort();
            MajorVersion = stream.ReadShort();
            ConstantPool = stream.ReadConstantPoolInfo();

            MethodArray = new MethodInfo[stream.ReadU30()];
            for (uint i = 0; i < MethodArray.Length; i++)
            {
                MethodArray[i] = stream.ReadMethodInfo(ConstantPool, i);
            }

            MetadataArray = new MetadataInfo[stream.ReadU30()];
            for (int i = 0; i < MetadataArray.Length; i++)
            {
                MetadataArray[i] = stream.ReadMetadataInfo(ConstantPool);
            }

            AbcClassArray = new AbcClass[stream.ReadU30()];

            for (uint i = 0; i < AbcClassArray.Length; i++)
            {
                AbcClassArray[i] = new AbcClass(this, i);
                AbcClassArray[i].InstanceInfo = stream.ReadInstanceInfo(this, i);
            }
            for (uint i = 0; i < AbcClassArray.Length; i++)
            {
                AbcClassArray[i].ClassInfo = stream.ReadClassInfo(this, i);
            }

            ScriptArray = new ScriptInfo[stream.ReadU30()];
            for (uint i = 0; i < ScriptArray.Length; i++)
            {
                ScriptArray[i] = stream.ReadScriptInfo(this, i);
            }

            MethodBodyArray = new MethodBodyInfo[stream.ReadU30()];
            for (uint i = 0; i < MethodBodyArray.Length; i++)
            {
                MethodBodyArray[i] = stream.ReadMethodBodyInfo(this, i);
                MethodArray[MethodBodyArray[i].Method.Index].MethodBody = MethodBodyArray[i];
            }
        }
Ejemplo n.º 2
0
        public byte[] Compile()
        {
            AbcStream stream = new AbcStream();

            stream.WriteShort(MinorVersion);
            stream.WriteShort(MajorVersion);
            stream.WriteConstantPool(ConstantPool);
            stream.WriteU30((uint)MethodArray.Length);
            foreach (MethodInfo methodInfo in MethodArray)
            {
                stream.WriteMethodInfo(methodInfo);
            }
            stream.WriteU30((uint)MetadataArray.Length);
            foreach (MetadataInfo metadataInfo in MetadataArray)
            {
                stream.WriteMetadataInfo(metadataInfo);
            }
            stream.WriteU30((uint)AbcClassArray.Length);
            foreach (InstanceInfo instanceInfo in AbcClassArray.Select(x => x.InstanceInfo))
            {
                stream.WriteInstanceInfo(instanceInfo);
            }
            foreach (ClassInfo classInfo in AbcClassArray.Select(x => x.ClassInfo))
            {
                stream.WriteClassInfo(classInfo);
            }
            stream.WriteU30((uint)ScriptArray.Length);
            foreach (ScriptInfo scriptInfo in ScriptArray)
            {
                stream.WriteScriptInfo(scriptInfo);
            }
            stream.WriteU30((uint)MethodBodyArray.Length);
            foreach (MethodBodyInfo methodBodyInfo in MethodBodyArray)
            {
                stream.WriteMethodBodyInfo(methodBodyInfo);
            }
            return(stream);
        }