Search in sources :

Example 11 with ReilGraph

use of com.google.security.zynamics.reil.ReilGraph in project binnavi by google.

the class InstructionGraphTest method testOneNode.

@Test
public void testOneNode() {
    final ReilBlock block1 = new ReilBlock(Lists.newArrayList(ReilHelpers.createNop(0), ReilHelpers.createNop(0), ReilHelpers.createNop(0), ReilHelpers.createNop(0), ReilHelpers.createNop(0)));
    final List<ReilBlock> blocks = Lists.<ReilBlock>newArrayList(block1);
    final ReilGraph rg = new ReilGraph(blocks, new ArrayList<ReilEdge>());
    final InstructionGraph g = InstructionGraph.create(rg);
    assertEquals(5, g.nodeCount());
    assertEquals(4, g.edgeCount());
}
Also used : ReilGraph(com.google.security.zynamics.reil.ReilGraph) ReilEdge(com.google.security.zynamics.reil.ReilEdge) ReilBlock(com.google.security.zynamics.reil.ReilBlock) InstructionGraph(com.google.security.zynamics.reil.algorithms.mono.InstructionGraph) Test(org.junit.Test)

Example 12 with ReilGraph

use of com.google.security.zynamics.reil.ReilGraph in project binnavi by google.

the class OperandGraphTest method testTwoNodes.

@Test
public void testTwoNodes() {
    final Collection<ReilInstruction> instructions1 = new ArrayList<ReilInstruction>();
    instructions1.add(ReilHelpers.createAdd(0, OperandSize.DWORD, "eax", OperandSize.DWORD, "123", OperandSize.QWORD, "t0"));
    final Collection<ReilInstruction> instructions2 = new ArrayList<ReilInstruction>();
    instructions2.add(ReilHelpers.createAnd(1, OperandSize.QWORD, "t0", OperandSize.DWORD, String.valueOf(0xFFFFFFFF), OperandSize.DWORD, "t1"));
    final ReilBlock block1 = new ReilBlock(instructions1);
    final ReilBlock block2 = new ReilBlock(instructions2);
    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 OperandGraph g = OperandGraph.create(rg);
    assertEquals(6, g.nodeCount());
    assertEquals(5, g.edgeCount());
}
Also used : OperandGraph(com.google.security.zynamics.reil.algorithms.mono.OperandGraph) ReilGraph(com.google.security.zynamics.reil.ReilGraph) ReilInstruction(com.google.security.zynamics.reil.ReilInstruction) ReilEdge(com.google.security.zynamics.reil.ReilEdge) ReilBlock(com.google.security.zynamics.reil.ReilBlock) ArrayList(java.util.ArrayList) Test(org.junit.Test)

Example 13 with ReilGraph

use of com.google.security.zynamics.reil.ReilGraph in project binnavi by google.

the class CombineTest method testIndependentBaseRegisters.

@Test
public void testIndependentBaseRegisters() {
    final ReilInstruction instruction1 = ReilHelpers.createAdd(100, OperandSize.DWORD, "esi", OperandSize.DWORD, "4", OperandSize.DWORD, "eax");
    final ReilInstruction instruction2 = ReilHelpers.createAdd(101, OperandSize.DWORD, "edi", OperandSize.DWORD, "8", OperandSize.DWORD, "eax");
    final ReilInstruction instruction3 = ReilHelpers.createStr(102, OperandSize.DWORD, "eax", OperandSize.DWORD, "ebx");
    final ReilBlock block1 = new ReilBlock(Lists.newArrayList(instruction1));
    final ReilBlock block2 = new ReilBlock(Lists.newArrayList(instruction2));
    final ReilBlock block3 = new ReilBlock(Lists.newArrayList(instruction3));
    final ReilEdge edge1 = new ReilEdge(block1, block3, EdgeType.JUMP_UNCONDITIONAL);
    final ReilEdge edge2 = new ReilEdge(block2, block3, EdgeType.JUMP_UNCONDITIONAL);
    ReilBlock.link(block1, block3, edge1);
    ReilBlock.link(block2, block3, edge2);
    final ReilFunction function = new ReilFunction("Fark", new ReilGraph(Lists.newArrayList(block1, block2, block3), Lists.newArrayList(edge1, edge2)));
    System.out.println(function.getGraph());
    final IStateVector<InstructionGraphNode, ValueTrackerElement> result = ValueTracker.track(function);
    System.out.println(result);
}
Also used : ReilGraph(com.google.security.zynamics.reil.ReilGraph) ReilInstruction(com.google.security.zynamics.reil.ReilInstruction) ReilEdge(com.google.security.zynamics.reil.ReilEdge) ReilBlock(com.google.security.zynamics.reil.ReilBlock) ReilFunction(com.google.security.zynamics.reil.ReilFunction) ValueTrackerElement(com.google.security.zynamics.reil.algorithms.mono.valuetracking.ValueTrackerElement) InstructionGraphNode(com.google.security.zynamics.reil.algorithms.mono.InstructionGraphNode) Test(org.junit.Test)

