Esempio n. 1
0
        private void Build(Procedure proc, IProcessorArchitecture arch)
        {
            var platform = new DefaultPlatform(null, arch);

            this.proc = proc;
            Aliases alias = new Aliases(proc, arch);

            alias.Transform();
            var          gr  = proc.CreateBlockDominatorGraph();
            SsaTransform sst = new SsaTransform(new ProgramDataFlow(), proc, gr);
            SsaState     ssa = sst.SsaState;

            this.ssaIds = ssa.Identifiers;

            ConditionCodeEliminator cce = new ConditionCodeEliminator(ssa.Identifiers, platform);

            cce.Transform();
            DeadCode.Eliminate(proc, ssa);

            ValuePropagator vp = new ValuePropagator(arch, ssa.Identifiers, proc);

            vp.Transform();

            Coalescer coa = new Coalescer(proc, ssa);

            coa.Transform();

            DeadCode.Eliminate(proc, ssa);
        }
Esempio n. 2
0
        public override Program Load(Address?addrLoad)
        {
            var rdr    = new BeImageReader(RawImage);
            var header = rdr.ReadStruct <filehdr>();

            if (header.f_opthdr != 0)
            {
                var sectionOffset = rdr.Offset + header.f_opthdr;
                opthdr     = rdr.ReadStruct <aouthdr>();
                rdr.Offset = sectionOffset;
            }
            var sections = new scnhdr[header.f_nscns];

            for (int i = 0; i < sections.Length; ++i)
            {
                sections[i] = rdr.ReadStruct <scnhdr>();
            }
            var imgSegments = new ImageSegment[header.f_nscns];

            for (int i = 0; i < sections.Length; ++i)
            {
                imgSegments[i] = LoadImageSegment(sections[i]);
            }

            var arch     = LoadArchitecture(header.f_magic);
            var platform = new DefaultPlatform(Services, arch);
            var segmap   = new SegmentMap(imgSegments);

            return(new Program(segmap, arch, platform));
        }
Esempio n. 3
0
        private ImageLoader CreateRawImageLoader(byte[] image, NullImageLoader imgLoader, RawFileElement rawFile)
        {
            var       arch = cfgSvc.GetArchitecture(rawFile.Architecture);
            var       env  = cfgSvc.GetEnvironment(rawFile.Environment);
            IPlatform platform;
            Address   baseAddr;
            Address   entryAddr;

            if (env != null)
            {
                platform = env.Load(Services, arch);
            }
            else
            {
                platform = new DefaultPlatform(Services, arch);
            }
            //ApplyMemoryMap(platform, image
            imgLoader.Architecture = arch;
            imgLoader.Platform     = platform;
            if (arch.TryParseAddress(rawFile.BaseAddress, out baseAddr))
            {
                imgLoader.PreferredBaseAddress = baseAddr;
                entryAddr = GetRawBinaryEntryAddress(rawFile, image, arch, baseAddr);
                var state = arch.CreateProcessorState();
                imgLoader.EntryPoints.Add(new EntryPoint(
                                              entryAddr,
                                              rawFile.EntryPoint.Name,
                                              state));
            }
            return(imgLoader);
        }
Esempio n. 4
0
        public Renderer(DefaultPlatform platform, GraphicSettings graphicSettings)
        {
            this.platform = platform;
            var resolution = GetResolution(graphicSettings);

            Window  = platform.CreateWindow(new Size(resolution.Width, resolution.Height), graphicSettings.Mode, graphicSettings.BatchSize, Game.Settings.Graphics.DisableWindowsDPIScaling, Game.Settings.Game.LockMouseWindow, Game.Settings.Graphics.DisableWindowsRenderThread);
            Context = Window.Context;

            TempBufferSize = graphicSettings.BatchSize;
            SheetSize      = graphicSettings.SheetSize;

            WorldSpriteRenderer     = new SpriteRenderer("WorldSpriteRenderer", this, Context.CreateShader("combined"));         // каждый имеет vertex массив, VAO это tempbuffer.
            WorldRgbaSpriteRenderer = new RgbaSpriteRenderer(WorldSpriteRenderer);
            WorldRgbaColorRenderer  = new RgbaColorRenderer(WorldSpriteRenderer);
            WorldModelRenderer      = new ModelRenderer(this, Context.CreateShader("model"));                               // каждый имеет vertex массив, VAO это tempbuffer
            SpriteRenderer          = new SpriteRenderer("SpriteRenderer", this, Context.CreateShader("combined"));         // каждый имеет vertex массив, VAO это tempbuffer.
            RgbaSpriteRenderer      = new RgbaSpriteRenderer(SpriteRenderer);                                               // эти пишут в родительский VBO
            RgbaColorRenderer       = new RgbaColorRenderer(SpriteRenderer);                                                // эти пишут в родительский VBO
            FontSpriteRenderer      = new SpriteRenderer("FontSpriteRenderer", this, Context.CreateShader("text"));         // каждый имеет свой vertex массив, VAO это tempbuffer.
            ImguiSpriteRenderer     = new SpriteRenderer("ImguiSpriteRenderer", this, Context.CreateShader("combined"));    // для ImGui
            PixelDumpRenderer       = new PixelDumpRenderer("ImguiSpriteRenderer", this, Context.CreateShader("combined")); // для ImGui

            sproc = new ShaderIF_API();
            IntPtr context = ImGui.CreateContext();

            ImGui.SetCurrentContext(context);

            RendererVertexBuffer = Context.CreateVertexBuffer(TempBufferSize, "Renderer");
        }
