public void Cmasp_Do() { var addr = Address.SegPtr(0x0C20, 0); var proc = new Procedure("foo", null); var progaddr = new ProgramAddress(program, addr); var dc = mr.Stub <IDecompiler>(); var dcSvc = mr.Stub <IDecompilerService>(); var brSvc = mr.Stub <IProjectBrowserService>(); dcSvc.Decompiler = dc; sc.AddService <IDecompilerService>(dcSvc); sc.AddService <IProjectBrowserService>(brSvc); sc.AddService <IDecompilerShellUiService>(new FakeShellUiService()); dc.Expect(d => d.ScanProcedure(progaddr)).IgnoreArguments().Return(proc); brSvc.Expect(b => b.Reload()); mr.ReplayAll(); var locations = new[] { new ProgramAddress(program, addr) }; var cmd = new Cmd_MarkProcedures(sc, locations); cmd.DoIt(); mr.VerifyAll(); Assert.AreEqual(1, program.User.Procedures.Count); var uproc = program.User.Procedures.Values[0]; Assert.AreEqual("0C20:0000", uproc.Address); }
public void Cmasp_Do() { var addr = Address.SegPtr(0x0C20, 0); var proc = new Procedure(new FakeArchitecture(), "foo", addr, null); var progaddr = new ProgramAddress(program, addr); var dc = new Mock <IDecompiler>(); var dcSvc = new Mock <IDecompilerService>(); var brSvc = new Mock <IProjectBrowserService>(); dcSvc.Setup(d => d.Decompiler).Returns(dc.Object); sc.AddService <IDecompilerService>(dcSvc.Object); sc.AddService <IProjectBrowserService>(brSvc.Object); sc.AddService <IDecompilerShellUiService>(new FakeShellUiService()); dc.Setup(d => d.ScanProcedure(It.IsAny <ProgramAddress>())).Returns(proc).Verifiable(); brSvc.Setup(b => b.Reload()).Verifiable(); brSvc.Setup(b => b.CurrentProgram).Returns(program); var locations = new[] { new ProgramAddress(program, addr) }; var cmd = new Cmd_MarkProcedures(sc, locations); cmd.DoIt(); dc.VerifyAll(); brSvc.Verify(); Assert.AreEqual(1, program.User.Procedures.Count); var uproc = program.User.Procedures.Values[0]; Assert.AreEqual("0C20:0000", uproc.Address); }
public void MarkAndScanProcedure() { if (!TryGetSelectedAddressRange(out var addrRange)) { return; } var address = new ProgramAddress(program, addrRange.Begin); services.RequireService <ICommandFactory>().MarkProcedure(address).Do(); }
private void ModifyDeclaration() { var declText = declarationForm.TextBox.Text.Trim(); Procedure proc; if (!program.Procedures.TryGetValue(address, out proc)) { proc = null; } ProcedureBase_v1 sProc; GlobalDataItem_v2 parsedGlobal; string procName = null; string CSignature = null; if (TryParseSignature(declText, out sProc)) { procName = sProc.Name; CSignature = declText; } else if (UserSignatureBuilder.IsValidCIdentifier(declText) && (proc == null || proc.Name != declText)) { procName = declText; } else if (!editProcedure && TryParseGlobal(declText, out parsedGlobal)) { program.User.Procedures.Remove(address); program.ModifyUserGlobal( program.Architecture, address, parsedGlobal.DataType, parsedGlobal.Name ); } if (procName != null) { program.RemoveUserGlobal(address); var up = program.EnsureUserProcedure(address, procName); if (CSignature != null) { up.CSignature = CSignature; } if (proc != null) { proc.Name = procName; } else { var pAddr = new ProgramAddress(program, address); services.RequireService <ICommandFactory>().MarkProcedure(pAddr).Do(); } } }
public string RenderCode(ProgramAddress hit) { try { var dasm = hit.Program.CreateDisassembler(hit.Address); return(string.Join("; ", dasm.Take(4).Select(inst => inst.ToString().Replace('\t', ' ')))); } catch { return("<invalid>"); } }
/// <summary> /// Starts a scan at address <paramref name="addr"/> on the user's request. /// </summary> /// <param name="addr"></param> /// <returns>a ProcedureBase, because the target procedure may have been a thunk or /// an linked procedure the user has decreed not decompileable.</returns> public ProcedureBase ScanProcedure(ProgramAddress paddr) { if (scanner == null) //$TODO: it's unfortunate that we depend on the scanner of the Decompiler class. { scanner = CreateScanner(paddr.Program); } Procedure_v1 sProc; var procName = paddr.Program.User.Procedures.TryGetValue( paddr.Address, out sProc) ? sProc.Name : null; return(scanner.ScanProcedure(paddr.Address, procName, paddr.Program.Architecture.CreateProcessorState())); }
private ProcedureBase DoScanProcedure(ProgramAddress paddr, string sArch) { //$TODO: do this in a worker procedure. if (sArch == null) { return(null); } if (!paddr.Program.Architectures.TryGetValue(sArch, out var arch)) { return(null); } var proc = decSvc.Decompiler.ScanProcedure(paddr, arch); return(proc); }
public string RenderData(ProgramAddress hit) { var rdr = hit.Program.CreateImageReader(hit.Address); var sb = new StringBuilder(); int cb = 0; while (rdr.IsValid) { var ch = rdr.ReadByte(); if (ch == 0 || cb >= 16) { break; } sb.AppendFormat("{0:X2} ", (uint)ch); ++cb; } return(sb.ToString()); }
public string RenderString(ProgramAddress hit) { var rdr = hit.Program.CreateImageReader(hit.Address); var sb = new StringBuilder(); while (rdr.IsValid) { var ch = rdr.ReadByte(); if (ch == 0 || sb.Length > 80) { break; } sb.Append(0x20 <= ch && ch < 0x7F ? (char)ch : '.'); } return(sb.ToString()); }
private ProgramAddress GetLatAndLng(Address address, string description) { string houseNumber = address.HouseNumber; string street = address.Street; string city = address.City; string state = address.State; int zip = address.ZipCode; string country = "United States"; string fullAddress = houseNumber.ToString() + " " + street + " " + city + ", " + country + " " + state + " " + zip; ProgramAddress mapAddress = new ProgramAddress(); mapAddress.description = description; var locationService = new GoogleLocationService(); var point = locationService.GetLatLongFromAddress(fullAddress); mapAddress.lat = point.Latitude; mapAddress.lng = point.Longitude; return(mapAddress); }
// GET: Addresses public ActionResult Index(int?id) { var job = (from a in db.Jobs where a.JobId == id select a).FirstOrDefault(); ApplicationUser currentUser = System.Web.HttpContext.Current.GetOwinContext().GetUserManager <ApplicationUserManager>().FindById(System.Web.HttpContext.Current.User.Identity.GetUserId()); ProgramAddress userLoc = new ProgramAddress(); ProgramAddress businessLoc = new ProgramAddress(); userLoc = GetLatAndLng(currentUser.Address, "You Are Here!"); businessLoc.lat = job.Latitude; businessLoc.lng = job.Longitude; businessLoc.description = job.CompanyName; List <ProgramAddress> myAddresses = new List <ProgramAddress>(); myAddresses.Add(userLoc); myAddresses.Add(businessLoc); var model = new IndexViewModel { programmed = myAddresses }; return(View(model)); }
public ICommand MarkProcedure(ProgramAddress address) { return(new Cmd_MarkProcedures(services, new ProgramAddress[] { address })); }