private void BuildAddressTable() { var vectorBuilder = new VectorBuilder(null, dlg.Program, null); var addresses = new List<Address>(); Address addrTable; if (dlg.Program.Platform.TryParseAddress(dlg.JumpTableStartAddress.Text, out addrTable)) { var stride = TableStride(); var state = dlg.Program.Architecture.CreateProcessorState(); state.SetInstructionPointer(dlg.Instruction.Address); addresses = vectorBuilder.BuildTable(addrTable, stride * (int)dlg.EntryCount.Value, null, stride, state); } dlg.Entries.DataSource = addresses; dlg.Entries.SelectedIndex = addresses.Count - 1; }
public void Vb_CreateVector_ModifiesImageMap() { Given_Program(new byte[] { 0x10, 0x00, 0x01, 0x00, 0x11, 0x00, 0x01, 0x00, 0x12, 0x00, 0x01, 0x00, 0xCC, 0xCC, 0xCC, 0xCC, 0xC3, 0xC3, 0xC3, 0xCC, }); var scanner = mr.Stub<IScanner>(); scanner.Stub(s => s.CreateReader(program.Image.BaseAddress)) .Return(program.Image.CreateLeReader(0)); var state = mr.Stub<ProcessorState>(); mr.ReplayAll(); var vb = new VectorBuilder(scanner, program, new DirectedGraphImpl<object>()); var vector = vb.BuildTable(program.Image.BaseAddress, 12, null, 4, state); Assert.AreEqual(3, vector.Count); }
public UserIndirectJump GetResults() { var vb = new VectorBuilder(dlg.Services, dlg.Program, new DirectedGraphImpl<object>()); var stride = 4; //$TODO: get from dialog var entries = vb.BuildTable(dlg.VectorAddress, stride * (int)dlg.EntryCount.Value, null, stride, null); var table = new ImageMapVectorTable(dlg.VectorAddress, entries.ToArray(), 0); return new UserIndirectJump { Address = dlg.Instruction.Address, Table = table, IndexRegister = dlg.Program.Architecture.GetRegister(dlg.IndexRegister.SelectedIndex.ToString()) }; }