Search in sources :

Example 41 with INaviInstruction

use of com.google.security.zynamics.binnavi.disassembly.INaviInstruction in project binnavi by google.

the class CResultColorTest method testSecond.

@Test
public void testSecond() throws InternalTranslationException {
    final MockSqlProvider mockProvider = new MockSqlProvider();
    final MockModule mockModule = new MockModule(mockProvider);
    // str 6, , t0
    final COperandTreeNode rootNode1 = new COperandTreeNode(-1, IOperandTree.NODE_TYPE_SIZE_PREFIX_ID, "b4", null, new ArrayList<IReference>(), mockProvider, mockModule.getTypeManager(), mockModule.getContent().getTypeInstanceContainer());
    final COperandTreeNode childNode1 = new COperandTreeNode(-1, IOperandTree.NODE_TYPE_IMMEDIATE_INT_ID, "6", null, new ArrayList<IReference>(), mockProvider, mockModule.getTypeManager(), mockModule.getContent().getTypeInstanceContainer());
    COperandTreeNode.link(rootNode1, childNode1);
    final COperandTreeNode rootNode2 = new COperandTreeNode(-1, IOperandTree.NODE_TYPE_SIZE_PREFIX_ID, "b4", null, new ArrayList<IReference>(), mockProvider, mockModule.getTypeManager(), mockModule.getContent().getTypeInstanceContainer());
    final COperandTreeNode childNode2 = new COperandTreeNode(-1, IOperandTree.NODE_TYPE_SYMBOL_ID, ",", null, new ArrayList<IReference>(), mockProvider, mockModule.getTypeManager(), mockModule.getContent().getTypeInstanceContainer());
    COperandTreeNode.link(rootNode2, childNode2);
    final COperandTreeNode rootNode3 = new COperandTreeNode(-1, IOperandTree.NODE_TYPE_SIZE_PREFIX_ID, "b4", null, new ArrayList<IReference>(), mockProvider, mockModule.getTypeManager(), mockModule.getContent().getTypeInstanceContainer());
    final COperandTreeNode childNode3 = new COperandTreeNode(-1, IOperandTree.NODE_TYPE_REGISTER_ID, "t0", null, new ArrayList<IReference>(), mockProvider, mockModule.getTypeManager(), mockModule.getContent().getTypeInstanceContainer());
    COperandTreeNode.link(rootNode3, childNode3);
    final COperandTree operand1 = new COperandTree(rootNode1, mockProvider, mockModule.getTypeManager(), mockModule.getContent().getTypeInstanceContainer());
    final COperandTree operand2 = new COperandTree(rootNode2, mockProvider, mockModule.getTypeManager(), mockModule.getContent().getTypeInstanceContainer());
    final COperandTree operand3 = new COperandTree(rootNode3, mockProvider, mockModule.getTypeManager(), mockModule.getContent().getTypeInstanceContainer());
    final List<COperandTree> operands1 = Lists.newArrayList(operand1, operand2, operand3);
    final INaviInstruction instruction1 = new CInstruction(false, mockModule, new CAddress(1), "str", operands1, new byte[0], "REIL", mockProvider);
    // str t0, , t1
    final COperandTreeNode rootNode4 = new COperandTreeNode(-1, IOperandTree.NODE_TYPE_SIZE_PREFIX_ID, "b4", null, new ArrayList<IReference>(), mockProvider, mockModule.getTypeManager(), mockModule.getContent().getTypeInstanceContainer());
    final COperandTreeNode childNode4 = new COperandTreeNode(-1, IOperandTree.NODE_TYPE_REGISTER_ID, "t0", null, new ArrayList<IReference>(), mockProvider, mockModule.getTypeManager(), mockModule.getContent().getTypeInstanceContainer());
    COperandTreeNode.link(rootNode4, childNode4);
    final COperandTreeNode rootNode5 = new COperandTreeNode(-1, IOperandTree.NODE_TYPE_SIZE_PREFIX_ID, "b4", null, new ArrayList<IReference>(), mockProvider, mockModule.getTypeManager(), mockModule.getContent().getTypeInstanceContainer());
    final COperandTreeNode childNode5 = new COperandTreeNode(-1, IOperandTree.NODE_TYPE_SYMBOL_ID, ",", null, new ArrayList<IReference>(), mockProvider, mockModule.getTypeManager(), mockModule.getContent().getTypeInstanceContainer());
    COperandTreeNode.link(rootNode5, childNode5);
    final COperandTreeNode rootNode6 = new COperandTreeNode(-1, IOperandTree.NODE_TYPE_SIZE_PREFIX_ID, "b4", null, new ArrayList<IReference>(), mockProvider, mockModule.getTypeManager(), mockModule.getContent().getTypeInstanceContainer());
    final COperandTreeNode childNode6 = new COperandTreeNode(-1, IOperandTree.NODE_TYPE_REGISTER_ID, "t1", null, new ArrayList<IReference>(), mockProvider, mockModule.getTypeManager(), mockModule.getContent().getTypeInstanceContainer());
    COperandTreeNode.link(rootNode6, childNode6);
    final COperandTree operand4 = new COperandTree(rootNode4, mockProvider, mockModule.getTypeManager(), mockModule.getContent().getTypeInstanceContainer());
    final COperandTree operand5 = new COperandTree(rootNode5, mockProvider, mockModule.getTypeManager(), mockModule.getContent().getTypeInstanceContainer());
    final COperandTree operand6 = new COperandTree(rootNode6, mockProvider, mockModule.getTypeManager(), mockModule.getContent().getTypeInstanceContainer());
    final List<COperandTree> operands2 = Lists.newArrayList(operand4, operand5, operand6);
    final INaviInstruction instruction2 = new CInstruction(false, mockModule, new CAddress(2), "str", operands2, new byte[0], "REIL", mockProvider);
    // str t1, , t2
    final COperandTreeNode rootNode7 = new COperandTreeNode(-1, IOperandTree.NODE_TYPE_SIZE_PREFIX_ID, "b4", null, new ArrayList<IReference>(), mockProvider, mockModule.getTypeManager(), mockModule.getContent().getTypeInstanceContainer());
    final COperandTreeNode childNode7 = new COperandTreeNode(-1, IOperandTree.NODE_TYPE_REGISTER_ID, "t1", null, new ArrayList<IReference>(), mockProvider, mockModule.getTypeManager(), mockModule.getContent().getTypeInstanceContainer());
    COperandTreeNode.link(rootNode7, childNode7);
    final COperandTreeNode rootNode8 = new COperandTreeNode(-1, IOperandTree.NODE_TYPE_SIZE_PREFIX_ID, "b4", null, new ArrayList<IReference>(), mockProvider, mockModule.getTypeManager(), mockModule.getContent().getTypeInstanceContainer());
    final COperandTreeNode childNode8 = new COperandTreeNode(-1, IOperandTree.NODE_TYPE_SYMBOL_ID, ",", null, new ArrayList<IReference>(), mockProvider, mockModule.getTypeManager(), mockModule.getContent().getTypeInstanceContainer());
    COperandTreeNode.link(rootNode8, childNode8);
    final COperandTreeNode rootNode9 = new COperandTreeNode(-1, IOperandTree.NODE_TYPE_SIZE_PREFIX_ID, "b4", null, new ArrayList<IReference>(), mockProvider, mockModule.getTypeManager(), mockModule.getContent().getTypeInstanceContainer());
    final COperandTreeNode childNode9 = new COperandTreeNode(-1, IOperandTree.NODE_TYPE_REGISTER_ID, "t2", null, new ArrayList<IReference>(), mockProvider, mockModule.getTypeManager(), mockModule.getContent().getTypeInstanceContainer());
    COperandTreeNode.link(rootNode9, childNode9);
    final COperandTree operand7 = new COperandTree(rootNode7, mockProvider, mockModule.getTypeManager(), mockModule.getContent().getTypeInstanceContainer());
    final COperandTree operand8 = new COperandTree(rootNode8, mockProvider, mockModule.getTypeManager(), mockModule.getContent().getTypeInstanceContainer());
    final COperandTree operand9 = new COperandTree(rootNode9, mockProvider, mockModule.getTypeManager(), mockModule.getContent().getTypeInstanceContainer());
    final List<COperandTree> operands3 = Lists.newArrayList(operand7, operand8, operand9);
    final INaviInstruction instruction3 = new CInstruction(false, mockModule, new CAddress(3), "str", operands3, new byte[0], "REIL", mockProvider);
    final INaviView view = mockModule.getContent().getViewContainer().createView("", "");
    final List<INaviInstruction> instructions = Lists.newArrayList(instruction1, instruction2, instruction3);
    view.getContent().createCodeNode(null, instructions);
    final RegisterTrackingOptions options = new RegisterTrackingOptions(true, new HashSet<String>(), false, AnalysisDirection.UP);
    final CTrackingResult results = CTracking.track(view, instruction3, "t2", options);
    for (final CInstructionResult result : results.getResults()) {
        if (result.getInstruction() == instruction1) {
            assertEquals(Color.RED, CResultColor.determineBackgroundColor(instruction3, "t2", result));
        } else if (result.getInstruction() == instruction2) {
            assertEquals(Color.CYAN, CResultColor.determineBackgroundColor(instruction3, "t2", result));
        } else if (result.getInstruction() == instruction3) {
            assertEquals(Color.GREEN, CResultColor.determineBackgroundColor(instruction3, "t2", result));
        }
    }
}
Also used : RegisterTrackingOptions(com.google.security.zynamics.reil.algorithms.mono2.registertracking.RegisterTrackingOptions) COperandTreeNode(com.google.security.zynamics.binnavi.disassembly.COperandTreeNode) CInstruction(com.google.security.zynamics.binnavi.disassembly.CInstruction) CAddress(com.google.security.zynamics.zylib.disassembly.CAddress) CTrackingResult(com.google.security.zynamics.binnavi.Gui.GraphWindows.BottomPanel.RegisterTracker.CTrackingResult) INaviView(com.google.security.zynamics.binnavi.disassembly.views.INaviView) MockModule(com.google.security.zynamics.binnavi.disassembly.Modules.MockModule) MockSqlProvider(com.google.security.zynamics.binnavi.Database.MockClasses.MockSqlProvider) COperandTree(com.google.security.zynamics.binnavi.disassembly.COperandTree) CInstructionResult(com.google.security.zynamics.binnavi.Gui.GraphWindows.BottomPanel.RegisterTracker.CInstructionResult) IReference(com.google.security.zynamics.zylib.disassembly.IReference) INaviInstruction(com.google.security.zynamics.binnavi.disassembly.INaviInstruction) Test(org.junit.Test)