Esempio n. 5
0
        private void Build(Procedure proc, IProcessorArchitecture arch)
        {
            var platform = new DefaultPlatform(null, arch);

            this.proc = proc;
            Aliases alias = new Aliases(proc, arch);

            alias.Transform();
            SsaTransform sst = new SsaTransform(
                new ProgramDataFlow(),
                proc,
                null,
                proc.CreateBlockDominatorGraph(),
                new HashSet <RegisterStorage>());

            ssa = sst.SsaState;
            ConditionCodeEliminator cce = new ConditionCodeEliminator(ssa, platform);

            cce.Transform();
            ValuePropagator vp = new ValuePropagator(arch, ssa, new FakeDecompilerEventListener());

            vp.Transform();
            DeadCode.Eliminate(proc, ssa);
            Coalescer coa = new Coalescer(proc, ssa);

            coa.Transform();
            DeadCode.Eliminate(proc, ssa);

            sla  = new SsaLivenessAnalysis(proc, ssa.Identifiers);
            sla2 = new SsaLivenessAnalysis2(proc, ssa.Identifiers);
            sla2.Analyze();
        }
Esempio n. 6
0
        public override Program Load(Address?addrLoad)
        {
            BeImageReader rdr = new BeImageReader(this.RawImage, 0);
            FileHeader    str = rdr.ReadStruct <FileHeader>();

            if (str.f_opthdr != 0)
            {
                aux = rdr.ReadStruct <AuxFileHeader>();
            }
            if (str.f_nscns == 0)
            {
                throw new BadImageFormatException("Expected at least one XCoff32 section.");
            }
            var segments = new ImageSegment[str.f_nscns + 1];

            for (int i = 1; i <= str.f_nscns; ++i)
            {
                segments[i] = LoadSegment(rdr);
            }
            var mem      = new ByteMemoryArea(addrLoad ?? PreferredBaseAddress, RawImage);
            var seg      = new ImageSegment("foo", mem, AccessMode.ReadWriteExecute);
            var map      = new SegmentMap(segments.Skip(1).ToArray());
            var cfgSvc   = Services.RequireService <IConfigurationService>();
            var arch     = cfgSvc.GetArchitecture("ppc-be-32") !;
            var platform = new DefaultPlatform(Services, arch);

            return(new Program(map, arch, platform));
        }
Esempio n. 7
0
        private void RunFileTestx86_32(string relativePath, string outputFile)
        {
            Program program;
            var     sc    = new ServiceContainer();
            var     fsSvc = new FileSystemServiceImpl();
            var     el    = new FakeDecompilerEventListener();

            sc.AddService <IFileSystemService>(fsSvc);
            sc.AddService <DecompilerEventListener>(el);
            var arch = new X86ArchitectureFlat32(sc, "x86-protected-32", new Dictionary <string, object>());
            var asm  = new X86TextAssembler(arch);

            using (var rdr = new StreamReader(FileUnitTester.MapTestPath(relativePath)))
            {
                var platform = new DefaultPlatform(sc, arch);
                program          = asm.Assemble(Address.Ptr32(0x10000000), rdr);
                program.Platform = platform;
            }
            var scanner = new Scanner(program, null, sc);

            scanner.EnqueueImageSymbol(ImageSymbol.Procedure(arch, program.ImageMap.BaseAddress), true);
            scanner.ScanImage();
            using (var fut = new FileUnitTester(outputFile))
            {
                foreach (var proc in program.Procedures.Values)
                {
                    proc.Write(false, fut.TextWriter);
                }
                fut.AssertFilesEqual();
            }
        }
