private void Verify(SerializedSignature ssig, string outputFilename) { using (FileUnitTester fut = new FileUnitTester(outputFilename)) { XmlTextWriter x = new FilteringXmlWriter(fut.TextWriter); x.Formatting = Formatting.Indented; XmlSerializer ser = SerializedLibrary.CreateSerializer_v1(ssig.GetType()); ser.Serialize(x, ssig); fut.AssertFilesEqual(); } }
private void Verify(SerializedSignature ssig, string outputFilename) { using (FileUnitTester fut = new FileUnitTester(outputFilename)) { XmlTextWriter x = new FilteringXmlWriter(fut.TextWriter); x.Formatting = Formatting.Indented; XmlSerializer ser = SerializedLibrary.CreateSerializer_v1(ssig.GetType()); ser.Serialize(x, ssig); fut.AssertFilesEqual(); } }
private void Verify(SerializedLibrary slib, string outputFile) { using (FileUnitTester fut = new FileUnitTester(outputFile)) { XmlTextWriter writer = new FilteringXmlWriter(fut.TextWriter); writer.Formatting = Formatting.Indented; XmlSerializer ser = SerializedLibrary.CreateSerializer_v1(slib.GetType()); ser.Serialize(writer, slib); fut.AssertFilesEqual(); } }
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()); }
private void When_SaveToTextWriter(Program program, TextWriter sw) { var saver = new ProjectSaver(sc); var sProj = new Project_v5 { InputFiles = { saver.VisitProgram(ImageLocation.FromUri("file:foo.exe"), program) } }; var writer = new FilteringXmlWriter(sw); writer.Formatting = System.Xml.Formatting.Indented; XmlSerializer ser = SerializedLibrary.CreateSerializer_v5(typeof(Project_v5)); ser.Serialize(writer, sProj); }
private void When_SaveToTextWriter(Program program, TextWriter sw) { var saver = new ProjectSaver(sc); var sProj = new Project_v4 { Inputs = { saver.VisitProgram("foo.exe", program) } }; var writer = new FilteringXmlWriter(sw); writer.Formatting = System.Xml.Formatting.Indented; XmlSerializer ser = SerializedLibrary.CreateSerializer_v4(typeof(Project_v4)); ser.Serialize(writer, sProj); }
public void SudWrite() { Project_v1 ud = new Project_v1(); ud.Input.Address = "0x1000:0x0"; ud.Output.DisassemblyFilename = "foo.asm"; ud.Output.IntermediateFilename = "foo.cod"; Procedure_v1 proc = new Procedure_v1(); proc.Name = "foo"; proc.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) } } }; ud.UserProcedures.Add(proc); using (FileUnitTester fut = new FileUnitTester("Core/SudWrite.txt")) { var writer = new FilteringXmlWriter(fut.TextWriter); writer.Formatting = System.Xml.Formatting.Indented; XmlSerializer ser = SerializedLibrary.CreateSerializer_v1(typeof(Project_v1)); ser.Serialize(writer, ud); fut.AssertFilesEqual(); } }
public void SudWrite() { Project_v1 ud = new Project_v1(); ud.Input.Address = "0x1000:0x0"; ud.Output.DisassemblyFilename = "foo.asm"; ud.Output.IntermediateFilename = "foo.cod"; Procedure_v1 proc = new Procedure_v1(); proc.Name = "foo"; proc.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) } } }; ud.UserProcedures.Add(proc); using (FileUnitTester fut = new FileUnitTester("Core/SudWrite.txt")) { var writer = new FilteringXmlWriter(fut.TextWriter); writer.Formatting = System.Xml.Formatting.Indented; XmlSerializer ser = SerializedLibrary.CreateSerializer_v1(typeof(Project_v1)); ser.Serialize(writer, ud); fut.AssertFilesEqual(); } }
public void SudSaveScripts() { var project = new Project { ScriptFiles = { new Mock <ScriptFile>( null, "/var/foo/script.fake", new byte[100]).Object }, }; var sw = new StringWriter(); var writer = new FilteringXmlWriter(sw) { Formatting = System.Xml.Formatting.Indented }; var ser = SerializedLibrary.CreateSerializer_v5( typeof(Project_v5)); var saver = new ProjectSaver(sc); var sProject = saver.Serialize("/var/foo/foo.proj", project); ser.Serialize(writer, sProject); var expected = @"<?xml version=""1.0"" encoding=""utf-16""?> <project xmlns=""http://schemata.jklnet.org/Reko/v5""> <script> <filename>script.fake</filename> </script> </project>"; if (sw.ToString() != expected) { Console.WriteLine("{0}", sw.ToString()); } Assert.AreEqual(expected, sw.ToString()); }
public void SudSaveProject() { Given_Architecture(); Given_TestOS_Platform(); var eax = new RegisterStorage("eax", 0, 0, PrimitiveType.Word32); var ecx = new RegisterStorage("ecx", 1, 0, PrimitiveType.Word32); var jumpTable = new ImageMapVectorTable( Address.SegPtr(0x1000, 0x400), new Address[] { Address.SegPtr(0x1000, 0x500), Address.SegPtr(0x1000, 0x513), Address.SegPtr(0x1000, 0x5BA), }, 0); Project project = new Project { Programs = { new Program { Architecture = arch.Object, Platform = platform.Object, SegmentMap = new SegmentMap(Address.SegPtr(0x1000, 0)), //, new byte[100]), DisassemblyDirectory = "", User = new UserData { Loader = "CustomLoader", ExtractResources = true, Procedures = { { Address.SegPtr(0x1000, 0x10), new UserProcedure(Address.SegPtr(0x1000, 0x10), "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) } } } } } }, Globals = { { Address.SegPtr(0x2000, 0), new UserGlobal(Address.SegPtr(0x2000, 0), "g_20000", new StringType_v2{ Termination = StringType_v2.ZeroTermination, CharType = new PrimitiveType_v1 { Domain = Domain.Character, ByteSize = 1 } }) } }, Calls = { { Address.SegPtr(0x1000, 0x0320), new UserCallData { Address = Address.SegPtr(0x1000, 0x0320), NoReturn = true, } } }, RegisterValues = { { Address.Ptr32(0x012310), new List <UserRegisterValue> { new UserRegisterValue(eax, Constant.Word32(0x01231)), new UserRegisterValue(ecx, Constant.Word32(0x42424711)), } } }, IndirectJumps = { { Address.SegPtr(0x1000, 0x380), new UserIndirectJump { Address = jumpTable.Address, Table = jumpTable, IndexRegister = new RegisterStorage("R1", 1, 0, PrimitiveType.Word32) } } }, JumpTables = { { jumpTable.Address, jumpTable } }, OutputFilePolicy = Program.SegmentFilePolicy, } } } }; using (FileUnitTester fut = new FileUnitTester("Core/SudSaveProject.txt")) { FilteringXmlWriter writer = new FilteringXmlWriter(fut.TextWriter); writer.Formatting = System.Xml.Formatting.Indented; XmlSerializer ser = SerializedLibrary.CreateSerializer_v5(typeof(Project_v5)); Project_v5 ud = new ProjectSaver(sc).Serialize("/var/foo/foo.proj", project); ser.Serialize(writer, ud); fut.AssertFilesEqual(); } }
public void SudWrite() { Project_v5 ud = new Project_v5 { InputFiles = { new DecompilerInput_v5 { DisassemblyDirectory = "", User = new UserData_v4 { ExtractResources = true, Procedures = { 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) } } } } }, LoadAddress = "1000:0000", IndirectJumps = { new IndirectJump_v4 { InstructionAddress = "1000:0220", TableAddress = "1000:0228" }, }, JumpTables = { new JumpTable_v4 { TableAddress = "1000:0228", Destinations = new string[] { "1000:0230", "1000:0244", "1000:033F", } } } } } } }; using (FileUnitTester fut = new FileUnitTester("Core/SudWrite.txt")) { var writer = new FilteringXmlWriter(fut.TextWriter); writer.Formatting = System.Xml.Formatting.Indented; XmlSerializer ser = SerializedLibrary.CreateSerializer_v5(typeof(Project_v5)); ser.Serialize(writer, ud); fut.AssertFilesEqual(); } }
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()); }
private void Verify(SerializedLibrary slib, string outputFile) { using (FileUnitTester fut = new FileUnitTester(outputFile)) { XmlTextWriter writer = new FilteringXmlWriter(fut.TextWriter); writer.Formatting = Formatting.Indented; XmlSerializer ser = SerializedLibrary.CreateSerializer_v1(slib.GetType()); ser.Serialize(writer, slib); fut.AssertFilesEqual(); } }
public void RekoCon_Save() { var rekoCon = new RekoConfiguration_v1 { Loaders = new[] { new RekoLoader { MagicNumber = "4D5A", Type = "mzexeloader,mzexeloader" } }, RawFiles = new [] { new RawFile_v1 { Name="ms-dos-com", Description="MS-DOS COM executable", Architecture="x86-real-16", Environment="ms-dos", Base="0C00:0100", Entry = new EntryPoint_v1 { Address = "0C00:0100", Name = "MsDosCom_Start", } } }, SignatureFiles = new [] { new SignatureFile_v1 { Filename="IMAGE_FILE_MACHINE_I386.xml", Type ="Reko.Loading.UnpackerSignatureLoader,Reko" } }, Environments = new [] { new Environment_v1 { Name="elf-neutral", Description ="Unspecified ELF ABI", Type ="Reko.Environments.SysV.SysVPlatform,Reko.Environments.SysV", TypeLibraries = new [] { new TypeLibraryReference_v1 { Name="libc.so.xml" }, }, Characteristics = new [] { new TypeLibraryReference_v1 { Name="sysvcharacteristics.xml" } }, Heuristics = new PlatformHeuristics_v1 { ProcedurePrologs = new [] { new BytePattern_v1 { Bytes = "55 8B EC", Mask = "FF FF FF" } } } } }, Architectures = new[] { new Architecture_v1 { Name="x86-real-16", Description = "x86 16-bit Real Mode", Type ="Reko.Arch.X86.X86ArchitectureReal,Reko.Arch.X86" } }, Assemblers = new [] { new Assembler_v1 { Name = "pdp11-mac", Description = "PDP-11 MACRO assembler", Type = "Reko.Assemblers.Pdp11.Pdp11TextAssembler,Reko.Assemblers.Pdp11" } }, UiPreferences = new RekoUiPreferences { Styles = new [] { new StyleDefinition_v1 { Name="mem", Font="Lucida Console, 9pt" }, new StyleDefinition_v1 { Name ="mem-code", ForeColor="#000000", BackColor="#FFC0C0" } } } }; var ser = new XmlSerializer(rekoCon.GetType()); var stm = new StringWriter(); var xml = new FilteringXmlWriter(stm); xml.Formatting = Formatting.Indented; ser.Serialize(xml, rekoCon); var sExp = #region Expected @"<?xml version=""1.0"" encoding=""utf-16""?> <Reko xmlns=""http://schemata.jklnet.org/Reko/Config/v1""> <Loaders> <Loader MagicNumber=""4D5A"" Type=""mzexeloader,mzexeloader"" /> </Loaders> <RawFiles> <RawFile Name=""ms-dos-com"" Description=""MS-DOS COM executable"" Arch=""x86-real-16"" Env=""ms-dos"" Base=""0C00:0100""> <Entry Addr=""0C00:0100"" Name=""MsDosCom_Start"" /> </RawFile> </RawFiles> <SignatureFiles> <SignatureFile Filename=""IMAGE_FILE_MACHINE_I386.xml"" Type=""Reko.Loading.UnpackerSignatureLoader,Reko"" /> </SignatureFiles> <Environments> <Environment Name=""elf-neutral"" Description=""Unspecified ELF ABI"" Type=""Reko.Environments.SysV.SysVPlatform,Reko.Environments.SysV""> <TypeLibraries> <TypeLibrary Name=""libc.so.xml"" /> </TypeLibraries> <Characteristics> <TypeLibrary Name=""sysvcharacteristics.xml"" /> </Characteristics> <Heuristics> <ProcedurePrologs> <Pattern> <Bytes>55 8B EC</Bytes> <Mask>FF FF FF</Mask> </Pattern> </ProcedurePrologs> </Heuristics> </Environment> </Environments> <Architectures> <Architecture Name=""x86-real-16"" Description=""x86 16-bit Real Mode"" Type=""Reko.Arch.X86.X86ArchitectureReal,Reko.Arch.X86"" /> </Architectures> <Assemblers> <Assembler Name=""pdp11-mac"" Description=""PDP-11 MACRO assembler"" Type=""Reko.Assemblers.Pdp11.Pdp11TextAssembler,Reko.Assemblers.Pdp11"" /> </Assemblers> <UiPreferences> <Style Name=""mem"" Font=""Lucida Console, 9pt"" /> <Style Name=""mem-code"" ForeColor=""#000000"" BackColor=""#FFC0C0"" /> </UiPreferences> </Reko>"; #endregion Assert.AreEqual(sExp, stm.ToString()); }
public void Save_v4() { var sp = new Project_v4 { Inputs = { new DecompilerInput_v4 { Filename ="foo.exe", User = new UserData_v4 { Heuristics = { new Heuristic_v3 { Name = "shingle" } } } }, new AssemblerFile_v3 { Filename="foo.asm", Assembler="x86-att" } } }; var xw = new FilteringXmlWriter(new StringWriter()); new ProjectSaver(sc).Save(sp, xw); }
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(); } }
public void SudSaveProject() { Given_Architecture(); Given_TestOS_Platform(); var eax = new RegisterStorage("eax", 0, 0, PrimitiveType.Word32); var ecx = new RegisterStorage("ecx", 1, 0, PrimitiveType.Word32); var jumpTable = new ImageMapVectorTable( Address.SegPtr(0x1000, 0x400), new Address[] { Address.SegPtr(0x1000, 0x500), Address.SegPtr(0x1000, 0x513), Address.SegPtr(0x1000, 0x5BA), }, 0); Project project = new Project { Programs = { new Program { Architecture = arch, Platform = platform, SegmentMap = new SegmentMap(Address.SegPtr(0x1000, 0)), //, new byte[100]), DisassemblyFilename = "foo.asm", IntermediateFilename = "foo.cod", User = new UserData { Procedures = { { 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) } } } } } }, Globals = { { 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 } } } } }, Calls = { { Address.SegPtr(0x1000, 0x0320), new UserCallData { Address = Address.SegPtr(0x1000, 0x0320), NoReturn = true, } } }, RegisterValues = { { Address.Ptr32(0x012310), new List <UserRegisterValue> { new UserRegisterValue { Register = eax, Value = Constant.Word32(0x01231) }, new UserRegisterValue { Register = ecx, Value = Constant.Word32(0x42424711) }, } } }, IndirectJumps = { { Address.SegPtr(0x1000, 0x380), new UserIndirectJump { Address = jumpTable.Address, Table = jumpTable, IndexRegister = new RegisterStorage("R1", 1, 0, PrimitiveType.Word32) } } }, JumpTables = { { jumpTable.Address, jumpTable } } } } } }; mr.ReplayAll(); using (FileUnitTester fut = new FileUnitTester("Core/SudSaveProject.txt")) { FilteringXmlWriter writer = new FilteringXmlWriter(fut.TextWriter); writer.Formatting = System.Xml.Formatting.Indented; XmlSerializer ser = SerializedLibrary.CreateSerializer_v4(typeof(Project_v4)); Project_v4 ud = new ProjectSaver(sc).Serialize("/var/foo/foo.proj", project); ser.Serialize(writer, ud); fut.AssertFilesEqual(); } }
public void SudSaveProject() { Given_Architecture(); Given_TestOS_Platform(); Project project = new Project { Programs = { new Program { Architecture = arch, Platform = platform, ImageMap = new ImageMap(Address.SegPtr(0x1000, 0)), //, new byte[100]), DisassemblyFilename = "foo.asm", IntermediateFilename = "foo.cod", User = new UserData { Procedures = { { 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) } } } } } }, Globals = { { 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 } } } } }, Calls = { { Address.SegPtr(0x1000, 0x0320), new UserCallData { Address = Address.SegPtr(0x1000, 0x0320), NoReturn = true, } } } } } } }; mr.ReplayAll(); using (FileUnitTester fut = new FileUnitTester("Core/SudSaveProject.txt")) { FilteringXmlWriter writer = new FilteringXmlWriter(fut.TextWriter); writer.Formatting = System.Xml.Formatting.Indented; XmlSerializer ser = SerializedLibrary.CreateSerializer_v4(typeof(Project_v4)); Project_v4 ud = new ProjectSaver(sc).Save("/var/foo/foo.proj", project); ser.Serialize(writer, ud); fut.AssertFilesEqual(); } }
public void SudWrite() { Project_v3 ud = new Project_v3 { Inputs = { new DecompilerInput_v3 { DisassemblyFilename = "foo.asm", IntermediateFilename = "foo.cod", User = new UserData_v3 { Procedures = { 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) } } } } }, LoadAddress = "0x1000:0x0", } } } }; using (FileUnitTester fut = new FileUnitTester("Core/SudWrite.txt")) { var writer = new FilteringXmlWriter(fut.TextWriter); writer.Formatting = System.Xml.Formatting.Indented; XmlSerializer ser = SerializedLibrary.CreateSerializer_v3(typeof(Project_v3)); ser.Serialize(writer, ud); fut.AssertFilesEqual(); } }
public void SudWrite() { Project_v4 ud = new Project_v4 { Inputs = { new DecompilerInput_v4 { DisassemblyFilename = "foo.asm", IntermediateFilename = "foo.cod", User = new UserData_v4 { Procedures = { 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) } } } } }, LoadAddress = "1000:0000", IndirectJumps = { new IndirectJump_v4 { InstructionAddress ="1000:0220", TableAddress ="1000:0228" }, }, JumpTables = { new JumpTable_v4 { TableAddress = "1000:0228", Destinations = new string[] { "1000:0230", "1000:0244", "1000:033F", } } } } } } }; using (FileUnitTester fut = new FileUnitTester("Core/SudWrite.txt")) { var writer = new FilteringXmlWriter(fut.TextWriter); writer.Formatting = System.Xml.Formatting.Indented; XmlSerializer ser = SerializedLibrary.CreateSerializer_v4(typeof(Project_v4)); ser.Serialize(writer, ud); fut.AssertFilesEqual(); } }
private void When_SaveToTextWriter(Program program, TextWriter sw) { var saver = new ProjectSaver(); var sProj = new Project_v3 { Inputs = { saver.VisitProgram(program) } }; var writer = new FilteringXmlWriter(sw); writer.Formatting = System.Xml.Formatting.Indented; XmlSerializer ser = SerializedLibrary.CreateSerializer_v3(typeof(Project_v3)); ser.Serialize(writer, sProj); }
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", User = new UserData { Procedures = { { 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) } } } } } }, Globals = { { 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_v3(typeof(Project_v3)); Project_v3 ud = new ProjectSaver().Save(project); ser.Serialize(writer, ud); fut.AssertFilesEqual(); } }
public void SudSaveProject() { Given_Architecture(); Given_TestOS_Platform(); var eax = new RegisterStorage("eax", 0, 0, PrimitiveType.Word32); var ecx = new RegisterStorage("ecx", 1, 0, PrimitiveType.Word32); var jumpTable = new ImageMapVectorTable( Address.SegPtr(0x1000, 0x400), new Address[] { Address.SegPtr(0x1000, 0x500), Address.SegPtr(0x1000, 0x513), Address.SegPtr(0x1000, 0x5BA), }, 0); Project project = new Project { Programs = { new Program { Architecture = arch, Platform = platform, SegmentMap = new SegmentMap(Address.SegPtr(0x1000, 0)), //, new byte[100]), DisassemblyFilename = "foo.asm", IntermediateFilename = "foo.cod", User = new UserData { Procedures = { { 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) } } } } } }, Globals = { { 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 } } } } }, Calls = { { Address.SegPtr(0x1000, 0x0320), new UserCallData { Address = Address.SegPtr(0x1000, 0x0320), NoReturn = true, } } }, RegisterValues = { { Address.Ptr32(0x012310), new List<UserRegisterValue> { new UserRegisterValue { Register = eax, Value=Constant.Word32(0x01231) }, new UserRegisterValue { Register = ecx, Value=Constant.Word32(0x42424711) }, } } }, IndirectJumps = { { Address.SegPtr(0x1000, 0x380), new UserIndirectJump { Address = jumpTable.Address, Table = jumpTable, IndexRegister = new RegisterStorage("R1", 1, 0, PrimitiveType.Word32) } } }, JumpTables = { { jumpTable.Address, jumpTable } } } } } }; mr.ReplayAll(); using (FileUnitTester fut = new FileUnitTester("Core/SudSaveProject.txt")) { FilteringXmlWriter writer = new FilteringXmlWriter(fut.TextWriter); writer.Formatting = System.Xml.Formatting.Indented; XmlSerializer ser = SerializedLibrary.CreateSerializer_v4(typeof(Project_v4)); Project_v4 ud = new ProjectSaver(sc).Save("/var/foo/foo.proj", project); ser.Serialize(writer, ud); fut.AssertFilesEqual(); } }