Example 42 with INaviInstruction

use of com.google.security.zynamics.binnavi.disassembly.INaviInstruction in project binnavi by google.

the class CResultColorTest method testFirst.

@Test
public void testFirst() throws InternalTranslationException {
    final MockSqlProvider mockProvider = new MockSqlProvider();
    final MockModule mockModule = new MockModule(mockProvider);
    // str 6, , t1
    final COperandTreeNode rootNode1 = new COperandTreeNode(-1, IOperandTree.NODE_TYPE_SIZE_PREFIX_ID, "b4", null, new ArrayList<IReference>(), mockProvider, mockModule.getTypeManager(), mockModule.getContent().getTypeInstanceContainer());
    final COperandTreeNode childNode1 = new COperandTreeNode(-1, IOperandTree.NODE_TYPE_IMMEDIATE_INT_ID, "6", null, new ArrayList<IReference>(), mockProvider, mockModule.getTypeManager(), mockModule.getContent().getTypeInstanceContainer());
    COperandTreeNode.link(rootNode1, childNode1);
    final COperandTreeNode rootNode2 = new COperandTreeNode(-1, IOperandTree.NODE_TYPE_SIZE_PREFIX_ID, "b4", null, new ArrayList<IReference>(), mockProvider, mockModule.getTypeManager(), mockModule.getContent().getTypeInstanceContainer());
    final COperandTreeNode childNode2 = new COperandTreeNode(-1, IOperandTree.NODE_TYPE_SYMBOL_ID, ",", null, new ArrayList<IReference>(), mockProvider, mockModule.getTypeManager(), mockModule.getContent().getTypeInstanceContainer());
    COperandTreeNode.link(rootNode2, childNode2);
    final COperandTreeNode rootNode3 = new COperandTreeNode(-1, IOperandTree.NODE_TYPE_SIZE_PREFIX_ID, "b4", null, new ArrayList<IReference>(), mockProvider, mockModule.getTypeManager(), mockModule.getContent().getTypeInstanceContainer());
    final COperandTreeNode childNode3 = new COperandTreeNode(-1, IOperandTree.NODE_TYPE_REGISTER_ID, "t1", null, new ArrayList<IReference>(), mockProvider, mockModule.getTypeManager(), mockModule.getContent().getTypeInstanceContainer());
    COperandTreeNode.link(rootNode3, childNode3);
    final COperandTree operand1 = new COperandTree(rootNode1, mockProvider, mockModule.getTypeManager(), mockModule.getContent().getTypeInstanceContainer());
    final COperandTree operand2 = new COperandTree(rootNode2, mockProvider, mockModule.getTypeManager(), mockModule.getContent().getTypeInstanceContainer());
    final COperandTree operand3 = new COperandTree(rootNode3, mockProvider, mockModule.getTypeManager(), mockModule.getContent().getTypeInstanceContainer());
    final List<COperandTree> operands1 = Lists.newArrayList(operand1, operand2, operand3);
    final INaviInstruction instruction1 = new CInstruction(false, mockModule, new CAddress(1), "str", operands1, new byte[0], "REIL", mockProvider);
    // str 5, , t0
    final COperandTreeNode rootNode4 = new COperandTreeNode(-1, IOperandTree.NODE_TYPE_SIZE_PREFIX_ID, "b4", null, new ArrayList<IReference>(), mockProvider, mockModule.getTypeManager(), mockModule.getContent().getTypeInstanceContainer());
    final COperandTreeNode childNode4 = new COperandTreeNode(-1, IOperandTree.NODE_TYPE_IMMEDIATE_INT_ID, "5", null, new ArrayList<IReference>(), mockProvider, mockModule.getTypeManager(), mockModule.getContent().getTypeInstanceContainer());
    COperandTreeNode.link(rootNode4, childNode4);
    final COperandTreeNode rootNode5 = new COperandTreeNode(-1, IOperandTree.NODE_TYPE_SIZE_PREFIX_ID, "b4", null, new ArrayList<IReference>(), mockProvider, mockModule.getTypeManager(), mockModule.getContent().getTypeInstanceContainer());
    final COperandTreeNode childNode5 = new COperandTreeNode(-1, IOperandTree.NODE_TYPE_SYMBOL_ID, ",", null, new ArrayList<IReference>(), mockProvider, mockModule.getTypeManager(), mockModule.getContent().getTypeInstanceContainer());
    COperandTreeNode.link(rootNode5, childNode5);
    final COperandTreeNode rootNode6 = new COperandTreeNode(-1, IOperandTree.NODE_TYPE_SIZE_PREFIX_ID, "b4", null, new ArrayList<IReference>(), mockProvider, mockModule.getTypeManager(), mockModule.getContent().getTypeInstanceContainer());
    final COperandTreeNode childNode6 = new COperandTreeNode(-1, IOperandTree.NODE_TYPE_REGISTER_ID, "t0", null, new ArrayList<IReference>(), mockProvider, mockModule.getTypeManager(), mockModule.getContent().getTypeInstanceContainer());
    COperandTreeNode.link(rootNode6, childNode6);
    final COperandTree operand4 = new COperandTree(rootNode4, mockProvider, mockModule.getTypeManager(), mockModule.getContent().getTypeInstanceContainer());
    final COperandTree operand5 = new COperandTree(rootNode5, mockProvider, mockModule.getTypeManager(), mockModule.getContent().getTypeInstanceContainer());
    final COperandTree operand6 = new COperandTree(rootNode6, mockProvider, mockModule.getTypeManager(), mockModule.getContent().getTypeInstanceContainer());
    final List<COperandTree> operands2 = Lists.newArrayList(operand4, operand5, operand6);
    final INaviInstruction instruction2 = new CInstruction(false, mockModule, new CAddress(2), "str", operands2, new byte[0], "REIL", mockProvider);
    // add t0, t1, t2
    final COperandTreeNode rootNode7 = new COperandTreeNode(-1, IOperandTree.NODE_TYPE_SIZE_PREFIX_ID, "b4", null, new ArrayList<IReference>(), mockProvider, mockModule.getTypeManager(), mockModule.getContent().getTypeInstanceContainer());
    final COperandTreeNode childNode7 = new COperandTreeNode(-1, IOperandTree.NODE_TYPE_REGISTER_ID, "t0", null, new ArrayList<IReference>(), mockProvider, mockModule.getTypeManager(), mockModule.getContent().getTypeInstanceContainer());
    COperandTreeNode.link(rootNode7, childNode7);
    final COperandTreeNode rootNode8 = new COperandTreeNode(-1, IOperandTree.NODE_TYPE_SIZE_PREFIX_ID, "b4", null, new ArrayList<IReference>(), mockProvider, mockModule.getTypeManager(), mockModule.getContent().getTypeInstanceContainer());
    final COperandTreeNode childNode8 = new COperandTreeNode(-1, IOperandTree.NODE_TYPE_REGISTER_ID, "t1", null, new ArrayList<IReference>(), mockProvider, mockModule.getTypeManager(), mockModule.getContent().getTypeInstanceContainer());
    COperandTreeNode.link(rootNode8, childNode8);
    final COperandTreeNode rootNode9 = new COperandTreeNode(-1, IOperandTree.NODE_TYPE_SIZE_PREFIX_ID, "b4", null, new ArrayList<IReference>(), mockProvider, mockModule.getTypeManager(), mockModule.getContent().getTypeInstanceContainer());
    final COperandTreeNode childNode9 = new COperandTreeNode(-1, IOperandTree.NODE_TYPE_REGISTER_ID, "t2", null, new ArrayList<IReference>(), mockProvider, mockModule.getTypeManager(), mockModule.getContent().getTypeInstanceContainer());
    COperandTreeNode.link(rootNode9, childNode9);
    final COperandTree operand7 = new COperandTree(rootNode7, mockProvider, mockModule.getTypeManager(), mockModule.getContent().getTypeInstanceContainer());
    final COperandTree operand8 = new COperandTree(rootNode8, mockProvider, mockModule.getTypeManager(), mockModule.getContent().getTypeInstanceContainer());
    final COperandTree operand9 = new COperandTree(rootNode9, mockProvider, mockModule.getTypeManager(), mockModule.getContent().getTypeInstanceContainer());
    final List<COperandTree> operands3 = Lists.newArrayList(operand7, operand8, operand9);
    final INaviInstruction instruction3 = new CInstruction(false, mockModule, new CAddress(3), "add", operands3, new byte[0], "REIL", mockProvider);
    final INaviView view = mockModule.getContent().getViewContainer().createView("", "");
    final List<INaviInstruction> instructions = Lists.newArrayList(instruction1, instruction2, instruction3);
    view.getContent().createCodeNode(null, instructions);
    final RegisterTrackingOptions options = new RegisterTrackingOptions(true, new HashSet<String>(), false, AnalysisDirection.UP);
    final CTrackingResult results = CTracking.track(view, instruction3, "t2", options);
    for (final CInstructionResult result : results.getResults()) {
        if (result.getInstruction() == instruction1) {
            assertEquals(Color.RED, CResultColor.determineBackgroundColor(instruction3, "t2", result));
        } else if (result.getInstruction() == instruction2) {
            assertEquals(Color.CYAN, CResultColor.determineBackgroundColor(instruction3, "t2", result));
        } else if (result.getInstruction() == instruction3) {
            assertEquals(Color.GREEN, CResultColor.determineBackgroundColor(instruction3, "t2", result));
        }
    }
}
Also used : RegisterTrackingOptions(com.google.security.zynamics.reil.algorithms.mono2.registertracking.RegisterTrackingOptions) COperandTreeNode(com.google.security.zynamics.binnavi.disassembly.COperandTreeNode) CInstruction(com.google.security.zynamics.binnavi.disassembly.CInstruction) CAddress(com.google.security.zynamics.zylib.disassembly.CAddress) CTrackingResult(com.google.security.zynamics.binnavi.Gui.GraphWindows.BottomPanel.RegisterTracker.CTrackingResult) INaviView(com.google.security.zynamics.binnavi.disassembly.views.INaviView) MockModule(com.google.security.zynamics.binnavi.disassembly.Modules.MockModule) MockSqlProvider(com.google.security.zynamics.binnavi.Database.MockClasses.MockSqlProvider) COperandTree(com.google.security.zynamics.binnavi.disassembly.COperandTree) CInstructionResult(com.google.security.zynamics.binnavi.Gui.GraphWindows.BottomPanel.RegisterTracker.CInstructionResult) IReference(com.google.security.zynamics.zylib.disassembly.IReference) INaviInstruction(com.google.security.zynamics.binnavi.disassembly.INaviInstruction) Test(org.junit.Test)

