Search in sources :

Example 1 with TraceRegister

use of com.google.security.zynamics.binnavi.debug.models.trace.TraceRegister in project binnavi by google.

the class PostgreSQLTracesLoader method loadTraceEventValues.

/**
   * Loads the event values of a trace from the database.
   *
   * @param connection Connection to the database.
   * @param traceList The trace to load.
   *
   * @return The event values.
   *
   * @throws SQLException Thrown if the values could not be loaded.
   */
private static List<List<TraceRegister>> loadTraceEventValues(final CConnection connection, final TraceList traceList) throws SQLException {
    final List<List<TraceRegister>> values = new ArrayList<>();
    final String query = "select position, register_name, register_value, memory_value from " + CTableNames.TRACE_EVENT_VALUES_TABLE + " where trace_id = " + traceList.getId() + " order by position asc";
    final ResultSet resultSet = connection.executeQuery(query, true);
    int currentPosition = -1;
    try {
        List<TraceRegister> registers = new ArrayList<TraceRegister>();
        while (resultSet.next()) {
            final int position = resultSet.getInt("position");
            if (position != currentPosition) {
                if (!registers.isEmpty()) {
                    values.add(Lists.newArrayList(registers));
                    registers = new FilledList<TraceRegister>();
                }
                currentPosition = position;
            }
            final String name = PostgreSQLHelpers.readString(resultSet, "register_name");
            final long value = resultSet.getLong("register_value");
            final byte[] memory = resultSet.getBytes("memory_value");
            registers.add(new TraceRegister(name, new CAddress(value), memory));
        }
        if (!registers.isEmpty()) {
            values.add(Lists.newArrayList(registers));
        }
    } finally {
        resultSet.close();
    }
    return values;
}
Also used : TraceRegister(com.google.security.zynamics.binnavi.debug.models.trace.TraceRegister) ArrayList(java.util.ArrayList) ResultSet(java.sql.ResultSet) FilledList(com.google.security.zynamics.zylib.types.lists.FilledList) IFilledList(com.google.security.zynamics.zylib.types.lists.IFilledList) TraceList(com.google.security.zynamics.binnavi.debug.models.trace.TraceList) ArrayList(java.util.ArrayList) List(java.util.List) CAddress(com.google.security.zynamics.zylib.disassembly.CAddress)

Example 2 with TraceRegister

use of com.google.security.zynamics.binnavi.debug.models.trace.TraceRegister in project binnavi by google.

the class PostgreSQLProviderTest method testTraceFunctionsSave1.

@Test
public void testTraceFunctionsSave1() throws CouldntLoadDataException, LoadCancelledException, CouldntSaveDataException {
    final INaviProject project = getProvider().createProject("SOME_PROJECT");
    getProvider().createTrace(project, "SOME_TRACE", "SOME_TRACE_DESCRIPTION");
    project.load();
    final TraceList trace = project.getContent().getTraces().get(0);
    final INaviModule module = getProvider().loadModules().get(0);
    module.load();
    final long tid = 0x1L;
    final UnrelocatedAddress address2 = new UnrelocatedAddress(new CAddress(0x1234));
    final BreakpointAddress address = new BreakpointAddress(module, address2);
    final TraceEventType type = TraceEventType.ECHO_BREAKPOINT;
    final List<TraceRegister> values = new ArrayList<>();
    final ITraceEvent event = new TraceEvent(tid, address, type, values);
    trace.addEvent(event);
    trace.setDescription("burzelbarf");
    PostgreSQLTraceFunctions.save((AbstractSQLProvider) getProvider(), trace);
    project.close();
    INaviProject project2 = null;
    for (final INaviProject cProject : getProvider().loadProjects()) {
        if (cProject.getConfiguration().getId() == project.getConfiguration().getId()) {
            project2 = cProject;
        }
    }
    getProvider().createTrace(project2, "SOME_TRACE_2", "SOME_TRACE_DESCRIPTION_2");
    project2.load();
    final TraceList trace2 = project2.getContent().getTraces().get(0);
    assertEquals("burzelbarf", trace2.getDescription());
}
Also used : TraceEventType(com.google.security.zynamics.binnavi.debug.models.trace.TraceEventType) ArrayList(java.util.ArrayList) CAddress(com.google.security.zynamics.zylib.disassembly.CAddress) INaviProject(com.google.security.zynamics.binnavi.disassembly.INaviProject) INaviModule(com.google.security.zynamics.binnavi.disassembly.INaviModule) UnrelocatedAddress(com.google.security.zynamics.binnavi.disassembly.UnrelocatedAddress) TraceRegister(com.google.security.zynamics.binnavi.debug.models.trace.TraceRegister) TraceList(com.google.security.zynamics.binnavi.debug.models.trace.TraceList) BreakpointAddress(com.google.security.zynamics.binnavi.debug.models.breakpoints.BreakpointAddress) ITraceEvent(com.google.security.zynamics.binnavi.debug.models.trace.interfaces.ITraceEvent) ITraceEvent(com.google.security.zynamics.binnavi.debug.models.trace.interfaces.ITraceEvent) TraceEvent(com.google.security.zynamics.binnavi.debug.models.trace.TraceEvent) ExpensiveBaseTest(com.google.security.zynamics.binnavi.disassembly.types.ExpensiveBaseTest) Test(org.junit.Test)

