use of com.google.security.zynamics.binnavi.disassembly.types.TypeInstanceContainer in project binnavi by google.
the class InstructionConverter method generateTree.
/**
* Converts a raw operand tree into a proper operand tree.
*
* @param rawTree The raw operand tree.
* @param provider The connection to the database.
* @param module
*
* @return The proper operand tree.
*/
private static COperandTree generateTree(final OperandTree rawTree, final SQLProvider provider, final INaviModule module) {
final ArrayList<COperandTreeNode> realNodes = new ArrayList<COperandTreeNode>();
final HashMap<COperandTreeNode, OperandTreeNode> realToRawMapping = new HashMap<COperandTreeNode, OperandTreeNode>();
final HashMap<Integer, COperandTreeNode> idToRealMapping = new HashMap<Integer, COperandTreeNode>();
COperandTreeNode root = null;
final TypeManager typeManager = module.getTypeManager();
final TypeInstanceContainer instanceContainer = module.getContent().getTypeInstanceContainer();
for (final OperandTreeNode rawNode : rawTree.getNodes()) {
final COperandTreeNode node = new COperandTreeNode(rawNode.getId(), rawNode.getType(), rawNode.getValue(), rawNode.getReplacement(), rawNode.getReferences(), provider, typeManager, instanceContainer);
if (rawNode.getTypeSubstitution() != null) {
typeManager.initializeTypeSubstitution(node, rawNode.getTypeSubstitution());
}
if (rawNode.getTypeInstanceId() != null) {
instanceContainer.initializeTypeInstanceReference(rawNode.getAddress(), rawNode.getPosition(), rawNode.getId(), node);
}
realToRawMapping.put(node, rawNode);
idToRealMapping.put(rawNode.getId(), node);
if (rawNode.getParentId() == null) {
root = node;
}
realNodes.add(node);
}
for (final COperandTreeNode realNode : realNodes) {
// Link the real nodes here.
// To link two real nodes, it is necessary to know
// which node is the parent and which node is the
// child.
final OperandTreeNode rawNode = realToRawMapping.get(realNode);
final Integer parentId = rawNode.getParentId();
if (parentId == null) {
continue;
}
final COperandTreeNode realParent = idToRealMapping.get(parentId);
COperandTreeNode.link(realParent, realNode);
}
return new COperandTree(root, provider, typeManager, instanceContainer);
}
use of com.google.security.zynamics.binnavi.disassembly.types.TypeInstanceContainer in project binnavi by google.
the class COperandTreeNode method close.
@Override
public void close() {
if (replacement != null) {
replacement.close();
replacement.removeListener(listener);
}
if (substitution != null) {
operandTree.getInstruction().getModule().getTypeManager().removeTypeSubstitutionInstance(substitution);
}
if (instanceReferences != null && !instanceReferences.isEmpty()) {
final TypeInstanceContainer container = operandTree.getInstruction().getModule().getContent().getTypeInstanceContainer();
for (final TypeInstanceReference reference : instanceReferences) {
container.deactivateTypeInstanceReference(reference);
}
}
}
use of com.google.security.zynamics.binnavi.disassembly.types.TypeInstanceContainer in project binnavi by google.
the class PostgreSQLTypeInstancesNotificationParserTest method setUp.
@Before
public void setUp() throws NumberFormatException, CouldntSaveDataException, CouldntLoadDataException {
view = MockViewGenerator.generate(provider, module, function);
baseType = module.getTypeManager().getTypes().get(0);
final Section section = module.getContent().getSections().createSection("TEST_SECTION", new CAddress("01000000", 16), new CAddress("0100FFFF", 16), SectionPermission.READ_WRITE_EXECUTE, null);
final TypeInstanceContainer container = module.getContent().getTypeInstanceContainer();
instance = container.createInstance("TEST_INSTANCE", null, baseType, section, new Long("11143"));
final CCodeNode node = view.getBasicBlocks().get(0);
final INaviInstruction instruction = node.getInstructions().iterator().next();
final INaviOperandTreeNode operandNode = instruction.getOperands().get(0).getNodes().get(0);
reference = container.createReference(instruction.getAddress(), 0, operandNode, instance, view);
assertNotNull(reference);
}
use of com.google.security.zynamics.binnavi.disassembly.types.TypeInstanceContainer 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.TypeInstanceContainer in project binnavi by google.
the class CPostgreSQLModuleContentTest method testCModuleContentConstructor.
@Test
public void testCModuleContentConstructor() throws LoadCancelledException, CouldntLoadDataException {
final CModule module = (CModule) getDatabase().getContent().getModules().get(0);
module.load();
final ListenerProvider<IModuleListener> listeners = new ListenerProvider<IModuleListener>();
final CCallgraph callgraph = module.getContent().getNativeCallgraph();
final IFilledList<INaviFunction> functions = new FilledList<INaviFunction>();
functions.add(module.getContent().getFunctionContainer().getFunctions().get(0));
final ICallgraphView nativeCallgraph = module.getContent().getViewContainer().getNativeCallgraphView();
final ImmutableList<IFlowgraphView> nativeFlowgraphs = module.getContent().getViewContainer().getNativeFlowgraphViews();
final List<INaviView> customViews = new ArrayList<INaviView>();
final ImmutableBiMap<INaviView, INaviFunction> viewFunctionMap = new ImmutableBiMap.Builder<INaviView, INaviFunction>().build();
new Pair<HashMap<INaviView, INaviFunction>, HashMap<INaviFunction, INaviView>>(null, null);
final IFilledList<TraceList> traces = new FilledList<TraceList>();
final SectionContainer sections = new SectionContainer(new SectionContainerBackend(getProvider(), module));
final TypeInstanceContainer instances = new TypeInstanceContainer(new TypeInstanceContainerBackend(getProvider(), module, module.getTypeManager(), sections), getProvider());
final CModuleContent moduleContent1 = new CModuleContent(module, getProvider(), listeners, callgraph, functions, nativeCallgraph, nativeFlowgraphs, customViews, viewFunctionMap, traces, sections, instances);
assertNotNull(moduleContent1);
try {
@SuppressWarnings("unused") final CModuleContent moduleContent = new CModuleContent(null, null, null, null, null, null, null, null, null, null, sections, instances);
fail();
} catch (final NullPointerException e) {
}
try {
@SuppressWarnings("unused") final CModuleContent moduleContent = new CModuleContent(module, null, null, null, null, null, null, null, null, null, null, null);
fail();
} catch (final NullPointerException e) {
}
try {
@SuppressWarnings("unused") final CModuleContent moduleContent = new CModuleContent(module, getProvider(), null, null, null, null, null, null, null, null, null, null);
fail();
} catch (final NullPointerException e) {
}
try {
@SuppressWarnings("unused") final CModuleContent moduleContent = new CModuleContent(module, getProvider(), listeners, null, null, null, null, null, null, null, null, null);
fail();
} catch (final NullPointerException e) {
}
try {
@SuppressWarnings("unused") final CModuleContent moduleContent = new CModuleContent(module, getProvider(), listeners, callgraph, null, null, null, null, null, null, null, null);
fail();
} catch (final NullPointerException e) {
}
try {
@SuppressWarnings("unused") final CModuleContent moduleContent = new CModuleContent(module, getProvider(), listeners, callgraph, functions, null, null, null, null, null, null, null);
fail();
} catch (final NullPointerException e) {
}
try {
@SuppressWarnings("unused") final CModuleContent moduleContent = new CModuleContent(module, getProvider(), listeners, callgraph, functions, nativeCallgraph, null, null, null, null, null, null);
fail();
} catch (final NullPointerException e) {
}
try {
@SuppressWarnings("unused") final CModuleContent moduleContent = new CModuleContent(module, getProvider(), listeners, callgraph, functions, nativeCallgraph, nativeFlowgraphs, null, null, null, null, null);
fail();
} catch (final NullPointerException e) {
}
try {
@SuppressWarnings("unused") final CModuleContent moduleContent = new CModuleContent(module, getProvider(), listeners, callgraph, functions, nativeCallgraph, nativeFlowgraphs, customViews, null, null, null, null);
fail();
} catch (final NullPointerException e) {
}
try {
@SuppressWarnings("unused") final CModuleContent moduleContent = new CModuleContent(module, getProvider(), listeners, callgraph, functions, nativeCallgraph, nativeFlowgraphs, customViews, viewFunctionMap, null, null, null);
fail();
} catch (final NullPointerException e) {
}
try {
@SuppressWarnings("unused") final CModuleContent moduleContent = new CModuleContent(module, getProvider(), listeners, callgraph, functions, nativeCallgraph, nativeFlowgraphs, customViews, viewFunctionMap, traces, null, null);
fail();
} catch (final NullPointerException e) {
}
}
Aggregations