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); }
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)); }
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); }
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"); }
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(); }
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)); }
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(); } }
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. }; }
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); }
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); }
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); }
public Sound(DefaultPlatform platform, SoundSettings soundSettings) { soundEngine = platform.CreateSound(soundSettings.Device); if (soundSettings.Mute) { MuteAudio(); } }
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(); }
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); }
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); }
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); }
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); }
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); }
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 }); }
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); }
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); }
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); }
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); }
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); }
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)); }
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); }
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(); }
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(); } } }