Example 14 with ReilGraph

use of com.google.security.zynamics.reil.ReilGraph in project binnavi by google.

the class ReilTranslatorTest method testSimple.

@Test
public void testSimple() throws InternalTranslationException {
    final ReilGraph g = m_translator.translate(new StandardEnvironment(), new MockInstruction("nop", new ArrayList<MockOperandTree>()));
    assertEquals(1, g.nodeCount());
    assertEquals(0, g.edgeCount());
}
Also used : ReilGraph(com.google.security.zynamics.reil.ReilGraph) MockInstruction(com.google.security.zynamics.zylib.disassembly.MockInstruction) ArrayList(java.util.ArrayList) StandardEnvironment(com.google.security.zynamics.reil.translators.StandardEnvironment) Test(org.junit.Test)

Example 15 with ReilGraph

use of com.google.security.zynamics.reil.ReilGraph in project binnavi by google.

the class ReilTranslatorTest method testStos.

@Test
public void testStos() throws InternalTranslationException {
    final ReilGraph g = m_translator.translate(new StandardEnvironment(), new MockInstruction("stosb", new ArrayList<MockOperandTree>()));
    System.out.println(g.getNodes().get(0).getInstructions());
    System.out.println(g.getNodes().get(1).getInstructions());
    System.out.println(g.getNodes().get(2).getInstructions());
    System.out.println(g.getNodes().get(3).getInstructions());
    System.out.println(g.getEdges());
    assertEquals(4, g.nodeCount());
    assertEquals(4, g.edgeCount());
}
Also used : ReilGraph(com.google.security.zynamics.reil.ReilGraph) MockInstruction(com.google.security.zynamics.zylib.disassembly.MockInstruction) ArrayList(java.util.ArrayList) StandardEnvironment(com.google.security.zynamics.reil.translators.StandardEnvironment) Test(org.junit.Test)

Aggregations

ReilGraph (com.google.security.zynamics.reil.ReilGraph)15 Test (org.junit.Test)11 ReilBlock (com.google.security.zynamics.reil.ReilBlock)10 ReilEdge (com.google.security.zynamics.reil.ReilEdge)10 ArrayList (java.util.ArrayList)7 ReilInstruction (com.google.security.zynamics.reil.ReilInstruction)6 StandardEnvironment (com.google.security.zynamics.reil.translators.StandardEnvironment)4 ReilFunction (com.google.security.zynamics.reil.ReilFunction)3 InstructionGraph (com.google.security.zynamics.reil.algorithms.mono.InstructionGraph)3 OperandGraph (com.google.security.zynamics.reil.algorithms.mono.OperandGraph)3 MockInstruction (com.google.security.zynamics.zylib.disassembly.MockInstruction)3 InstructionGraphNode (com.google.security.zynamics.reil.algorithms.mono.InstructionGraphNode)2 ValueTrackerElement (com.google.security.zynamics.reil.algorithms.mono.valuetracking.ValueTrackerElement)2 HashMap (java.util.HashMap)2 INaviInstruction (com.google.security.zynamics.binnavi.disassembly.INaviInstruction)1 OperandSize (com.google.security.zynamics.reil.OperandSize)1 ReilTranslator (com.google.security.zynamics.reil.translators.ReilTranslator)1 IAddress (com.google.security.zynamics.zylib.disassembly.IAddress)1 ICodeContainer (com.google.security.zynamics.zylib.disassembly.ICodeContainer)1 IInstruction (com.google.security.zynamics.zylib.disassembly.IInstruction)1