Exemple #1
0
int KDumpModuleAnalyzer::GetModuleInfo(KDumpModuleInfo *pRetDumpModuleInfo)
{
	int nResult = false;
	int nRetCode = false;

#ifdef _DEBUG
	struct IMAGEHLP_SYMBOL64_EX : IMAGEHLP_SYMBOL64
	{
		TCHAR _EX[MAX_PATH];
	};

	DWORD64 dwDisplacement;
	IMAGEHLP_SYMBOL64_EX Symbol;
	Symbol.MaxNameLength = sizeof(Symbol._EX) / sizeof(Symbol._EX[0]);
	nRetCode = SymGetSymFromAddr64(m_hProcess, m_Stackframe.AddrPC.Offset, &dwDisplacement, &Symbol);
	if (nRetCode)
	{
#ifdef OPEN_LOG_AND_BREAK
		KLogPrintf("%s\t%d\t%x\n", Symbol.Name, 0, m_Stackframe.AddrPC.Offset);
#endif
		printf("%s\t%d\t%x\n", Symbol.Name, 0, m_Stackframe.AddrPC.Offset);
	}
#endif

	KG_PROCESS_ERROR(pRetDumpModuleInfo);
	memset(pRetDumpModuleInfo, 0, sizeof(KDumpModuleInfo));
	
	pRetDumpModuleInfo->dwStackAddress = m_dwStackAddress;
	nRetCode = EnumerateLoadedModules64(m_hProcess, KDumpModuleAnalyzer::FindExceptionModule, (void *)pRetDumpModuleInfo);
	KG_PROCESS_ERROR(nRetCode);//EnumerateLoadedModules64 执行失败
	KG_PROCESS_ERROR(pRetDumpModuleInfo->nFindDumpModuleFlag);//FindExceptionModule 没有查找到
	
#ifdef OPEN_LOG_AND_BREAK
	KLogPrintf(
		"Name:%s\tBase:%llp\tOffset:%llp\tStack:%llp", 
		pRetDumpModuleInfo->szModuleName, 
		pRetDumpModuleInfo->dwModuleBase, 
		pRetDumpModuleInfo->dwStackAddress,
		m_dwStackAddress
	);
#endif

	nResult = true;
Exit0:
	return nResult;
}
Exemple #2
0
/* static */
BOOL
wxDbgHelpDLL::CallEnumerateLoadedModules(HANDLE handle,
                                         wxPENUMLOADED_MODULES_CALLBACK callback,
                                         PVOID callbackParam)
{
#ifdef UNICODE
    if ( EnumerateLoadedModulesW64 )
    {
#ifdef wxHAS_NON_CONST_MODULE_NAME
        // We need to pass by a bridge just to convert non-const module name to
        // the const one taken by our callback.
        wxEnumLoadedCallbackBridge br(callback, callbackParam);
        if ( EnumerateLoadedModulesW64(handle, &wxEnumLoadedW64Callback, &br) )
            return TRUE;
#else // new SDK
        // We can use our callback directly.
        if ( EnumerateLoadedModulesW64(handle, callback, callbackParam) )
            return TRUE;
#endif // old/new SDK
    }
#endif // UNICODE

    if ( EnumerateLoadedModules64 )
    {
        // We need a bridge if we need to convert to Unicode or if we're using
        // an older SDK with a non-const first argument, so just use it always
        // to avoid having too many complicated preprocessor checks.
        wxEnumLoadedCallbackBridge br(callback, callbackParam);
        if ( EnumerateLoadedModules64(handle, &wxEnumLoaded64Callback, &br) )
            return TRUE;
    }

    if ( EnumerateLoadedModules )
    {
        // With this function we need a bridge in any case because the type of
        // module base argument used by EnumerateLoadedModules() differs from
        // that used by EnumerateLoadedModules[W]64().
        wxEnumLoadedCallbackBridge br(callback, callbackParam);
        if ( EnumerateLoadedModules(handle, &wxEnumLoadedCallback, &br) )
            return TRUE;
    }

    return FALSE;
}
Exemple #3
0
void PrintVersionInfo(CMString& buffer, unsigned flags)
{
	GetProcessorString(buffer);
	buffer.Append(TEXT("\r\n"));

	GetFreeMemoryString(buffer);
	buffer.Append(TEXT("\r\n"));

	GetOSDisplayString(buffer);
	buffer.Append(TEXT("\r\n"));

	GetInternetExplorerVersion(buffer);
	buffer.Append(TEXT("\r\n"));

	GetAdminString(buffer);
	buffer.Append(TEXT("\r\n"));

	GetLanguageString(buffer);
	buffer.Append(TEXT("\r\n"));

	TCHAR *profpathfull = Utils_ReplaceVarsT(profpath);
	if (flags & VI_FLAG_PRNVAR) {
		GetFreeDiskString(profpathfull, buffer);
		buffer.Append(TEXT("\r\n"));
	}

	buffer.AppendFormat(TEXT("\r\nMiranda NG Version: %s"), vertxt);
	GetWow64String(buffer);
	buffer.Append(TEXT("\r\n"));

	TCHAR path[MAX_PATH], mirtime[30];
	GetModuleFileName(NULL, path, MAX_PATH);
	GetLastWriteTime(path, mirtime, 30);
	buffer.AppendFormat(TEXT("Build time: %s\r\n"), mirtime);

	TCHAR profpn[MAX_PATH];
	mir_sntprintf(profpn, _countof(profpn), TEXT("%s\\%s"), profpathfull, profname);

	buffer.AppendFormat(TEXT("Profile: %s\r\n"), profpn);

	if (flags & VI_FLAG_PRNVAR) {
		WIN32_FIND_DATA FindFileData;

		HANDLE hFind = FindFirstFile(profpn, &FindFileData);
		if (hFind != INVALID_HANDLE_VALUE) {
			FindClose(hFind);

			unsigned __int64 fsize = (unsigned __int64)FindFileData.nFileSizeHigh << 32 | FindFileData.nFileSizeLow;
			buffer.AppendFormat(TEXT("Profile size: %I64u Bytes\r\n"), fsize),

				GetLastWriteTime(&FindFileData.ftCreationTime, mirtime, 30);
			buffer.AppendFormat(TEXT("Profile creation date: %s\r\n"), mirtime);
		}
	}
	mir_free(profpathfull);

	GetLanguagePackString(buffer);
	buffer.Append(TEXT("\r\n"));

	// buffer.AppendFormat(TEXT("Nightly: %s\r\n"), _tcsstr(vertxt, TEXT("alpha")) ? TEXT("Yes") : TEXT("No")); 
	// buffer.AppendFormat(TEXT("Unicode: %s\r\n"), _tcsstr(vertxt, TEXT("Unicode")) ? TEXT("Yes") : TEXT("No")); 

	GetPluginsString(buffer, flags);

	if (flags & VI_FLAG_WEATHER) {
		buffer.AppendFormat(TEXT("\r\n%sWeather ini files:%s\r\n-------------------------------------------------------------------------------\r\n"),
			(flags & VI_FLAG_FORMAT) ? TEXT("[b]") : TEXT(""),
			(flags & VI_FLAG_FORMAT) ? TEXT("[/b]") : TEXT(""));
		GetWeatherStrings(buffer, flags);
	}

	if (flags & VI_FLAG_PRNVAR && !servicemode) {
		buffer.AppendFormat(TEXT("\r\n%sProtocols and Accounts:%s\r\n-------------------------------------------------------------------------------\r\n"),
			(flags & VI_FLAG_FORMAT) ? TEXT("[b]") : TEXT(""),
			(flags & VI_FLAG_FORMAT) ? TEXT("[/b]") : TEXT(""));
		GetProtocolStrings(buffer);
	}

	if (flags & VI_FLAG_PRNVAR) {
		buffer.AppendFormat(TEXT("\r\n%sIcon Packs:%s\r\n-------------------------------------------------------------------------------\r\n"),
			(flags & VI_FLAG_FORMAT) ? TEXT("[b]") : TEXT(""),
			(flags & VI_FLAG_FORMAT) ? TEXT("[/b]") : TEXT(""));
		GetIconStrings(buffer);
	}

	if (flags & VI_FLAG_PRNDLL) {
		__try {
			buffer.Append(TEXT("\r\nLoaded Modules:\r\n-------------------------------------------------------------------------------\r\n"));
			EnumerateLoadedModules64(GetCurrentProcess(), LoadedModules64, &buffer);
		}
		__except (EXCEPTION_EXECUTE_HANDLER) {}
	}
Exemple #4
0
// Takes a handle (as returned from dlopen()) and returns the absolute path to the image loaded
JL_DLLEXPORT int jl_dllist(jl_array_t *list)
{
    return EnumerateLoadedModules64(GetCurrentProcess(), jl_EnumerateLoadedModulesProc64, list);
}