use of com.google.security.zynamics.binnavi.debug.models.processmanager.MemorySection in project binnavi by google.
the class CDebuggerSynchronizerTest method testMemmap.
@Test
public void testMemmap() {
final IFilledList<MemorySection> sections = new FilledList<MemorySection>();
sections.add(new MemorySection(new CAddress(100), new CAddress(200)));
sections.add(new MemorySection(new CAddress(300), new CAddress(400)));
debuggerSynchronizer.receivedEvent(new MemoryMapReply(0, 0, new MemoryMap(sections)));
assertEquals(0, listener.exception);
assertEquals(2, mockDebugger.getProcessManager().getMemoryMap().getNumberOfSections());
}
use of com.google.security.zynamics.binnavi.debug.models.processmanager.MemorySection in project binnavi by google.
the class CRegisterMenuProvider method getRegisterMenu.
@Override
public JPopupMenu getRegisterMenu(final int registerNumber) {
final IDebugger debugger = m_debugPerspectiveModel.getCurrentSelectedDebugger();
if (debugger == null) {
return null;
}
final JPopupMenu menu = new JPopupMenu();
final BigInteger value = m_dataProvider.getRegisterInformation(registerNumber).getValue();
menu.add(CActionProxy.proxy(new CCopyRegisterValueAction(value.toString(16).toUpperCase())));
final MemorySection section = ProcessHelpers.getSectionWith(debugger.getProcessManager().getMemoryMap(), new CAddress(value));
final JMenuItem gotoAddress = menu.add(CActionProxy.proxy(new CGotoOffsetAction(m_debugPerspectiveModel, new CAddress(value))));
gotoAddress.setEnabled(section != null);
if (containsAddress(m_debugPerspectiveModel.getGraphModel().getGraph().getRawView(), value.longValue())) {
menu.add(CActionProxy.proxy(new CZoomToAddressAction(m_debugPerspectiveModel.getGraphModel().getGraph(), new CAddress(value), debugger.getModule(new RelocatedAddress(new CAddress(value))))));
} else {
final IViewContainer container = m_debugPerspectiveModel.getGraphModel().getViewContainer();
menu.add(CActionProxy.proxy(new CSearchAction(m_debugPerspectiveModel.getGraphModel().getParent(), container, new CAddress(value))));
}
return menu;
}
use of com.google.security.zynamics.binnavi.debug.models.processmanager.MemorySection in project binnavi by google.
the class CStackMemoryProvider method getStartAddress.
@Override
public long getStartAddress() {
if (m_activeThread == null || m_activeThread.getRegisterValues().size() == 0 || m_debugger == null) {
return -1;
}
final BigInteger stackValue = getStackValue(m_activeThread.getRegisterValues());
if (stackValue == null) {
return -1;
}
final MemorySection section = m_debugger.getProcessManager().getMemoryMap().findOffset(stackValue);
if (section == null) {
if (m_debugger.isConnected()) {
return stackValue.and(BigInteger.valueOf(~0xFFF)).longValue();
} else {
return -1;
}
} else {
return section.getStart().toLong();
}
}
use of com.google.security.zynamics.binnavi.debug.models.processmanager.MemorySection in project binnavi by google.
the class CMemorySelectionFunctions method askMemoryRange.
/**
* Asks the user for a memory range and displays it afterwards.
*
* @param dlg Dialog where the user can select a range.
* @param debugPerspectiveModel Describes the debug GUI perspective where the refresh action takes
* place.
*/
public static void askMemoryRange(final CMemoryRangeDialog dlg, final CDebugPerspectiveModel debugPerspectiveModel) {
final IDebugger debugger = debugPerspectiveModel.getCurrentSelectedDebugger();
if (debugger == null) {
return;
}
dlg.setVisible(true);
final IAddress start = dlg.getStart();
final IAddress numberOfBytes = dlg.getBytes();
if (start != null && numberOfBytes != null) {
debugPerspectiveModel.setActiveMemoryAddress(start, true);
final ProcessManager pmanager = debugger.getProcessManager();
pmanager.setMemoryMap(new MemoryMap(new FilledList<MemorySection>()));
pmanager.getMemory().clear();
final ArrayList<MemorySection> sections = new ArrayList<MemorySection>();
sections.add(new MemorySection(start, new CAddress(start.toBigInteger().add(numberOfBytes.toBigInteger()).subtract(BigInteger.ONE))));
final MemoryMap map = new MemoryMap(sections);
pmanager.setMemoryMap(map);
}
}
use of com.google.security.zynamics.binnavi.debug.models.processmanager.MemorySection in project binnavi by google.
the class CModulesPanelFunctions method gotoModule.
/**
* Displays the beginning of a module in the memory viewer.
*
* @param parent Parent window used for dialogs.
* @param debugPerspectiveModel Debug perspective model that provides the active debugger.
* @param module The module to show in the memory viewer.
*/
public static void gotoModule(final Window parent, final CDebugPerspectiveModel debugPerspectiveModel, final MemoryModule module) {
Preconditions.checkNotNull(parent, "IE01462: Parent argument can not be null");
Preconditions.checkNotNull(debugPerspectiveModel, "IE01463: Debug perspective model argument can not be null");
Preconditions.checkNotNull(module, "IE01464: Module argument can not be null");
final IDebugger debugger = debugPerspectiveModel.getCurrentSelectedDebugger();
if (debugger == null) {
return;
}
final MemoryMap memoryMap = debugger.getProcessManager().getMemoryMap();
final MemorySection section = ProcessHelpers.getSectionWith(memoryMap, module.getBaseAddress().getAddress());
if (section == null) {
final String message = String.format("E00046: " + "Could not display module '%s' in the memory view", module.getName());
final String description = String.format("The module '%s' could not be displayed in the memory view because " + "the offset %s is not currently known to BinNavi. " + "Try refreshing the memory map to fix this issue.", module.getName(), module.getBaseAddress());
NaviErrorDialog.show(parent, message, description);
} else {
CMemoryFunctions.gotoOffset(debugPerspectiveModel, module.getBaseAddress().getAddress(), true);
}
}
Aggregations