BOOL CPdbHelper::EnumClrSymbols(void) { ATLASSERT( s_pfnSymLoadModuleExW && s_pfnSymUnloadModule64); WCHAR wszPath[MAX_PATH] = {0}; ::GetModuleFileNameW( g_hClrModule, wszPath, MAX_PATH); m_dwClrBaseAddr = s_pfnSymLoadModuleExW( m_hProcess , NULL , wszPath , NULL , (DWORD64)g_hClrModule , 0 , NULL , 0 ); if( m_dwClrBaseAddr == 0 ) { if( GetLastError() != ERROR_SUCCESS ) return FALSE; else m_dwClrBaseAddr = (DWORD64)g_hClrModule; } s_pfnSymEnumSymbolsW(m_hProcess, m_dwClrBaseAddr, NULL, CPdbHelper::EnumSymProc, this); s_pfnSymUnloadModule64( m_hProcess, (DWORD64)g_hClrModule); return TRUE; }
LPVOID CPdbHelper::GetJitCompileMethodAddress(void) { WCHAR wszPath[MAX_PATH] = {0}; ::GetModuleFileNameW( g_hJitModule, wszPath, MAX_PATH); DWORD64 dwBaseAddr = s_pfnSymLoadModuleExW( m_hProcess , NULL , wszPath , NULL , (DWORD64)g_hJitModule , 0 , NULL , 0 ); if( dwBaseAddr == 0 ) { if( GetLastError() != ERROR_SUCCESS ) return NULL; else dwBaseAddr = (DWORD64)g_hJitModule; } SYMBOL_INFO tSymbolInfo = {0}; BOOL bRet = s_pfnSymFromNameW( m_hProcess , L"CILJit::compileMethod", &tSymbolInfo); if( !bRet ) bRet = s_pfnSymFromNameW( m_hProcess , L"PreJit::compileMethod", &tSymbolInfo); s_pfnSymUnloadModule64( m_hProcess, (DWORD64)g_hJitModule); return bRet ? (LPVOID)tSymbolInfo.Address : NULL; }