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();
}
}
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));
}
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;
}
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);
}
}
Aggregations