Example 3 with TraceRegister

use of com.google.security.zynamics.binnavi.debug.models.trace.TraceRegister in project binnavi by google.

the class CEventTableModelTest method testSimple.

/**
   * General test whether the model is working as expected.
   *
   * @throws RecognitionException
   */
@Test
public void testSimple() throws RecognitionException {
    final INaviModule mockModule = new MockModule();
    final INaviModule mockModule2 = new MockModule(true);
    final INaviModule mockModule3 = new MockModule();
    final CEventTableModel model = new CEventTableModel();
    final TraceList list = new TraceList(1, "", "", new MockSqlProvider());
    list.addEvent(new TraceEvent(1, new BreakpointAddress(mockModule, new UnrelocatedAddress(new CAddress(0x123))), TraceEventType.REGULAR_BREAKPOINT, Lists.newArrayList(new TraceRegister("eax", new CAddress(0x123), new byte[] { 05 }))));
    list.addEvent(new TraceEvent(1, new BreakpointAddress(mockModule2, new UnrelocatedAddress(new CAddress(0x124))), TraceEventType.REGULAR_BREAKPOINT, Lists.newArrayList(new TraceRegister("eax", new CAddress(0x123), new byte[] { 06 }))));
    list.addEvent(new TraceEvent(1, new BreakpointAddress(mockModule3, new UnrelocatedAddress(new CAddress(0x125))), TraceEventType.REGULAR_BREAKPOINT, Lists.newArrayList(new TraceRegister("eax", new CAddress(0x123), new byte[] { 07, 05 }))));
    assertEquals(0, model.getRowCount());
    model.setEventList(list);
    assertEquals(3, model.getRowCount());
    final IFilter<ITraceEvent> filter = new CTraceFilterCreator().createFilter("mem == 05");
    model.setFilter(filter);
    assertEquals(2, model.getRowCount());
    assertEquals(2, model.getEvents().size());
    assertEquals(0x123, model.getEvents().get(0).getOffset().getAddress().getAddress().toLong());
    assertEquals(0x125, model.getEvents().get(1).getOffset().getAddress().getAddress().toLong());
    model.setFilter(null);
    assertEquals(3, model.getRowCount());
    for (int i = 0; i < model.getRowCount(); i++) {
        for (int j = 0; j < model.getColumnCount(); j++) {
            model.getValueAt(i, j);
        }
    }
}
Also used : CTraceFilterCreator(com.google.security.zynamics.binnavi.Gui.Debug.EventLists.CTraceFilterCreator) CEventTableModel(com.google.security.zynamics.binnavi.Gui.Debug.EventLists.CEventTableModel) CAddress(com.google.security.zynamics.zylib.disassembly.CAddress) INaviModule(com.google.security.zynamics.binnavi.disassembly.INaviModule) MockModule(com.google.security.zynamics.binnavi.disassembly.Modules.MockModule) UnrelocatedAddress(com.google.security.zynamics.binnavi.disassembly.UnrelocatedAddress) MockSqlProvider(com.google.security.zynamics.binnavi.Database.MockClasses.MockSqlProvider) TraceRegister(com.google.security.zynamics.binnavi.debug.models.trace.TraceRegister) TraceList(com.google.security.zynamics.binnavi.debug.models.trace.TraceList) BreakpointAddress(com.google.security.zynamics.binnavi.debug.models.breakpoints.BreakpointAddress) ITraceEvent(com.google.security.zynamics.binnavi.debug.models.trace.interfaces.ITraceEvent) TraceEvent(com.google.security.zynamics.binnavi.debug.models.trace.TraceEvent) ITraceEvent(com.google.security.zynamics.binnavi.debug.models.trace.interfaces.ITraceEvent) Test(org.junit.Test)