Esempio n. 8
0
        public void DetermineTargetInformation(List <TargetSpecification> targets)
        {
            IProcessorArchitecture arch = null;
            IPlatform platform          = null;

            foreach (var target in targets)
            {
                var segs = target.Specification.Split('-');
                switch (target.Type)
                {
                case TokenType.datalayout:
                    break;

                case TokenType.triple:
                    arch = LoadArchitecture(segs[0]);
                    // vendor = segs[1];
                    platform = LoadPlatform(arch, segs[2]);
                    break;
                }
            }
            if (platform == null)
            {
                platform = new DefaultPlatform(services, arch);
            }
            this.program = new Program
            {
                Architecture = arch,
                Platform     = platform,
                // No segment map.
            };
        }
Esempio n. 9
0
        private void Build(Procedure proc, IProcessorArchitecture arch)
        {
            var platform = new DefaultPlatform(null, arch);

            this.proc = proc;
            Aliases alias = new Aliases(proc);

            alias.Transform();
            var          importResolver = new Mock <IImportResolver>().Object;
            SsaTransform sst            = new SsaTransform(
                new ProgramDataFlow(),
                proc,
                importResolver,
                proc.CreateBlockDominatorGraph(),
                new HashSet <RegisterStorage>());

            ssa = sst.SsaState;
            ConditionCodeEliminator cce = new ConditionCodeEliminator(ssa, platform);

            cce.Transform();
            var             segmentMap = new SegmentMap(Address.Ptr32(0x00123400));
            ValuePropagator vp         = new ValuePropagator(segmentMap, ssa, new CallGraph(), importResolver, new FakeDecompilerEventListener());

            vp.Transform();
            DeadCode.Eliminate(proc, ssa);
            Coalescer coa = new Coalescer(proc, ssa);

            coa.Transform();
            DeadCode.Eliminate(proc, ssa);

            sla  = new SsaLivenessAnalysis(proc, ssa.Identifiers);
            sla2 = new SsaLivenessAnalysis2(proc, ssa.Identifiers);
            sla2.Analyze();
        }
        private void Given_VaScanner(IProcessorArchitecture arch)
        {
            var platform   = new DefaultPlatform(null, arch);
            var segmentMap = CreateSegmentMap(0, 128);

            this.program = new Program(segmentMap, arch, platform);
            this.vafs    = CreateVaScanner(program);
        }
Esempio n. 11
0
        public void Setup()
        {
            factory = new TypeFactory();
            store   = new TypeStore();
            eqb     = new EquivalenceClassBuilder(factory, store, new FakeDecompilerEventListener());
            var platform = new DefaultPlatform(null, new FakeArchitecture(new ServiceContainer()));

            dtb = new DataTypeBuilder(factory, store, platform);
        }
Esempio n. 12
0
        public void Setup()
        {
            factory = new TypeFactory();
            store   = new TypeStore();
            eqb     = new EquivalenceClassBuilder(factory, store);
            var platform = new DefaultPlatform(null, new FakeArchitecture());

            dtb = new DataTypeBuilder(factory, store, platform);
        }
Esempio n. 13
0
        public Sound(DefaultPlatform platform, SoundSettings soundSettings)
        {
            soundEngine = platform.CreateSound(soundSettings.Device);

            if (soundSettings.Mute)
            {
                MuteAudio();
            }
        }
