示例#1
0
 private static int DumpNextBytecodes(StreamWriter writer, UnBytecodeOwner function, byte[] bytes, int startOffset, int nextBytecodes)
 {
     using (var stream = new MemoryStream(bytes))
     {
         stream.Position = startOffset;
         using (var reader = new BinaryReader(stream))
         {
             var bytecodeReader = new BytecodeReader(function.Package, reader);
             for (int i = 0; i < nextBytecodes; i++)
             {
                 try
                 {
                     var bytecodeToken = bytecodeReader.ReadNext();
                     writer.WriteLine("      " + bytecodeToken);
                 }
                 catch (Exception)
                 {
                     writer.WriteLine("      error reading next bytecode");
                     break;
                 }
             }
             return((int)reader.BaseStream.Position);
         }
     }
 }
示例#2
0
 private static void DumpNextName(StreamWriter writer, UnBytecodeOwner function, byte[] bytes, int startOffset)
 {
     using (var stream = new MemoryStream(bytes))
     {
         stream.Position = startOffset;
         using (var reader = new BinaryReader(stream))
         {
             var name = function.Package.getNameEntry(reader.ReadInt32());
             writer.WriteLine("      " + name);
         }
     }
 }
 public static void RegisterUnknownBytecode(byte b, UnBytecodeOwner function, byte[] subsequentBytes)
 {
     if (subsequentBytes.Length < 4)
     {
         return;                               // most likely bogus bytes after 'return'
     }
     if (!_unknownBytecodes.TryGetValue(b, out List <UnknownBytecodeOccurrence> occurrences))
     {
         occurrences          = new List <UnknownBytecodeOccurrence>();
         _unknownBytecodes[b] = occurrences;
     }
     occurrences.Add(new UnknownBytecodeOccurrence(function, subsequentBytes));
 }
 private static void WriteFunctionName(StreamWriter writer, UnBytecodeOwner function)
 {
     if (function.Export.SuperClass is IEntry parent)
     {
         if (parent.ClassName == "State")
         {
             writer.Write("!!!STATE PARENT -- FIX ME IN CODE!!!.");
             //writer.Write(parent.Parent.ObjectName + ".");
         }
         writer.Write($"{parent.ObjectName.Instanced}.");
     }
     writer.WriteLine(function.Export.ObjectName.Instanced);
 }
示例#5
0
        private static void WriteFunctionName(StreamWriter writer, UnBytecodeOwner function)
        {
            int classParentIdx = function.Export.idxClassParent;

            if (classParentIdx != 0)
            {
                IEntry parent = function.Export.FileRef.getEntry(classParentIdx);
                if (parent.ClassName == "State")
                {
                    writer.Write("!!!STATE PARENT -- FIX ME IN CODE!!!.");
                    //writer.Write(parent.Parent.ObjectName + ".");
                }
                writer.Write(parent.ObjectName + ".");
            }
            writer.WriteLine(function.Export.ObjectName);
        }
示例#6
0
 public static void RegisterIncompleteControlFlow(UnBytecodeOwner function)
 {
     _incompleteControlFlow.Add(function);
 }
示例#7
0
 public static void RegisterBytecodeError(UnBytecodeOwner function, string message)
 {
     _bytecodeErrors.Add(new BytecodeError(function, message));
 }
示例#8
0
 public BytecodeError(UnBytecodeOwner function, string message)
 {
     Function = function;
     Message  = message;
 }
示例#9
0
 public UnknownBytecodeOccurrence(UnBytecodeOwner function, byte[] subsequentBytes)
 {
     Function        = function;
     SubsequentBytes = subsequentBytes;
 }