示例#1
0
//===========================================================================
// Basic markov data tests
//===========================================================================
TEST(MarkovTree,FindNonexistantChainReturnsNull)
{
    MarkovData data(2);

    data.insert( MC3(aa,bb,cc) );

    EXPECT_TRUE( NULL == data.getNodeFor( MC1(xx) ) );
    EXPECT_TRUE( NULL == data.getNodeFor( MC2(aa,cc) ) );
}
示例#2
0
TEST(MarkovTree,InsertChainCanRetrieveAllLevels)
{
    MarkovData data(2);

    data.insert( MC3(aa,bb,cc) );

    EXPECT_TRUE( testSubchain( data, MC1(aa),       1, 1 ) );
    EXPECT_TRUE( testSubchain( data, MC2(aa,bb),    1, 1 ) );
    EXPECT_TRUE( testSubchain( data, MC3(aa,bb,cc), 1, 0 ) );
}
//--------------------------------------------------------------------------
// Get PE header
// In: ea=DLL imagebase, nh=buffer to keep the answer
//     child==true:ea is an address in the child process
//     child==false:ea is an address in the the debugger itself
// Returns: offset to the headers, BADADDR means failure
ea_t win32_debmod_t::get_pe_header(ea_t ea, peheader_t *nh)
{
  uint32 offset = 0;
  uint32 magic;
  if ( _read_memory(ea, &magic, sizeof(magic)) != sizeof(magic) )
    return BADADDR;
  if ( ushort(magic) == MC2('M','Z') )
  {
    if ( _read_memory(ea+PE_PTROFF, &offset, sizeof(offset)) != sizeof(offset) )
      return BADADDR;
  }
  peheader64_t pe64;
  if ( _read_memory(ea+offset, &pe64, sizeof(pe64)) != sizeof(pe64) )
    return BADADDR;
  if ( !pe64_to_pe(*nh, pe64, true, true) )
    return BADADDR;
  if ( nh->signature != PEEXE_ID )
    return BADADDR;
#ifdef __X64__
  if ( debapp_attrs.addrsize == 8 && !pe64.is_pe_plus() )
    debapp_attrs.addrsize = 4;
#endif
  return offset;
}
示例#4
0
TEST(MarkovTree,BasicOneLevelTreeSameWeights)
{
    MarkovData data(1);

    data.insert( MC2(a,b) );
    data.insert( MC2(b,c) );
    data.insert( MC2(c,d) );

    // make sure three nodes at root
    EXPECT_EQ( 3, data.childrenAtRoot() );

    // Verify subchains
    //  {a,b}
    EXPECT_TRUE( testSubchain(data, MC1(a),   1, 1) );
    EXPECT_TRUE( testSubchain(data, MC2(a,b), 1, 0) );

    // {b,c}
    EXPECT_TRUE( testSubchain(data, MC1(b),   1, 1) );
    EXPECT_TRUE( testSubchain(data, MC2(b,c), 1, 0) );

    // {c,d}
    EXPECT_TRUE( testSubchain(data, MC1(c),   1, 1) );
    EXPECT_TRUE( testSubchain(data, MC2(c,d), 1, 0) );
}
示例#5
0
TEST(MarkovChain,ComplexTwoLevelTTreeest)
{
    MarkovData data(2);

    /**
     * (ROOT:24)
     *   - A:6
     *      - B:2
     *          - A:1
     *          - D:1
     *      - C:4
     *          - D:2
     *          - A:1
     *          - C:1
     *   - B:11
     *      - B:3
     *          - A:3
     *      - A:5
     *          - A:1
     *          - B:2
     *          - C:1
     *          - D:1
     *      - C:3
     *          - A:1
     *          - D:2
     *   - C:3
     *      - B:3
     *          - D:3
     *   - D:4
     *      - A:1
     *          - C:1
     *      - B:3
     *          - A:2
     *          - D:1
     */
    data.insert( MC3(a,b,a) ); data.insert( MC3(a,c,c) );   // 1
    data.insert( MC3(d,a,c) ); data.insert( MC3(c,b,d) );   // 2
    data.insert( MC3(a,c,d) ); data.insert( MC3(a,c,d) );   // 3
    data.insert( MC3(b,a,a) ); data.insert( MC3(b,b,a) );   // 4
    data.insert( MC3(b,c,a) ); data.insert( MC3(c,b,d) );   // 5
    data.insert( MC3(c,b,d) ); data.insert( MC3(a,b,d) );   // 6

    data.insert( MC3(a,c,a) ); data.insert( MC3(b,c,d) );   // 7
    data.insert( MC3(d,b,a) ); data.insert( MC3(b,c,d) );   // 8
    data.insert( MC3(d,b,a) ); data.insert( MC3(d,b,d) );   // 9
    data.insert( MC3(b,b,a) ); data.insert( MC3(b,a,c) );   // 10
    data.insert( MC3(b,a,b) ); data.insert( MC3(b,a,b) );   // 11
    data.insert( MC3(b,a,d) ); data.insert( MC3(b,b,a) );   // 12

    // make sure sum is 10 and 3 children
    EXPECT_EQ( 4, data.childrenAtRoot() );
    EXPECT_EQ( 24, data.weightSumAtRoot() );

    // Verify chains
    // a branch
    EXPECT_TRUE( testSubchain( data, MC1(a),   6, 2 ) );
    EXPECT_TRUE( testSubchain( data, MC2(a,b), 2, 2 ) );
    EXPECT_TRUE( testSubchain( data, MC2(a,c), 4, 3 ) );

    EXPECT_TRUE( testSubchain( data, MC3(a,b,a), 1, 0 ) );
    EXPECT_TRUE( testSubchain( data, MC3(a,b,d), 1, 0 ) );

    EXPECT_TRUE( testSubchain( data, MC3(a,c,d), 2, 0 ) );
    EXPECT_TRUE( testSubchain( data, MC3(a,c,a), 1, 0 ) );
    EXPECT_TRUE( testSubchain( data, MC3(a,c,c), 1, 0 ) );

    // b branch
    EXPECT_TRUE( testSubchain( data, MC1(b),  11, 3 ) );
    EXPECT_TRUE( testSubchain( data, MC2(b,a), 5, 4 ) );
    EXPECT_TRUE( testSubchain( data, MC2(b,b), 3, 1 ) );
    EXPECT_TRUE( testSubchain( data, MC2(b,c), 3, 2 ) );

    EXPECT_TRUE( testSubchain( data, MC3(b,b,a), 3, 0 ) );

    EXPECT_TRUE( testSubchain( data, MC3(b,a,a), 1, 0 ) );
    EXPECT_TRUE( testSubchain( data, MC3(b,a,b), 2, 0 ) );
    EXPECT_TRUE( testSubchain( data, MC3(b,a,c), 1, 0 ) );
    EXPECT_TRUE( testSubchain( data, MC3(b,a,d), 1, 0 ) );

    EXPECT_TRUE( testSubchain( data, MC3(b,c,a), 1, 0 ) );
    EXPECT_TRUE( testSubchain( data, MC3(b,c,d), 2, 0 ) );

    // c branch
    EXPECT_TRUE( testSubchain( data, MC1(c),   3, 1 ) );
    EXPECT_TRUE( testSubchain( data, MC2(c,b), 3, 1 ) );

    EXPECT_TRUE( testSubchain( data, MC3(c,b,d), 3, 0 ) );

    // d branch
    EXPECT_TRUE( testSubchain( data, MC1(d),   4, 2 ) );
    EXPECT_TRUE( testSubchain( data, MC2(d,a), 1, 1 ) );
    EXPECT_TRUE( testSubchain( data, MC2(d,b), 3, 2 ) );

    EXPECT_TRUE( testSubchain( data, MC3(d,a,c), 1, 0 ) );

    EXPECT_TRUE( testSubchain( data, MC3(d,b,a), 2, 0 ) );
    EXPECT_TRUE( testSubchain( data, MC3(d,b,d), 1, 0 ) );
}
示例#6
0
//===========================================================================
// Complex higher level tests of markov database
//===========================================================================
TEST(MarkovTree,ComplexOneLevelTreeTest)
{
    MarkovData data(1);

    // ab, bb, bc, cd, bc, ac, ab, ba, bb, bb
    data.insert( MC2(a,b) ); data.insert( MC2(b,b) );
    data.insert( MC2(b,c) ); data.insert( MC2(c,d) );
    data.insert( MC2(b,c) ); data.insert( MC2(a,c) );
    data.insert( MC2(a,b) ); data.insert( MC2(b,a) );
    data.insert( MC2(b,b) ); data.insert( MC2(b,b) );

    // make sure sum is 10 and 3 children
    EXPECT_EQ( 3, data.childrenAtRoot() );
    EXPECT_EQ( 10, data.weightSumAtRoot() );

    // Verify chains
    // a branch
    EXPECT_TRUE( testSubchain( data, MC1(a),   3, 2 ) );
    EXPECT_TRUE( testSubchain( data, MC2(a,b), 2, 0 ) );
    EXPECT_TRUE( testSubchain( data, MC2(a,c), 1, 0 ) );

    // b branch
    EXPECT_TRUE( testSubchain( data, MC1(b),   6, 3 ) );
    EXPECT_TRUE( testSubchain( data, MC2(b,a), 1, 0 ) );
    EXPECT_TRUE( testSubchain( data, MC2(b,b), 3, 0 ) );
    EXPECT_TRUE( testSubchain( data, MC2(b,c), 2, 0 ) );

    // c branch
    EXPECT_TRUE( testSubchain( data, MC1(c),   1, 1 ) );
    EXPECT_TRUE( testSubchain( data, MC2(c,d), 1, 0 ) );

    std::cout << data.debugDumpToString() << std::endl;
}
示例#7
0
TEST(MarkovTree,TwoLengthChainsCanBeNotEqual)
{
    EXPECT_FALSE( isEqual( MC2(bob,david), MC2(nancy,katie) ) );
}
示例#8
0
TEST(MarkovTree,SubsetChainsAreNotEqual)
{
    EXPECT_FALSE( isEqual( MC3(nancy,katie,daisy),MC2(nancy,katie) ) );
}
示例#9
0
TEST(MarkovTree,TwoLengthChainsAreEqual)
{
    EXPECT_TRUE( isEqual( MC2(nancy, katie), MC2(nancy,katie) ) );
}
示例#10
0
TEST(MarkovTree,TwoElementChainToString)
{
    EXPECT_EQ( "<2;apple,peach>", toString( MC2(apple,peach)) );
}