Отладка приложений


Таблицы символов, символьные машины и проход стека - часть 10


OUT PIMAGEHLP__MODULE Modulelnfo ) 

{

return ( ::SymGetModulelnfo ( m_hProcess ,

dwAddr ,

 Modulelnfo )); 

}

DWORD SymGetModuleBase ( IN DWORD dwAddr) 

{

return ( ::SymGetModuleBase ( m_hProcess, dwAddr));

 }

 /*- - - - - - - - - - - - - - - - - - - - - - - - - - 

Public-методы манипуляций с символами

- - - - - - - - - - - - - - - - - - - - - - - - - - - -*/

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-метод манипуляций с исходной строкой

- - - -- - - - - - - - - - - - - - - - - - - - - - - - - */

public :

BOOL SymGetLineFromAddr ( IN DWORD dwAddr ,

OUT PDWORD pdwDisplacement, OUT PIMAGEHLP_LINE Line ) 

{

# ifde f DO_NOT_WORK_AROUND_SRCLINE_BUG

// Просто передайте значения, возвращенные main-функцией

 return ( ::SymGetLineFromAddr ( m_hProcess ,

dwAddr 

, pdwDisplacement, 

Line ) ) ;

#else

// Проблема в том, что символьная машина находит только те адреса

 // исходных строк (после первого поиска), которые попадают точно

 //на нулевые смещения. Чтобы найти строку и возвратить




Начало  Назад  Вперед



Книжный магазин