Esempio n. 14
0
        private void DecompileRawImage(DecompilerDriver dec, Dictionary <string, object> pArgs)
        {
            var arch = config.GetArchitecture((string)pArgs["--arch"]);

            if (arch == null)
            {
                throw new ApplicationException(string.Format("Unknown architecture {0}", pArgs["--arch"]));
            }

            object   sEnv;
            Platform platform;

            if (pArgs.TryGetValue("--env", out sEnv))
            {
                var opEnv = config.GetEnvironment((string)sEnv);
                if (opEnv == null)
                {
                    throw new ApplicationException(string.Format("Unknown operating environment {0}", sEnv));
                }
                platform = opEnv.Load(services, arch);
            }
            else
            {
                platform = new DefaultPlatform(services, arch);
            }

            Address addrBase;
            Address addrEntry;

            if (!arch.TryParseAddress((string)pArgs["--base"], out addrBase))
            {
                throw new ApplicationException(string.Format("'{0}' doesn't appear to be a valid address.", pArgs["--base"]));
            }
            if (pArgs.ContainsKey("--entry"))
            {
                if (!arch.TryParseAddress((string)pArgs["--base"], out addrEntry))
                {
                    throw new ApplicationException(string.Format("'{0}' doesn't appear to be a valid address.", pArgs["--base"]));
                }
            }
            else
            {
                addrEntry = addrBase;
            }


            var state = CreateInitialState(arch, pArgs);

            dec.LoadRawImage((string)pArgs["filename"], arch, platform, addrBase);
            dec.Project.Programs[0].EntryPoints.Add(new EntryPoint(addrEntry, state));
            dec.ScanPrograms();
            dec.AnalyzeDataFlow();
            dec.ReconstructTypes();
            dec.StructureProgram();
            dec.WriteDecompilerProducts();
        }
Esempio n. 15
0
        public void Setup()
        {
            this.m       = new ExpressionEmitter();
            this.store   = new TypeStore();
            this.factory = new TypeFactory();
            var arch     = new FakeArchitecture();
            var platform = new DefaultPlatform(null, arch);

            this.exa = new ExpressionTypeAscender(platform, store, factory);
        }
Esempio n. 16
0
        public void Oee_LoadPlatform_NoHeuristics()
        {
            var element = new PlatformDefinition
            {
            };
            var platform = new DefaultPlatform(null, null);

            element.LoadSettingsFromConfiguration(null, platform);
            Assert.IsNotNull(platform.Heuristics);
            Assert.IsNotNull(platform.Heuristics.ProcedurePrologs);
            Assert.AreEqual(0, platform.Heuristics.ProcedurePrologs.Length);
        }
Esempio n. 17
0
        public void Setup()
        {
            this.m       = new ExpressionEmitter();
            this.store   = new TypeStore();
            this.factory = new TypeFactory();
            var arch     = new FakeArchitecture(new ServiceContainer());
            var platform = new DefaultPlatform(null, arch);

            program = new Program {
                Architecture = arch, Platform = platform
            };
            this.exa = new ExpressionTypeAscender(program, store, factory);
        }
Esempio n. 18
0
        private void Given_ProgramWithOneSegment()
        {
            var image    = new LoadedImage(Address.Ptr32(0x12340000), new byte[0x1000]);
            var imageMap = image.CreateImageMap();

            imageMap.AddSegment(Address.Ptr32(0x12340000), ".text", AccessMode.Execute);
            var arch     = mr.StrictMock <IProcessorArchitecture>();
            var platform = new DefaultPlatform(sc, arch);

            this.program          = new Program(image, imageMap, arch, platform);
            this.program.Name     = "foo.exe";
            this.program.Filename = @"c:\test\foo.exe";
            project.Programs.Add(program);
        }
Esempio n. 19
0
        internal static ITizenPlatform CreatePlatform(EvasObject parent)
        {
            ITizenPlatform platform;

            if (Forms.Flags.Contains(Flags.LightweightPlatformExperimental))
            {
                platform = new LightweightPlatform(parent);
            }
            else
            {
                platform = new DefaultPlatform(parent);
            }
            return(platform);
        }
Esempio n. 20
0
        public override Program Load(Address?addrLoad)
        {
            var rdr        = LoadHeader();
            var sections   = LoadSections(rdr);
            var segmentMap = BuildSegmentMap(sections);
            var arch       = new WasmArchitecture(Services, "wasm", new Dictionary <string, object>());
            var platform   = new DefaultPlatform(Services, arch);

            return(new Program()
            {
                Architecture = arch,
                Platform = platform,
                SegmentMap = segmentMap
            });
        }
