Search in sources :

Example 6 with TraceRegister

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

the class PostgreSQLTracesLoader method loadTraceEvents.

/**
   * Loads the trace events of a trace list from the database.
   *
   * @param connection The connection to the database.
   * @param traceList The trace list whose events are loaded.
   * @param modules List of all modules stored in the database.
   *
   * @throws SQLException Thrown if the trace events could not be loaded.
   */
private static void loadTraceEvents(final CConnection connection, final TraceList traceList, final List<? extends INaviModule> modules) throws SQLException {
    final List<List<TraceRegister>> values = loadTraceEventValues(connection, traceList);
    final String query = "select tid, module_id, address, type from " + CTableNames.TRACE_EVENT_TABLE + " where trace_id = " + traceList.getId() + " order by position asc";
    final ResultSet resultSet = connection.executeQuery(query, true);
    int counter = 0;
    try {
        while (resultSet.next()) {
            final long tid = resultSet.getLong("tid");
            final int moduleId = resultSet.getInt("module_id");
            final INaviModule module = resultSet.wasNull() ? null : findModule(modules, moduleId);
            final BreakpointAddress address = new BreakpointAddress(module, new UnrelocatedAddress(PostgreSQLHelpers.loadAddress(resultSet, "address")));
            final int event = resultSet.getInt("type");
            traceList.addEvent(new TraceEvent(tid, address, TraceEventType.parseInt(event), values.isEmpty() ? new ArrayList<TraceRegister>() : values.get(counter)));
            counter++;
        }
    } finally {
        resultSet.close();
    }
}
Also used : 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) 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) BreakpointAddress(com.google.security.zynamics.binnavi.debug.models.breakpoints.BreakpointAddress) TraceEvent(com.google.security.zynamics.binnavi.debug.models.trace.TraceEvent)

Example 7 with TraceRegister

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

the class CEventValueTableModelTest method foo.

@Test
public void foo() {
    final CEventValueTableModel model = new CEventValueTableModel();
    final INaviModule mockModule = new MockModule();
    final TraceEvent event = 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, 06, 07 })));
    assertEquals(0, model.getRowCount());
    model.setEvent(event);
    assertEquals(1, model.getRowCount());
    assertEquals("eax", model.getValueAt(0, 0));
    assertEquals("00000123", model.getValueAt(0, 1));
    assertEquals("05 06 07", model.getValueAt(0, 2));
}
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) BreakpointAddress(com.google.security.zynamics.binnavi.debug.models.breakpoints.BreakpointAddress) CEventValueTableModel(com.google.security.zynamics.binnavi.Gui.Debug.EventLists.CEventValueTableModel) TraceEvent(com.google.security.zynamics.binnavi.debug.models.trace.TraceEvent) CAddress(com.google.security.zynamics.zylib.disassembly.CAddress) Test(org.junit.Test)

Example 8 with TraceRegister

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

the class CRegisterFilterExpression method evaluate.

@Override
public boolean evaluate(final CTraceEventWrapper element) {
    final ITraceEvent trace = element.unwrap();
    boolean returnValue = false;
    for (final TraceRegister register : trace.getRegisterValues()) {
        if ("any".equalsIgnoreCase(m_register) || register.getName().equalsIgnoreCase(m_register)) {
            returnValue |= evaluateExpression(m_predicate, register, m_value);
        }
    }
    return returnValue;
}
Also used : TraceRegister(com.google.security.zynamics.binnavi.debug.models.trace.TraceRegister) ITraceEvent(com.google.security.zynamics.binnavi.debug.models.trace.interfaces.ITraceEvent)

Example 9 with TraceRegister

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

the class PostgreSQLTraceFunctions method saveEventValues.

/**
   * Saves the event values of a trace.
   *
   * @param connection Connection to the database.
   * @param trace Trace whose event values are saved.
   *
   * @throws CouldntSaveDataException Thrown if the data could not be saved.
   */
public static void saveEventValues(final CConnection connection, final TraceList trace) throws CouldntSaveDataException {
    Preconditions.checkNotNull(connection, "IE02412: connection argument can not be null");
    Preconditions.checkNotNull(trace, "IE02413: trace argument can not be null");
    final String query = "INSERT INTO " + CTableNames.TRACE_EVENT_VALUES_TABLE + "(trace_id, position, register_name, register_value, memory_value) VALUES " + "(?, ?, ?, ?, ?)";
    try {
        final PreparedStatement preparedStatement = connection.getConnection().prepareStatement(query);
        int position = 0;
        for (final ITraceEvent traceEvent : trace) {
            for (final TraceRegister register : traceEvent.getRegisterValues()) {
                preparedStatement.setInt(1, trace.getId());
                preparedStatement.setInt(2, position);
                preparedStatement.setString(3, register.getName());
                preparedStatement.setLong(4, register.getValue().toLong());
                preparedStatement.setBytes(5, register.getMemory());
                preparedStatement.addBatch();
            }
            ++position;
        }
        preparedStatement.executeBatch();
        preparedStatement.close();
    } catch (final SQLException exception) {
        throw new CouldntSaveDataException(exception);
    }
}
Also used : SQLException(java.sql.SQLException) TraceRegister(com.google.security.zynamics.binnavi.debug.models.trace.TraceRegister) CouldntSaveDataException(com.google.security.zynamics.binnavi.Database.Exceptions.CouldntSaveDataException) PreparedStatement(java.sql.PreparedStatement) ITraceEvent(com.google.security.zynamics.binnavi.debug.models.trace.interfaces.ITraceEvent)

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