From 73cbf9b72843187ab14c0c390946e3607016089a Mon Sep 17 00:00:00 2001 From: "SND\\kernelnet_cp" Date: Wed, 28 Dec 2011 08:32:02 +0000 Subject: [PATCH] [0.1.x] fixed : getting typedVar( addr ) for release symbols git-svn-id: https://pykd.svn.codeplex.com/svn@72735 9b283d60-5439-405e-af05-b73fd8c4d996 --- pykd/module.cpp | 38 +++++++++++++++++++++++++++------ pykd/pykd.rc | 8 +++---- test/targetapp/targetapp.vcproj | 2 +- 3 files changed, 37 insertions(+), 11 deletions(-) diff --git a/pykd/module.cpp b/pykd/module.cpp index f033e4a..9fd984f 100644 --- a/pykd/module.cpp +++ b/pykd/module.cpp @@ -190,18 +190,44 @@ Module::getTypedVarByName( const std::string &symName ) TypedVarPtr Module::getTypedVarByAddr( ULONG64 addr ) { + HRESULT hres; + addr = addr64(addr); if ( addr < m_base || addr > getEnd() ) throw DbgException( "address is out of the module space" ); - LONG displacement; - pyDia::SymbolPtr diaSym = - getDia()->findByRvaImpl((ULONG)(addr - m_base), SymTagData, displacement); - if (displacement) - throw DbgException( "not exactly match by RVA" ); + char nameBuf[0x100]; - return TypedVar::getTypedVar( m_client, TypeInfo::getTypeInfo( diaSym->getType() ), addr ); + hres = + m_symbols->GetNameByOffset( + addr, + nameBuf, + sizeof(nameBuf), + NULL, + NULL ); + + std::string fullName( nameBuf ); + + size_t symPos = fullName.find ( '!' ) + 1; + + std::string symbolName; + symbolName.assign( fullName, symPos, fullName.length() - symPos ); + + if ( FAILED(hres) ) + throw DbgException( "failed IDebugSymbols::GetNameByOffset" ); + + return getTypedVarByName( symbolName ); + + + + //LONG displacement; + //pyDia::SymbolPtr diaSym = + // getDia()->findByRvaImpl((ULONG)(addr - m_base), SymTagData, displacement); + //if (displacement) + // throw DbgException( "not exactly match by RVA" ); + + //return TypedVar::getTypedVar( m_client, TypeInfo::getTypeInfo( diaSym->getType() ), addr ); } /////////////////////////////////////////////////////////////////////////////////// diff --git a/pykd/pykd.rc b/pykd/pykd.rc index 2bdbef6..750c6af 100644 --- a/pykd/pykd.rc +++ b/pykd/pykd.rc @@ -53,8 +53,8 @@ END // VS_VERSION_INFO VERSIONINFO - FILEVERSION 0,1,0,2 - PRODUCTVERSION 0,1,0,2 + FILEVERSION 0,1,0,3 + PRODUCTVERSION 0,1,0,3 FILEFLAGSMASK 0x17L #ifdef _DEBUG FILEFLAGS 0x1L @@ -70,11 +70,11 @@ BEGIN BLOCK "041904b0" BEGIN VALUE "FileDescription", "pykd - python extension for windbg" - VALUE "FileVersion", "0, 1, 0, 2" + VALUE "FileVersion", "0, 1, 0, 3" VALUE "InternalName", "pykd" VALUE "OriginalFilename", "pykd.dll" VALUE "ProductName", "pykd - python extension for windbg" - VALUE "ProductVersion", "0, 1, 0, 2" + VALUE "ProductVersion", "0, 1, 0, 3" END END BLOCK "VarFileInfo" diff --git a/test/targetapp/targetapp.vcproj b/test/targetapp/targetapp.vcproj index b147454..01b805a 100644 --- a/test/targetapp/targetapp.vcproj +++ b/test/targetapp/targetapp.vcproj @@ -1,7 +1,7 @@