Example 4 with TraceRegister

use of com.google.security.zynamics.binnavi.debug.models.trace.TraceRegister in project binnavi by google.

the class CTraceFilterCreatorTest method test.

@Test
public void test() throws RecognitionException {
    final INaviModule mockModule = new MockModule();
    final INaviModule mockModule2 = new MockModule(true);
    final INaviModule mockModule3 = new MockModule();
    final List<ITraceEvent> events = new ArrayList<ITraceEvent>();
    final TraceEvent event1 = new TraceEvent(77, new BreakpointAddress(mockModule, new UnrelocatedAddress(new CAddress(0x123))), TraceEventType.REGULAR_BREAKPOINT, Lists.newArrayList(new TraceRegister("eax", new CAddress(0x123), new byte[] { 05 })));
    final TraceEvent event2 = new TraceEvent(88, new BreakpointAddress(mockModule2, new UnrelocatedAddress(new CAddress(0x124))), TraceEventType.REGULAR_BREAKPOINT, Lists.newArrayList(new TraceRegister("eax", new CAddress(0x123), new byte[] { 06 })));
    final TraceEvent event3 = new TraceEvent(99, new BreakpointAddress(mockModule3, new UnrelocatedAddress(new CAddress(0x125))), TraceEventType.REGULAR_BREAKPOINT, Lists.newArrayList(new TraceRegister("eax", new CAddress(0x123), new byte[] { 07, 05 })));
    events.add(event1);
    events.add(event2);
    events.add(event3);
    final CTraceFilterCreator creator = new CTraceFilterCreator();
    final IFilter<ITraceEvent> defaultFilter = creator.createFilter("99");
    assertEquals(1, defaultFilter.get(events).size());
    assertEquals(event3, defaultFilter.get(events).get(0));
    final IFilter<ITraceEvent> memoryFilter = creator.createFilter("mem == 06");
    assertEquals(1, memoryFilter.get(events).size());
    assertEquals(event2, memoryFilter.get(events).get(0));
    final IFilter<ITraceEvent> registerFilter = creator.createFilter("eax == 291");
    assertEquals(3, registerFilter.get(events).size());
}
Also used : INaviModule(com.google.security.zynamics.binnavi.disassembly.INaviModule) MockModule(com.google.security.zynamics.binnavi.disassembly.Modules.MockModule) UnrelocatedAddress(com.google.security.zynamics.binnavi.disassembly.UnrelocatedAddress) TraceRegister(com.google.security.zynamics.binnavi.debug.models.trace.TraceRegister) ArrayList(java.util.ArrayList) CTraceFilterCreator(com.google.security.zynamics.binnavi.Gui.Debug.EventLists.CTraceFilterCreator) BreakpointAddress(com.google.security.zynamics.binnavi.debug.models.breakpoints.BreakpointAddress) ITraceEvent(com.google.security.zynamics.binnavi.debug.models.trace.interfaces.ITraceEvent) ITraceEvent(com.google.security.zynamics.binnavi.debug.models.trace.interfaces.ITraceEvent) TraceEvent(com.google.security.zynamics.binnavi.debug.models.trace.TraceEvent) CAddress(com.google.security.zynamics.zylib.disassembly.CAddress) Test(org.junit.Test)

Example 5 with TraceRegister

use of com.google.security.zynamics.binnavi.debug.models.trace.TraceRegister in project binnavi by google.

the class CTraceFilterCreatorTest method testAlternativeInput.

