コード例 #1
0
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;
}
コード例 #2
0
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;
}