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]; } }
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); }