Esempio n. 21
0
        public void EIL_LoadCellLv2()
        {
            var opEl     = mr.Stub <OperatingEnvironment>();
            var platform = new DefaultPlatform(services, arch);

            dcSvc.Stub(d => d.GetEnvironment("elf-cell-lv2")).Return(opEl);
            opEl.Expect(o => o.Load(null, null)).IgnoreArguments().Return(platform);
            mr.ReplayAll();

            var el = new ElfImageLoader(services, "foo", rawImg);

            el.CreatePlatform(0x66);        // ELFOSABI_CELL_LV2;

            mr.VerifyAll();
        }
        private void Given_ProgramWithOneSegment()
        {
            var mem        = new ByteMemoryArea(Address.Ptr32(0x12340000), new byte[0x1000]);
            var segmentMap = new SegmentMap(Address.Ptr32(0x12300000));

            segmentMap.AddSegment(mem, ".text", AccessMode.ReadExecute);
            var arch = new Mock <ProcessorArchitecture>(sc, "mmix", new Dictionary <string, object>());

            arch.Object.Description = "Foo Processor";
            var platform = new DefaultPlatform(sc, arch.Object);

            this.program          = new Program(segmentMap, arch.Object, platform);
            this.program.Name     = "foo.exe";
            this.program.Filename = @"c:\test\foo.exe";
            project.Programs.Add(program);
        }
Esempio n. 23
0
        private void Given_ProgramWithOneSegment()
        {
            var mem      = new MemoryArea(Address.Ptr32(0x12340000), new byte[0x1000]);
            var imageMap = new ImageMap(Address.Ptr32(0x12300000));

            imageMap.AddSegment(mem, ".text", AccessMode.ReadExecute);
            var arch = mr.StrictMock <ProcessorArchitecture>();

            arch.Description = "Foo Processor";
            var platform = new DefaultPlatform(sc, arch);

            this.program          = new Program(imageMap, arch, platform);
            this.program.Name     = "foo.exe";
            this.program.Filename = @"c:\test\foo.exe";
            project.Programs.Add(program);
        }
Esempio n. 24
0
        private ImageLoader CreateRawImageLoader(string filename, byte[] image, RawFileElement rawFile)
        {
            var       arch = cfgSvc.GetArchitecture(rawFile.Architecture);
            var       env  = cfgSvc.GetEnvironment(rawFile.Environment);
            IPlatform platform;

            if (env != null)
            {
                platform = env.Load(Services, arch);
            }
            else
            {
                platform = new DefaultPlatform(Services, arch);
            }

            Address entryAddr = null;
            Address baseAddr;

            if (arch.TryParseAddress(rawFile.BaseAddress, out baseAddr))
            {
                entryAddr = GetRawBinaryEntryAddress(rawFile, image, arch, baseAddr);
            }
            var imgLoader = new NullImageLoader(Services, filename, image)
            {
                Architecture         = arch,
                Platform             = platform,
                PreferredBaseAddress = entryAddr,
            };
            Address addrEp;

            if (rawFile.EntryPoint != null)
            {
                if (!string.IsNullOrEmpty(rawFile.EntryPoint.Address))
                {
                    arch.TryParseAddress(rawFile.EntryPoint.Address, out addrEp);
                }
                else
                {
                    addrEp = baseAddr;
                }
                imgLoader.EntryPoints.Add(new ImageSymbol(addrEp)
                {
                    Type = SymbolType.Procedure
                });
            }
            return(imgLoader);
        }
Esempio n. 25
0
        public ImageLoader CreateDefaultImageLoader(string filename, byte[] image)
        {
            var imgLoader = new NullImageLoader(Services, filename, image);
            var rawFile   = cfgSvc.GetRawFile(DefaultToFormat);

            if (rawFile == null)
            {
                this.Services.RequireService <DecompilerEventListener>().Warn(
                    new NullCodeLocation(""),
                    "The format of the file is unknown.");
                return(imgLoader);
            }
            var      arch = cfgSvc.GetArchitecture(rawFile.Architecture);
            var      env  = cfgSvc.GetEnvironment(rawFile.Environment);
            Platform platform;
            Address  baseAddr;
            Address  entryAddr;

            if (env != null)
            {
                platform = env.Load(Services, arch);
            }
            else
            {
                platform = new DefaultPlatform(Services, arch);
            }
            imgLoader.Architecture = arch;
            imgLoader.Platform     = platform;
            if (arch.TryParseAddress(rawFile.BaseAddress, out baseAddr))
            {
                imgLoader.PreferredBaseAddress = baseAddr;
                entryAddr = baseAddr;
                if (!string.IsNullOrEmpty(rawFile.EntryPoint.Address))
                {
                    if (!arch.TryParseAddress(rawFile.EntryPoint.Address, out entryAddr))
                    {
                        entryAddr = baseAddr;
                    }
                }
                var state = arch.CreateProcessorState();
                imgLoader.EntryPoints.Add(new EntryPoint(
                                              entryAddr,
                                              rawFile.EntryPoint.Name,
                                              state));
            }
            return(imgLoader);
        }
