2011-09-19 15:05:22 +08:00
|
|
|
#
|
|
|
|
#
|
|
|
|
#
|
|
|
|
|
|
|
|
import unittest
|
|
|
|
import target
|
|
|
|
import pykd
|
2012-08-17 01:20:21 +08:00
|
|
|
import re
|
2011-09-19 15:05:22 +08:00
|
|
|
|
|
|
|
class ModuleTest( unittest.TestCase ):
|
2012-07-27 18:28:50 +08:00
|
|
|
|
2011-09-19 15:05:22 +08:00
|
|
|
def testCtor( self ):
|
2012-07-27 18:28:50 +08:00
|
|
|
self.assertEqual( target.module.name(), pykd.module(target.module.begin() ).name() )
|
|
|
|
self.assertEqual( target.module.name(), pykd.module(target.module.name() ).name() )
|
2011-09-19 15:05:22 +08:00
|
|
|
|
|
|
|
def testName( self ):
|
2011-09-26 16:46:32 +08:00
|
|
|
self.assertEqual( target.moduleName, target.module.name() )
|
2012-07-27 18:28:50 +08:00
|
|
|
|
2011-09-19 15:05:22 +08:00
|
|
|
def testSize( self ):
|
2011-09-26 16:46:32 +08:00
|
|
|
self.assertNotEqual( 0, target.module.size() )
|
2012-08-15 20:56:37 +08:00
|
|
|
self.assertTrue( pykd.isValid( target.module.begin() + target.module.size() - 1) )
|
2011-09-19 15:05:22 +08:00
|
|
|
|
|
|
|
def testBegin( self ):
|
2011-09-26 16:46:32 +08:00
|
|
|
self.assertNotEqual( 0, target.module.begin() )
|
2011-12-09 14:57:59 +08:00
|
|
|
self.assertEqual( target.module.begin(), target.module )
|
|
|
|
self.assertEqual( target.module.begin() + 100, target.module + 100 )
|
2011-09-19 15:05:22 +08:00
|
|
|
|
|
|
|
def testEnd( self ):
|
2011-09-26 16:46:32 +08:00
|
|
|
self.assertEqual( target.module.size(), target.module.end() - target.module.begin() )
|
2012-08-15 20:56:37 +08:00
|
|
|
self.assertTrue( pykd.isValid( target.module.end() - 1) )
|
2011-09-21 23:53:02 +08:00
|
|
|
|
2012-08-01 00:47:26 +08:00
|
|
|
def testPdb( self ):
|
|
|
|
self.assertNotEqual( "", target.module.symfile() )
|
2011-09-21 23:53:02 +08:00
|
|
|
|
2012-08-01 00:47:26 +08:00
|
|
|
def testImage( self ):
|
|
|
|
self.assertEqual( target.module.name() + ".exe", target.module.image() )
|
2011-09-26 16:46:32 +08:00
|
|
|
|
2012-08-01 00:47:26 +08:00
|
|
|
def testFindModule( self ):
|
2012-08-15 20:56:37 +08:00
|
|
|
self.assertRaises( pykd.BaseException, pykd.module, target.module.begin() - 0x10 )
|
2011-09-26 16:46:32 +08:00
|
|
|
|
2012-08-01 00:47:26 +08:00
|
|
|
self.assertNotEqual( None, pykd.module( target.module.begin() ) )
|
|
|
|
self.assertNotEqual( None, pykd.module( target.module.begin() + 0x10) )
|
2011-09-26 16:46:32 +08:00
|
|
|
|
2012-08-01 00:47:26 +08:00
|
|
|
self.assertRaises( pykd.BaseException, pykd.module, target.module.end() )
|
|
|
|
self.assertRaises( pykd.BaseException, pykd.module, target.module.end() + 0x10 )
|
2011-09-26 16:46:32 +08:00
|
|
|
|
2012-08-01 00:47:26 +08:00
|
|
|
def testSymbol( self ):
|
|
|
|
self.assertEqual( target.module.rva("FuncWithName0"), target.module.offset("FuncWithName0") - target.module.begin() )
|
|
|
|
self.assertEqual( target.module.rva("FuncWithName0"), target.module.FuncWithName0 - target.module.begin() )
|
2012-08-16 23:54:06 +08:00
|
|
|
self.assertEqual( target.module.rva("FuncWithName0"), pykd.getOffset( target.module.name() + "!FuncWithName0") - target.module.begin() )
|
2011-10-06 14:26:25 +08:00
|
|
|
|
2012-09-25 14:15:50 +08:00
|
|
|
def testFindSymbol( self ):
|
|
|
|
self.assertEqual( "FuncWithName0", target.module.findSymbol( target.module.offset("FuncWithName0") ) )
|
|
|
|
self.assertEqual( "_FuncWithName2", target.module.findSymbol( target.module.offset("_FuncWithName2") ) )
|
|
|
|
|
|
|
|
|
2012-08-01 00:47:26 +08:00
|
|
|
def testType( self ):
|
|
|
|
self.assertEqual( "structTest", target.module.type("structTest").name() );
|
|
|
|
self.assertEqual( "structTest", target.module.type("g_structTest").name() );
|
2012-08-17 01:20:21 +08:00
|
|
|
|
|
|
|
def testSourceFile( self ):
|
|
|
|
fileName = pykd.getSourceFile(target.module.FuncWithName0 )
|
|
|
|
self.assertTrue( re.search('targetapp\\.cpp', fileName ) )
|
|
|
|
fileName, lineNo, displacement = pykd.getSourceLine( target.module.FuncWithName0 + 2)
|
|
|
|
self.assertEqual( 382, lineNo )
|
|
|
|
self.assertTrue( re.search('targetapp\\.cpp', fileName ) )
|
|
|
|
self.assertEqual( 2, displacement )
|
|
|
|
fileName, lineNo, displacement = pykd.getSourceLine()
|
2012-10-16 16:15:20 +08:00
|
|
|
self.assertEqual( 624, lineNo )
|
2012-08-17 01:20:21 +08:00
|
|
|
|
2011-12-09 14:57:59 +08:00
|
|
|
|