Example 43 with INaviInstruction

use of com.google.security.zynamics.binnavi.disassembly.INaviInstruction in project binnavi by google.

the class CVariableHighlighterTest method test1Simple.

@Test
public void test1Simple() throws FileReadException, CouldntLoadDataException, LoadCancelledException, CouldntSaveDataException {
    final ZyGraph graph = ZyGraphFactory.generateTestGraph();
    final List<INaviInstruction> mockInstructions = new ArrayList<INaviInstruction>();
    final CCodeNode node = graph.getRawView().getBasicBlocks().get(0);
    final NaviNode naviNode = graph.getNode(node);
    mockInstructions.add(Iterables.get(node.getInstructions(), 0));
    final BackEndDebuggerProvider provider = new MockDebuggerProvider();
    @SuppressWarnings("unused") final CCodeNodeUpdater updater = new CCodeNodeUpdater(graph, naviNode, node, provider);
    assertFalse(naviNode.getRealizer().getNodeContent().getLineContent(0).hasHighlighting(CHighlightLayers.VARIABLE_LAYER));
    CVariableHighlighter.highlightInstructions(graph, mockInstructions);
    assertTrue(naviNode.getRealizer().getNodeContent().getLineContent(0).hasHighlighting(CHighlightLayers.VARIABLE_LAYER));
}
Also used : ZyGraph(com.google.security.zynamics.binnavi.yfileswrap.zygraph.ZyGraph) CCodeNode(com.google.security.zynamics.binnavi.disassembly.CCodeNode) CCodeNodeUpdater(com.google.security.zynamics.binnavi.ZyGraph.Updaters.CodeNodes.CCodeNodeUpdater) ArrayList(java.util.ArrayList) NaviNode(com.google.security.zynamics.binnavi.yfileswrap.zygraph.NaviNode) BackEndDebuggerProvider(com.google.security.zynamics.binnavi.debug.debugger.BackEndDebuggerProvider) MockDebuggerProvider(com.google.security.zynamics.binnavi.Debug.Debugger.MockDebuggerProvider) INaviInstruction(com.google.security.zynamics.binnavi.disassembly.INaviInstruction) Test(org.junit.Test)

Example 44 with INaviInstruction

use of com.google.security.zynamics.binnavi.disassembly.INaviInstruction in project binnavi by google.

the class PostgreSQLCommentNotificationParser method processInstructionGlobalCommentNotification.

/**
   * Parses the notifications from the database back end for global instruction comments by using a
   * regular expression. If the regular expression matched the supplied {@link PGNotification}
   * notification, it is determined if the {@link INaviInstruction} instruction in the notification
   * is currently loaded, and if a {@link CommentNotificationContainer} with the gathered data is
   * returned.
   *
   * @param notification The {@link PGNotification} from the PostgreSQL database server.
   * @param provider The {@link SQLProvider} which is used to communicate with the database.
   */
static CommentNotification processInstructionGlobalCommentNotification(final PGNotification notification, final SQLProvider provider) {
    final Matcher matcher = INSTRUCTION_GLOBAL_PATTERN.matcher(notification.getParameter());
    if (!matcher.find()) {
        return null;
    }
    final Integer moduleId = Integer.parseInt(matcher.group(3));
    final IAddress address = new CAddress(new BigInteger(matcher.group(4)));
    final Integer commentId = matcher.group(7) == null ? null : Integer.parseInt(matcher.group(7));
    final INaviModule module = provider.findModule(moduleId);
    if ((module == null) || !module.isLoaded()) {
        return null;
    }
    final INaviInstruction instruction = InstructionCache.get(provider).getInstructionByAddress(address, moduleId);
    if (instruction == null) {
        return null;
    }
    final CommentOperation operation = commentId == null ? CommentOperation.DELETE : CommentOperation.APPEND;
    return new InstructionCommentNotificationContainer(instruction, null, operation, CommentScope.GLOBAL, commentId);
}
Also used : BigInteger(java.math.BigInteger) CommentOperation(com.google.security.zynamics.binnavi.disassembly.CommentManager.CommentOperation) INaviModule(com.google.security.zynamics.binnavi.disassembly.INaviModule) Matcher(java.util.regex.Matcher) BigInteger(java.math.BigInteger) InstructionCommentNotificationContainer(com.google.security.zynamics.binnavi.Database.PostgreSQL.Notifications.containers.InstructionCommentNotificationContainer) IAddress(com.google.security.zynamics.zylib.disassembly.IAddress) CAddress(com.google.security.zynamics.zylib.disassembly.CAddress) INaviInstruction(com.google.security.zynamics.binnavi.disassembly.INaviInstruction)

