use of com.google.security.zynamics.reil.ReilBlock in project binnavi by google.
the class OperandGraph method findDefinitions.
private static Set<OperandGraphNode> findDefinitions(final List<ReilBlock> parents, final OperandGraphNode node, final Map<ReilBlock, Pair<List<OperandGraphNode>, List<OperandGraphEdge>>> graphMap, final HashSet<ReilBlock> visited) {
final Set<OperandGraphNode> definitions = new HashSet<OperandGraphNode>();
for (final ReilBlock reilBlock : parents) {
if (visited.contains(reilBlock)) {
continue;
}
visited.add(reilBlock);
final OperandGraphNode definition = findDefinition(node, reilBlock, graphMap, true);
if (definition != null) {
definitions.add(definition);
} else {
definitions.addAll(findDefinitions(getParents(reilBlock), node, graphMap, visited));
}
}
return definitions;
}
use of com.google.security.zynamics.reil.ReilBlock in project binnavi by google.
the class InstructionGraphTest method testEmpty.
@Test
public void testEmpty() {
final ReilGraph rg = new ReilGraph(new ArrayList<ReilBlock>(), new ArrayList<ReilEdge>());
final InstructionGraph g = InstructionGraph.create(rg);
assertEquals(0, g.nodeCount());
assertEquals(0, g.edgeCount());
}
use of com.google.security.zynamics.reil.ReilBlock in project binnavi by google.
the class InstructionGraphTest method testTwoNodes.
@Test
public void testTwoNodes() {
final ReilBlock block1 = new ReilBlock(Lists.newArrayList(ReilHelpers.createNop(0)));
final ReilBlock block2 = new ReilBlock(Lists.newArrayList(ReilHelpers.createUndef(1, OperandSize.DWORD, "eax")));
final ReilEdge edge1 = new ReilEdge(block1, block2, EdgeType.JUMP_CONDITIONAL_FALSE);
ReilBlock.link(block1, block2, edge1);
final List<ReilBlock> blocks = Lists.newArrayList(block1, block2);
final List<ReilEdge> edges = Lists.newArrayList(edge1);
final ReilGraph rg = new ReilGraph(blocks, edges);
final InstructionGraph g = InstructionGraph.create(rg);
assertEquals(2, g.nodeCount());
assertEquals(1, g.edgeCount());
assertEquals(0, g.getNodes().get(0).getInstruction().getAddress().toLong());
assertEquals(1, g.getNodes().get(1).getInstruction().getAddress().toLong());
}
use of com.google.security.zynamics.reil.ReilBlock in project binnavi by google.
the class OperandGraphTest method testOneNode.
@Test
public void testOneNode() {
final Collection<ReilInstruction> instructions = new ArrayList<ReilInstruction>();
instructions.add(ReilHelpers.createAdd(0, OperandSize.DWORD, "eax", OperandSize.DWORD, "123", OperandSize.QWORD, "t0"));
instructions.add(ReilHelpers.createAnd(1, OperandSize.QWORD, "t0", OperandSize.DWORD, String.valueOf(0xFFFFFFFF), OperandSize.DWORD, "t1"));
final ReilBlock block1 = new ReilBlock(instructions);
final List<ReilBlock> blocks = Lists.<ReilBlock>newArrayList(block1);
final ReilGraph rg = new ReilGraph(blocks, new ArrayList<ReilEdge>());
final OperandGraph g = OperandGraph.create(rg);
assertEquals(6, g.nodeCount());
assertEquals(5, g.edgeCount());
}
use of com.google.security.zynamics.reil.ReilBlock in project binnavi by google.
the class OperandGraphTest method testEmpty.
@Test
public void testEmpty() {
final ReilGraph rg = new ReilGraph(new ArrayList<ReilBlock>(), new ArrayList<ReilEdge>());
final OperandGraph g = OperandGraph.create(rg);
assertEquals(0, g.nodeCount());
assertEquals(0, g.edgeCount());
}
Aggregations