Exemple #1
0
        public void SlibCodeRead()
        {
            var src = @"<?xml version=""1.0"" encoding=""utf-16""?>
<project xmlns=""http://schemata.jklnet.org/Decompiler/v2"">
  <input>
    <procedure name=""Nilz"">
      <address>00112233</address>
    </procedure>
    <global>
      <Address>00100000</Address>
      <arr length=""10"">
        <ptr size=""4"">
          <code />
        </ptr>
      </arr>
      <Name>foo</Name>
    </global>
  </input>
  <output />
</project>";

            var ser  = SerializedLibrary.CreateSerializer_v2(typeof(Project_v2));
            var sr   = new StringReader(src);
            var rdr  = new XmlTextReader(sr);
            var proj = (Project_v2)ser.Deserialize(rdr);

            Assert.AreEqual(1, proj.Inputs.Count);
            var input = (DecompilerInput_v2)proj.Inputs[0];

            Assert.AreEqual(1, input.UserGlobalData.Count);
            Assert.AreEqual("arr(ptr(code),10)", input.UserGlobalData[0].DataType.ToString());
        }
Exemple #2
0
        public void SlibCodeWrite()
        {
            var proj = new Project_v2
            {
                Inputs =
                {
                    new DecompilerInput_v2 {
                        UserGlobalData =
                        {
                            new GlobalDataItem_v2
                            {
                                Address  = "00100000",
                                Name     = "foo",
                                DataType = new ArrayType_v1{
                                    ElementType = new PointerType_v1{
                                        PointerSize = 4,
                                        DataType    = new CodeType_v1()
                                    },
                                    Length = 10,
                                }
                            }
                        }
                    }
                }
            };
            var ser    = SerializedLibrary.CreateSerializer_v2(typeof(Project_v2));
            var sw     = new StringWriter();
            var writer = new FilteringXmlWriter(sw);

            writer.Formatting = Formatting.Indented;
            ser.Serialize(writer, proj);

            Debug.Print(sw.ToString());
            var sExp = @"<?xml version=""1.0"" encoding=""utf-16""?>
<project xmlns=""http://schemata.jklnet.org/Decompiler/v2"">
  <input>
    <global>
      <Address>00100000</Address>
      <arr length=""10"">
        <ptr size=""4"">
          <code />
        </ptr>
      </arr>
      <Name>foo</Name>
    </global>
  </input>
  <output />
</project>";

            Assert.AreEqual(sExp, sw.ToString());
        }
Exemple #3
0
        public void SudSaveProject()
        {
            Project project = new Project
            {
                Programs =
                {
                    new Program
                    {
                        Image = new LoadedImage(Address.SegPtr(0x1000, 0), new byte[100]),
                        DisassemblyFilename  = "foo.asm",
                        IntermediateFilename = "foo.cod",
                        UserProcedures       = new SortedList <Address, Procedure_v1>
                        {
                            {
                                Address.SegPtr(0x1000, 0x10),
                                new Procedure_v1
                                {
                                    Name      = "foo",
                                    Signature = new SerializedSignature
                                    {
                                        ReturnValue = new Argument_v1{
                                            Kind = new Register_v1("eax")
                                        },
                                        Arguments = new Argument_v1[]
                                        {
                                            new Argument_v1
                                            {
                                                Kind = new StackVariable_v1(),
                                                Type = new PrimitiveType_v1(Domain.SignedInt, 4)
                                            },
                                            new Argument_v1
                                            {
                                                Kind = new StackVariable_v1(),
                                                Type = new PrimitiveType_v1(Domain.SignedInt, 4)
                                            }
                                        }
                                    }
                                }
                            }
                        },
                        UserGlobalData =
                        {
                            {
                                Address.SegPtr(0x2000, 0),
                                new GlobalDataItem_v2 {
                                    Address  = Address.SegPtr(0x2000, 0).ToString(),
                                    DataType = new StringType_v2{
                                        Termination = StringType_v2.ZeroTermination,
                                        CharType    = new PrimitiveType_v1 {
                                            Domain = Domain.Character, ByteSize = 1
                                        }
                                    }
                                }
                            }
                        }
                    }
                }
            };

            using (FileUnitTester fut = new FileUnitTester("Core/SudSaveProject.txt"))
            {
                FilteringXmlWriter writer = new FilteringXmlWriter(fut.TextWriter);
                writer.Formatting = System.Xml.Formatting.Indented;
                XmlSerializer ser = SerializedLibrary.CreateSerializer_v2(typeof(Project_v2));
                Project_v2    ud  = new ProjectSaver().Save(project);
                ser.Serialize(writer, ud);
                fut.AssertFilesEqual();
            }
        }