use of com.google.security.zynamics.binnavi.disassembly.types.TypeInstanceReference in project binnavi by google.
the class TypeInstanceTableDatamodel method getTypeInstanceReference.
public TypeInstanceReference getTypeInstanceReference(int row, int line) {
TypeInstance typeInstance = typesToDisplay.get(row);
List<TypeInstanceReference> references = typeContainer.getReferences(typeInstance);
if (line < references.size()) {
return references.get(line);
}
return null;
}
use of com.google.security.zynamics.binnavi.disassembly.types.TypeInstanceReference in project binnavi by google.
the class PostgreSQLTypeInstancesNotificationParser method informExpressionTypeInstanceNotification.
/**
* This function informs the {@link TypeInstanceContainer} about changes related to expression
* type instances also known as cross references for type instances.
*
* @param container The {@link TypeInstancesNotificationContainer} holding the parsed information.
* @param provider The {@link SQLProvider} used to access the database.
* @throws CouldntLoadDataException
*/
private void informExpressionTypeInstanceNotification(final TypeInstancesNotificationContainer container, final SQLProvider provider) throws CouldntLoadDataException {
final TypeInstanceContainer typeContainer = provider.findModule(container.getModuleId()).getContent().getTypeInstanceContainer();
if (container.getDatabaseOperation().equals("INSERT")) {
final TypeInstanceReference reference = typeContainer.loadInstanceReference(container.getTypeInstanceId(), container.getAddress().get(), container.getPosition().get(), container.getExpressionId().get());
final INaviInstruction instruction = InstructionCache.get(provider).getInstructionByAddress(reference.getAddress(), reference.getTypeInstance().getModule().getConfiguration().getId());
if (instruction != null) {
final INaviOperandTree operandTree = instruction.getOperands().get(reference.getPosition());
final INaviOperandTreeNode root = operandTree.getRootNode();
final OperandOrderIterator iterator = new OperandOrderIterator(root);
while (iterator.next()) {
final INaviOperandTreeNode currentNode = (INaviOperandTreeNode) iterator.current();
if (currentNode.getId() == container.getExpressionId().get()) {
typeContainer.initializeTypeInstanceReference(reference.getAddress(), reference.getPosition(), container.getTypeInstanceId(), currentNode);
break;
}
}
}
} else if (container.getDatabaseOperation().equals("UPDATE")) {
// currently not be possible at all.
} else if (container.getDatabaseOperation().equals("DELETE")) {
typeContainer.deleteReference(container.getTypeInstanceId(), container.getAddress().get(), container.getPosition().get(), container.getExpressionId().get());
} else {
throw new IllegalStateException("Error: the database operation " + container.getDatabaseOperation() + " is currently not supported.");
}
}
use of com.google.security.zynamics.binnavi.disassembly.types.TypeInstanceReference in project binnavi by google.
the class PostgreSQLTypeInstanceFunctionsTests method loadSingleTypeInstanceReference6.
@Test
public void loadSingleTypeInstanceReference6() throws CouldntLoadDataException, LoadCancelledException, CPartialLoadException {
module.load();
for (final INaviView view : module.getContent().getViewContainer().getViews().subList(10, 20)) {
view.load();
final TypeInstanceContainer container = module.getContent().getTypeInstanceContainer();
for (final TypeInstance typeInstance : container.getTypeInstances()) {
for (final TypeInstanceReference reference : container.getReferences(typeInstance)) {
if (reference.getTreeNode().isPresent()) {
final RawTypeInstanceReference rawReference = provider.loadTypeInstanceReference(module, typeInstance.getId(), reference.getAddress().toBigInteger(), reference.getPosition(), reference.getTreeNode().get().getId());
Assert.assertEquals(reference.getAddress(), rawReference.getAddress());
}
}
}
view.close();
}
}
use of com.google.security.zynamics.binnavi.disassembly.types.TypeInstanceReference in project binnavi by google.
the class PostgreSQLTypeInstanceFunctionsTests method deleteTypeInstanceReferenceTest5.
@Test
public void deleteTypeInstanceReferenceTest5() throws CouldntDeleteException, CouldntLoadDataException, LoadCancelledException, CPartialLoadException, CouldntSaveDataException {
module.load();
final TypeInstance typeInstance = module.getContent().getTypeInstanceContainer().getTypeInstances().get(0);
final TypeInstanceAddress address1 = typeInstance.getAddress();
final INaviFunction function = module.getContent().getFunctionContainer().getFunction(new CAddress("1001929", 16));
final INaviView view = module.getContent().getViewContainer().getView(function);
view.load();
final INaviInstruction instruction = view.getBasicBlocks().get(2).getInstructions().iterator().next();
Assert.assertNotNull(typeInstance);
provider.createTypeInstanceReference(typeInstance.getModule().getConfiguration().getId(), instruction.getAddress().toLong(), instruction.getOperandPosition(instruction.getOperands().get(1)), instruction.getOperands().get(0).getNodes().get(0).getId(), typeInstance.getId());
view.close();
module.close();
module.load();
view.load();
final TypeInstance typeInstance2 = module.getContent().getTypeInstanceContainer().getTypeInstance(typeInstance.getAddress());
Assert.assertEquals(address1, typeInstance2.getAddress());
final List<TypeInstanceReference> references = module.getContent().getTypeInstanceContainer().getReferences(typeInstance2);
Assert.assertTrue(!references.isEmpty());
final TypeInstanceReference reference = Iterables.find(references, new Predicate<TypeInstanceReference>() {
@Override
public boolean apply(final TypeInstanceReference reference) {
return reference.getAddress().equals(instruction.getAddress());
}
});
Assert.assertNotNull(reference);
provider.deleteTypeInstanceReference(module.getConfiguration().getId(), reference.getAddress().toBigInteger(), reference.getPosition(), reference.getTreeNode().get().getId());
}
Aggregations