@Test
public void testAlternativeInput() throws RecognitionException {
    final INaviModule mockModule = new MockModule();
    final INaviModule mockModule2 = new MockModule(true);
    final INaviModule mockModule3 = new MockModule();
    final List<ITraceEvent> events = new ArrayList<ITraceEvent>();
    final TraceEvent event1 = new TraceEvent(77, new BreakpointAddress(mockModule, new UnrelocatedAddress(new CAddress(0x123))), TraceEventType.REGULAR_BREAKPOINT, Lists.newArrayList(new TraceRegister("eax", new CAddress(0x123), new byte[] { 05 })));
    final TraceEvent event2 = new TraceEvent(88, new BreakpointAddress(mockModule2, new UnrelocatedAddress(new CAddress(0x124))), TraceEventType.REGULAR_BREAKPOINT, Lists.newArrayList(new TraceRegister("eax", new CAddress(0x123), new byte[] { 06 })));
    final TraceEvent event3 = new TraceEvent(99, new BreakpointAddress(mockModule3, new UnrelocatedAddress(new CAddress(0x125))), TraceEventType.REGULAR_BREAKPOINT, Lists.newArrayList(new TraceRegister("eax", new CAddress(0x123), new byte[] { 07, 05 })));
    events.add(event1);
    events.add(event2);
    events.add(event3);
    final CTraceFilterCreator creator = new CTraceFilterCreator();
    final IFilter<ITraceEvent> memoryFilter = creator.createFilter("mem == 6");
    assertEquals(1, memoryFilter.get(events).size());
    assertEquals(event2, memoryFilter.get(events).get(0));
    final IFilter<ITraceEvent> registerFilter = creator.createFilter("eax == 0x123");
    assertEquals(3, registerFilter.get(events).size());
    final IFilter<ITraceEvent> brokenRegisterFilter = creator.createFilter("eax == 0x123111111111111111111111111111");
    assertEquals(0, brokenRegisterFilter.get(events).size());
}
Also used : INaviModule(com.google.security.zynamics.binnavi.disassembly.INaviModule) MockModule(com.google.security.zynamics.binnavi.disassembly.Modules.MockModule) UnrelocatedAddress(com.google.security.zynamics.binnavi.disassembly.UnrelocatedAddress) TraceRegister(com.google.security.zynamics.binnavi.debug.models.trace.TraceRegister) ArrayList(java.util.ArrayList) CTraceFilterCreator(com.google.security.zynamics.binnavi.Gui.Debug.EventLists.CTraceFilterCreator) BreakpointAddress(com.google.security.zynamics.binnavi.debug.models.breakpoints.BreakpointAddress) ITraceEvent(com.google.security.zynamics.binnavi.debug.models.trace.interfaces.ITraceEvent) ITraceEvent(com.google.security.zynamics.binnavi.debug.models.trace.interfaces.ITraceEvent) TraceEvent(com.google.security.zynamics.binnavi.debug.models.trace.TraceEvent) CAddress(com.google.security.zynamics.zylib.disassembly.CAddress) Test(org.junit.Test)

Aggregations

TraceRegister (com.google.security.zynamics.binnavi.debug.models.trace.TraceRegister)9 BreakpointAddress (com.google.security.zynamics.binnavi.debug.models.breakpoints.BreakpointAddress)6 TraceEvent (com.google.security.zynamics.binnavi.debug.models.trace.TraceEvent)6 ITraceEvent (com.google.security.zynamics.binnavi.debug.models.trace.interfaces.ITraceEvent)6 INaviModule (com.google.security.zynamics.binnavi.disassembly.INaviModule)6 UnrelocatedAddress (com.google.security.zynamics.binnavi.disassembly.UnrelocatedAddress)6 CAddress (com.google.security.zynamics.zylib.disassembly.CAddress)6 ArrayList (java.util.ArrayList)5 Test (org.junit.Test)5 TraceList (com.google.security.zynamics.binnavi.debug.models.trace.TraceList)4 MockModule (com.google.security.zynamics.binnavi.disassembly.Modules.MockModule)4 CTraceFilterCreator (com.google.security.zynamics.binnavi.Gui.Debug.EventLists.CTraceFilterCreator)3 FilledList (com.google.security.zynamics.zylib.types.lists.FilledList)2 IFilledList (com.google.security.zynamics.zylib.types.lists.IFilledList)2 ResultSet (java.sql.ResultSet)2 List (java.util.List)2 CouldntSaveDataException (com.google.security.zynamics.binnavi.Database.Exceptions.CouldntSaveDataException)1 MockSqlProvider (com.google.security.zynamics.binnavi.Database.MockClasses.MockSqlProvider)1 CEventTableModel (com.google.security.zynamics.binnavi.Gui.Debug.EventLists.CEventTableModel)1 CEventValueTableModel (com.google.security.zynamics.binnavi.Gui.Debug.EventLists.CEventValueTableModel)1