public void DumpAssembler(SegmentMap map, IProcessorArchitecture arch, Address addrStart, Address addrLast, Formatter formatter) { if (!map.TryFindSegment(addrStart, out var segment)) { return; } var dasm = arch.CreateDisassembler(arch.CreateImageReader(segment.MemoryArea, addrStart)); try { var writer = new InstrWriter(formatter); var options = new MachineInstructionRendererOptions( flags: MachineInstructionRendererFlags.ResolvePcRelativeAddress, syntax: ""); foreach (var instr in dasm) { if (instr.Address ! >= addrLast) { break; } if (!DumpAssemblerLine(segment.MemoryArea, arch, instr, writer, options)) { break; } } } catch (Exception ex) { formatter.WriteLine(ex.Message); formatter.WriteLine(); } }
public void DumpAssembler(SegmentMap map, Address addrStart, Address addrLast, TextWriter writer) { ImageSegment segment; if (!map.TryFindSegment(addrStart, out segment)) { return; } var dasm = arch.CreateDisassembler(arch.CreateImageReader(segment.MemoryArea, addrStart)); try { foreach (var instr in dasm) { if (instr.Address >= addrLast) { break; } if (!DumpAssemblerLine(segment.MemoryArea, instr, writer)) { break; } } } catch (Exception ex) { writer.WriteLine(ex.Message); writer.WriteLine(); } }
public void DumpAssembler( IProcessorArchitecture arch, MemoryArea mem, Address addrStart, long cbBytes, Formatter formatter) { var dasm = arch.CreateDisassembler(arch.CreateImageReader(mem, addrStart)); try { var writer = new InstrWriter(formatter); var options = new MachineInstructionRendererOptions( flags: MachineInstructionRendererFlags.ResolvePcRelativeAddress, syntax: ""); foreach (var instr in dasm) { if (cbBytes <= 0) { break; } if (!DumpAssemblerLine(mem, arch, instr, writer, options)) { break; } cbBytes -= instr.Length; } } catch (Exception ex) { formatter.WriteLine(ex.Message); formatter.WriteLine(); } }
public void DumpAssembler(SegmentMap map, IProcessorArchitecture arch, Address addrStart, Address addrLast, Formatter formatter) { if (!map.TryFindSegment(addrStart, out var segment)) { return; } var dasm = arch.CreateDisassembler(arch.CreateImageReader(segment.MemoryArea, addrStart)); try { var writer = new InstrWriter(formatter); foreach (var instr in dasm) { if (instr.Address >= addrLast) { break; } if (!DumpAssemblerLine(segment.MemoryArea, arch, instr, writer)) { break; } } } catch (Exception ex) { formatter.WriteLine(ex.Message); formatter.WriteLine(); } }
public IEnumerable <MachineInstruction> CreateDisassembler(IProcessorArchitecture arch, Address addr) { if (!SegmentMap.TryFindSegment(addr, out var segment)) { throw new ArgumentException(string.Format("The address {0} is invalid.", addr)); } return(arch.CreateDisassembler( arch.CreateImageReader(segment.MemoryArea, addr))); }
private static void AssertEqual(IProcessorArchitecture arch, string sExpected, string hexString) { var bytes = BytePattern.FromHexBytes(hexString); var mem = new ByteMemoryArea(Address.Ptr32(0x0010_0000), bytes); var rdr = mem.CreateLeReader(0); var dasm = arch.CreateDisassembler(rdr); var instr = (X86Instruction)dasm.First(); var sActual = instr.ToString("A"); Assert.AreEqual(sExpected, sActual); }
public Sifter(string[] args) { this.cfgSvc = RekoConfigurationService.Load("reko/reko.config"); this.processInstr = new Action <byte[], MachineInstruction?>(ProcessInstruction); (this.arch, this.instrRenderer) = ProcessArgs(args); var baseAddress = Address.Ptr32(0x00000000); //$TODO allow customization? this.mem = new MemoryArea(baseAddress, new byte[100]); this.rdr = arch.CreateImageReader(mem, 0); this.dasm = arch.CreateDisassembler(rdr); this.progress = new Progress(); }
private long PerformanceTest_A32Dasm(IProcessorArchitecture arch, byte[] buf) { var mem = new MemoryArea(Address.Ptr32(0x00100000), buf); var rdr = arch.CreateImageReader(mem, mem.BaseAddress); var dasm = arch.CreateDisassembler(rdr); Stopwatch sw = new Stopwatch(); sw.Start(); foreach (var instr in dasm) { } sw.Stop(); var time = sw.ElapsedMilliseconds; return(time); }
public void DumpAssembler(LoadedImage image, Address addrStart, Address addrLast, TextWriter writer) { var dasm = arch.CreateDisassembler(arch.CreateImageReader(image, addrStart)); try { foreach (var instr in dasm) { if (instr.Address >= addrLast) { break; } if (!DumpAssemblerLine(image, instr, writer)) { break; } } } catch (Exception ex) { writer.WriteLine(ex.Message); writer.WriteLine(); } }
protected virtual IEnumerator <MachineInstruction> CreateDisassembler(IProcessorArchitecture arch, EndianImageReader rdr) { return(arch.CreateDisassembler(rdr).GetEnumerator()); }
protected virtual IEnumerator<MachineInstruction> CreateDisassembler(IProcessorArchitecture arch, ImageReader rdr) { return arch.CreateDisassembler(rdr).GetEnumerator(); }
private void InitializeRekoDisassembler() { this.rdr = arch.CreateImageReader(mem, 0); this.dasm = arch.CreateDisassembler(rdr); }