📄 symbolengine.h
字号:
BOOL SymEnumerateModules ( IN PSYM_ENUMMODULES_CALLBACK
EnumModulesCallback,
IN PVOID UserContext )
{
return ( ::SymEnumerateModules ( m_hProcess ,
EnumModulesCallback ,
UserContext ) ) ;
}
BOOL SymLoadModule ( IN HANDLE hFile ,
IN PSTR ImageName ,
IN PSTR ModuleName ,
IN DWORD BaseOfDll ,
IN DWORD SizeOfDll )
{
return ( ::SymLoadModule ( m_hProcess ,
hFile ,
ImageName ,
ModuleName ,
BaseOfDll ,
SizeOfDll ) ) ;
}
BOOL EnumerateLoadedModules ( IN PENUMLOADED_MODULES_CALLBACK
EnumLoadedModulesCallback,
IN PVOID UserContext )
{
return ( ::EnumerateLoadedModules ( m_hProcess ,
EnumLoadedModulesCallback ,
UserContext ));
}
BOOL SymUnloadModule ( IN DWORD BaseOfDll )
{
return ( ::SymUnloadModule ( m_hProcess , BaseOfDll ) ) ;
}
BOOL SymGetModuleInfo ( IN DWORD dwAddr ,
OUT PIMAGEHLP_MODULE ModuleInfo )
{
return ( ::SymGetModuleInfo ( m_hProcess ,
dwAddr ,
ModuleInfo ) ) ;
}
DWORD SymGetModuleBase ( IN DWORD dwAddr )
{
return ( ::SymGetModuleBase ( m_hProcess , dwAddr ) ) ;
}
/*----------------------------------------------------------------------
Public Symbol Manipulation
----------------------------------------------------------------------*/
public :
BOOL SymEnumerateSymbols (IN DWORD BaseOfDll,
IN PSYM_ENUMSYMBOLS_CALLBACK
EnumSymbolsCallback,
IN PVOID UserContext )
{
return ( ::SymEnumerateSymbols ( m_hProcess ,
BaseOfDll ,
EnumSymbolsCallback ,
UserContext ) ) ;
}
BOOL SymGetSymFromAddr ( IN DWORD dwAddr ,
OUT PDWORD pdwDisplacement ,
OUT PIMAGEHLP_SYMBOL Symbol )
{
return ( ::SymGetSymFromAddr ( m_hProcess ,
dwAddr ,
pdwDisplacement ,
Symbol ) ) ;
}
BOOL SymGetSymFromName ( IN LPSTR Name ,
OUT PIMAGEHLP_SYMBOL Symbol )
{
return ( ::SymGetSymFromName ( m_hProcess ,
Name ,
Symbol ) ) ;
}
BOOL SymGetSymNext ( IN OUT PIMAGEHLP_SYMBOL Symbol )
{
return ( ::SymGetSymNext ( m_hProcess , Symbol ) ) ;
}
BOOL SymGetSymPrev ( IN OUT PIMAGEHLP_SYMBOL Symbol )
{
return ( ::SymGetSymPrev ( m_hProcess , Symbol ) ) ;
}
/*----------------------------------------------------------------------
Public Source Line Manipulation
----------------------------------------------------------------------*/
public :
BOOL SymGetLineFromAddr ( IN DWORD dwAddr ,
OUT PDWORD pdwDisplacement ,
OUT PIMAGEHLP_LINE Line )
{
#ifdef DO_NOT_WORK_AROUND_SRCLINE_BUG
// Just pass along the values returned by the main function.
return ( ::SymGetLineFromAddr ( m_hProcess ,
dwAddr ,
pdwDisplacement ,
Line ) ) ;
#else
// The problem is that the symbol engine finds only those source
// line addresses (after the first lookup) that fall exactly on
// a zero displacement. I抣l walk backward 100 bytes to
// find the line and return the proper displacement.
DWORD dwTempDis = 0 ;
while ( FALSE == ::SymGetLineFromAddr ( m_hProcess ,
dwAddr - dwTempDis ,
pdwDisplacement ,
Line ) )
{
dwTempDis += 1 ;
if ( 100 == dwTempDis )
{
return ( FALSE ) ;
}
}
// I found it and the source line information is correct, so
// change the displacement if I had to search backward to find
// the source line.
if ( 0 != dwTempDis )
{
*pdwDisplacement = dwTempDis ;
}
return ( TRUE ) ;
#endif // DO_NOT_WORK_AROUND_SRCLINE_BUG
}
BOOL SymGetLineFromName ( IN LPSTR ModuleName ,
IN LPSTR FileName ,
IN DWORD dwLineNumber ,
OUT PLONG plDisplacement ,
IN OUT PIMAGEHLP_LINE Line )
{
return ( ::SymGetLineFromName ( m_hProcess ,
ModuleName ,
FileName ,
dwLineNumber ,
plDisplacement ,
Line ) ) ;
}
BOOL SymGetLineNext ( IN OUT PIMAGEHLP_LINE Line )
{
return ( ::SymGetLineNext ( m_hProcess , Line ) ) ;
}
BOOL SymGetLinePrev ( IN OUT PIMAGEHLP_LINE Line )
{
return ( ::SymGetLinePrev ( m_hProcess , Line ) ) ;
}
BOOL SymMatchFileName ( IN LPSTR FileName ,
IN LPSTR Match ,
OUT LPSTR * FileNameStop ,
OUT LPSTR * MatchStop )
{
return ( ::SymMatchFileName ( FileName ,
Match ,
FileNameStop ,
MatchStop ) ) ;
}
/*----------------------------------------------------------------------
Public Miscellaneous Members
----------------------------------------------------------------------*/
public :
LPVOID SymFunctionTableAccess ( DWORD AddrBase )
{
return ( ::SymFunctionTableAccess ( m_hProcess , AddrBase ) ) ;
}
BOOL SymGetSearchPath ( OUT LPSTR SearchPath ,
IN DWORD SearchPathLength )
{
return ( ::SymGetSearchPath ( m_hProcess ,
SearchPath ,
SearchPathLength ) ) ;
}
BOOL SymSetSearchPath ( IN LPSTR SearchPath )
{
return ( ::SymSetSearchPath ( m_hProcess , SearchPath ) ) ;
}
BOOL SymRegisterCallback ( IN PSYMBOL_REGISTERED_CALLBACK
CallbackFunction,
IN PVOID UserContext )
{
return ( ::SymRegisterCallback ( m_hProcess ,
CallbackFunction ,
UserContext ) ) ;
}
/*----------------------------------------------------------------------
Protected Data Members
----------------------------------------------------------------------*/
protected :
// The unique value that will be used for this instance of the
// symbol engine. This value doesn抰 have to be an actual
// process value, just a unique value.
HANDLE m_hProcess ;
} ;
#endif // _SYMBOLENGINE_H
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -