From f03c94608eb445ce95bfcca4a33eec71a74369a7 Mon Sep 17 00:00:00 2001 From: "SND\\EreTIk_cp" Date: Tue, 26 Feb 2013 12:33:31 +0000 Subject: [PATCH] [0.2.x] ~getSymbolName->findSymbolAndDisp git-svn-id: https://pykd.svn.codeplex.com/svn@82757 9b283d60-5439-405e-af05-b73fd8c4d996 --- pykd/module.cpp | 11 +++-------- pykd/module.h | 2 +- pykd/python/pymod.cpp | 4 ++-- test/scripts/moduletest.py | 9 ++++----- 4 files changed, 10 insertions(+), 16 deletions(-) diff --git a/pykd/module.cpp b/pykd/module.cpp index aec39ab..824452f 100644 --- a/pykd/module.cpp +++ b/pykd/module.cpp @@ -299,19 +299,14 @@ std::string Module::getSymbolNameByVa( ULONG64 offset, bool showDisplacement ) /////////////////////////////////////////////////////////////////////////////////// -std::string Module::getStrictSymbolNameByVa( ULONG64 offset ) +python::tuple Module::getSymbolAndDispByVa( ULONG64 offset ) { offset = prepareVa(offset); LONG displacement = 0; + SymbolPtr sym = getSymSession()->findByRva( (ULONG)(offset - m_base ), SymTagNull, &displacement ); - const ULONG rva = (ULONG)(offset - m_base ); - SymbolPtr sym = getSymSession()->findByRva( rva , SymTagNull, &displacement ); - - if (displacement || rva != sym->getRva()) - throw SymbolException( "Not exact address of symbol" ); - - return sym->getName(); + return python::make_tuple(sym->getName(), displacement); } /////////////////////////////////////////////////////////////////////////////////// diff --git a/pykd/module.h b/pykd/module.h index d754ca3..0f08607 100644 --- a/pykd/module.h +++ b/pykd/module.h @@ -133,7 +133,7 @@ public: std::string getSymbolNameByVa( ULONG64 offset, bool showDisplacement = true ); - std::string getStrictSymbolNameByVa( ULONG64 offset ); + python::tuple getSymbolAndDispByVa( ULONG64 offset ); void getSourceLine( ULONG64 offset, std::string &fileName, ULONG &lineNo, LONG &displacement ); diff --git a/pykd/python/pymod.cpp b/pykd/python/pymod.cpp index 0d00f0a..b296da3 100644 --- a/pykd/python/pymod.cpp +++ b/pykd/python/pymod.cpp @@ -370,8 +370,8 @@ BOOST_PYTHON_MODULE( pykd ) "Return offset of the symbol" ) .def("findSymbol", &Module::getSymbolNameByVa, Module_findSymbol( python::args("offset", "showDisplacement"), "Return symbol name by virtual address" ) ) - .def("getSymbolName", &Module::getStrictSymbolNameByVa, - "Return symbol name by virtual address (without displacement)" ) + .def("findSymbolAndDisp", &Module::getSymbolAndDispByVa, + "Return tuple(symbol_name, displacement) by virtual address" ) .def("rva", &Module::getSymbolRva, "Return rva of the symbol" ) .def("sizeof", &Module::getSymbolSize, diff --git a/test/scripts/moduletest.py b/test/scripts/moduletest.py index 1aefc20..c249447 100644 --- a/test/scripts/moduletest.py +++ b/test/scripts/moduletest.py @@ -56,16 +56,15 @@ class ModuleTest( unittest.TestCase ): self.assertEqual( "_FuncWithName2+10", target.module.findSymbol( target.module.offset("_FuncWithName2") + 0x10 ) ) self.assertEqual( "_FuncWithName2", target.module.findSymbol( target.module.offset("_FuncWithName2") + 0x10, showDisplacement = False ) ) - def testGetSymbolName( self ): + def testFindSymbolAndDisp( self ): vaFuncWithName0 = target.module.offset("FuncWithName0") - self.assertEqual( "FuncWithName0", target.module.getSymbolName(vaFuncWithName0) ) - self.assertRaises( pykd.SymbolException, target.module.getSymbolName, vaFuncWithName0 + 1 ) - self.assertRaises( pykd.SymbolException, target.module.getSymbolName, vaFuncWithName0 - 1 ) + self.assertEqual( ("FuncWithName0", 0), target.module.findSymbolAndDisp(vaFuncWithName0) ) + self.assertEqual( ("FuncWithName0", 2), target.module.findSymbolAndDisp(vaFuncWithName0+2) ) def testType( self ): self.assertEqual( "structTest", target.module.type("structTest").name() ); self.assertEqual( "structTest", target.module.type("g_structTest").name() ); - + def testSourceFile( self ): fileName = pykd.getSourceFile(target.module.FuncWithName0 ) self.assertTrue( re.search('targetapp\\.cpp', fileName ) )