Example 45 with INaviInstruction

use of com.google.security.zynamics.binnavi.disassembly.INaviInstruction in project binnavi by google.

the class PostgreSQLCommentNotificationParser method processNodeLocalInstructionCommentNotification.

/**
   * Parses the {@link PGNotification} notifications from the database back end for local
   * instruction comments by using a regular expression. If the regular expression matches the
   * supplied {@link PGNotification} notification, it is determined if the instruction in the
   * notification is currently loaded, and if a {@link CommentNotificationContainer} with the data
   * from the notification is returned.
   *
   * @param notification The {@link PGNotification} from the PostgreSQL database server.
   * @param provider The {@link SQLProvider} which is used to communicate with the database.
   */
static CommentNotification processNodeLocalInstructionCommentNotification(final PGNotification notification, final SQLProvider provider) {
    final Matcher instructionMatcher = INSTRUCTION_LOCAL_PATTERN.matcher(notification.getParameter());
    final boolean instructionMatchFound = instructionMatcher.find();
    if (!instructionMatchFound) {
        return null;
    }
    final Integer moduleId = Integer.parseInt(instructionMatcher.group(3));
    final Integer nodeId = Integer.parseInt(instructionMatcher.group(4));
    final BigInteger notificationInstructionAddress = new BigInteger(instructionMatcher.group(6));
    final Integer commentId = instructionMatcher.group(7).equals("null") ? null : Integer.parseInt(instructionMatcher.group(7));
    final INaviModule module = provider.findModule(moduleId);
    if ((module == null) || !module.isLoaded()) {
        return null;
    }
    final IAddress address = new CAddress(notificationInstructionAddress);
    final INaviInstruction instruction = InstructionCache.get(provider).getInstructionByAddress(address, module.getConfiguration().getId());
    if (instruction == null) {
        return null;
    }
    final INaviCodeNode codeNode = (INaviCodeNode) NodeCache.get(provider).getNodeById(nodeId);
    if (codeNode == null) {
        return null;
    }
    final CommentOperation operation = commentId == null ? CommentOperation.DELETE : CommentOperation.APPEND;
    return new InstructionCommentNotificationContainer(instruction, codeNode, operation, CommentScope.LOCAL, commentId);
}
Also used : BigInteger(java.math.BigInteger) CommentOperation(com.google.security.zynamics.binnavi.disassembly.CommentManager.CommentOperation) INaviCodeNode(com.google.security.zynamics.binnavi.disassembly.INaviCodeNode) INaviModule(com.google.security.zynamics.binnavi.disassembly.INaviModule) Matcher(java.util.regex.Matcher) BigInteger(java.math.BigInteger) InstructionCommentNotificationContainer(com.google.security.zynamics.binnavi.Database.PostgreSQL.Notifications.containers.InstructionCommentNotificationContainer) IAddress(com.google.security.zynamics.zylib.disassembly.IAddress) CAddress(com.google.security.zynamics.zylib.disassembly.CAddress) INaviInstruction(com.google.security.zynamics.binnavi.disassembly.INaviInstruction)