Esempio n. 26
0
        private void Build(Procedure proc, IProcessorArchitecture arch)
        {
            var platform = new DefaultPlatform(null, arch);
            var program  = new Program()
            {
                Architecture = arch,
                Platform     = platform,
            };

            this.proc = proc;
            var          dynamicLinker = new Mock <IDynamicLinker>().Object;
            var          gr            = proc.CreateBlockDominatorGraph();
            SsaTransform sst           = new SsaTransform(
                program,
                proc,
                new HashSet <Procedure>(),
                null,
                new ProgramDataFlow());

            sst.Transform();
            this.ssa    = sst.SsaState;
            this.ssaIds = ssa.Identifiers;

            var listener = new FakeDecompilerEventListener();
            ConditionCodeEliminator cce = new ConditionCodeEliminator(ssa, platform, listener);

            cce.Transform();
            DeadCode.Eliminate(ssa);

            var             segmentMap = new SegmentMap(Address.Ptr32(0x00400000));
            ValuePropagator vp         = new ValuePropagator(
                segmentMap,
                ssa,
                program.CallGraph,
                null,
                listener);

            vp.Transform();

            Coalescer coa = new Coalescer(ssa);

            coa.Transform();

            DeadCode.Eliminate(ssa);
        }
Esempio n. 27
0
        public override Program Load(Address?addrLoad)
        {
            BeImageReader rdr = new BeImageReader(this.RawImage, 0);
            FileHeader64? str = rdr.ReadStruct <FileHeader64>();

            if (!str.HasValue)
            {
                throw new BadImageFormatException("Invalid XCoff64 header.");
            }
            var mem      = new ByteMemoryArea(addrLoad ?? PreferredBaseAddress, RawImage);
            var seg      = new ImageSegment("foo", mem, AccessMode.ReadWriteExecute);
            var map      = new SegmentMap(seg);
            var cfgSvc   = Services.RequireService <IConfigurationService>();
            var arch     = cfgSvc.GetArchitecture("ppc-64-be") !;
            var platform = new DefaultPlatform(Services, arch);

            return(new Program(map, arch, platform));
        }
Esempio n. 28
0
        private void CreateProgram(MemoryArea mem, IProcessorArchitecture arch)
        {
            var segmentMap = new SegmentMap(mem.BaseAddress);
            var seg        = segmentMap.AddSegment(new ImageSegment(
                                                       ".text",
                                                       mem,
                                                       AccessMode.ReadExecute)
            {
                Size = (uint)mem.Bytes.Length
            });

            seg.Access = AccessMode.ReadExecute;
            var platform = new DefaultPlatform(null, arch);

            program = new Program(
                segmentMap,
                arch,
                platform);
        }
Esempio n. 29
0
        public void EIL_LoadCellLv2()
        {
            var opEl     = new Mock <PlatformDefinition>();
            var platform = new DefaultPlatform(sc, arch.Object);

            cfgSvc.Setup(d => d.GetEnvironment("elf-cell-lv2")).Returns(opEl.Object);
            opEl.Setup(o => o.Load(
                           It.IsAny <IServiceProvider>(),
                           It.IsAny <IProcessorArchitecture>()))
            .Returns(platform)
            .Verifiable();

            var eil = new ElfImageLoader(sc, "foo", rawImg);

            eil.LoadElfIdentification();
            var el = eil.CreateLoader();

            el.LoadPlatform(0x66, arch.Object);        // ELFOSABI_CELL_LV2;

            opEl.VerifyAll();
        }
Esempio n. 30
0
        void RunTest(string c_code, string expectedXml, string dialect)
        {
            StringReader reader = null;
            StringWriter writer = null;

            try
            {
                reader = new StringReader(c_code);
                writer = new StringWriter();
                //var xWriter = new XmlTextWriter(writer)
                var xWriter = new XmlnsHidingWriter(writer)
                {
                    Formatting = Formatting.Indented
                };
                var arch     = new FakeArchitecture(new ServiceContainer());
                var platform = new DefaultPlatform(null, arch);
                var xc       = new XmlConverter(reader, xWriter, platform, true, dialect);
                xc.Convert();
                writer.Flush();
                Assert.AreEqual(expectedXml, writer.ToString());
            }
            catch
            {
                Debug.WriteLine(writer.ToString());
                throw;
            }
            finally
            {
                if (writer != null)
                {
                    writer.Dispose();
                }
                if (reader != null)
                {
                    reader.Dispose();
                }
            }
        }