Aggregations

INaviInstruction (com.google.security.zynamics.binnavi.disassembly.INaviInstruction)82 Test (org.junit.Test)27 INaviCodeNode (com.google.security.zynamics.binnavi.disassembly.INaviCodeNode)26 CAddress (com.google.security.zynamics.zylib.disassembly.CAddress)24 ArrayList (java.util.ArrayList)24 INaviFunction (com.google.security.zynamics.binnavi.disassembly.INaviFunction)20 INaviModule (com.google.security.zynamics.binnavi.disassembly.INaviModule)18 CCodeNode (com.google.security.zynamics.binnavi.disassembly.CCodeNode)16 COperandTree (com.google.security.zynamics.binnavi.disassembly.COperandTree)15 IAddress (com.google.security.zynamics.zylib.disassembly.IAddress)15 MockSqlProvider (com.google.security.zynamics.binnavi.Database.MockClasses.MockSqlProvider)10 INaviView (com.google.security.zynamics.binnavi.disassembly.views.INaviView)10 IComment (com.google.security.zynamics.binnavi.Gui.GraphWindows.CommentDialogs.Interfaces.IComment)9 IBlockNode (com.google.security.zynamics.binnavi.disassembly.IBlockNode)9 INaviOperandTreeNode (com.google.security.zynamics.binnavi.disassembly.INaviOperandTreeNode)9 INaviViewNode (com.google.security.zynamics.binnavi.disassembly.INaviViewNode)9 UnrelocatedAddress (com.google.security.zynamics.binnavi.disassembly.UnrelocatedAddress)9 MockModule (com.google.security.zynamics.binnavi.disassembly.Modules.MockModule)8 ExpensiveBaseTest (com.google.security.zynamics.binnavi.disassembly.types.ExpensiveBaseTest)8 MaybeNullException (com.google.security.zynamics.binnavi.Exceptions.MaybeNullException)7