int KDumpModuleAnalyzer::GetModules(HANDLE hExceptionThread, PEXCEPTION_POINTERS pExceptionInfo, KDumpModuleInfoVector *pDumpModuleInfoVector) { int nResult = false; int nRetCode = false; KDumpModuleInfo DefaultModuleInfo; KG_PROCESS_ERROR(hExceptionThread); KG_PROCESS_ERROR(pExceptionInfo); KG_PROCESS_ERROR(pDumpModuleInfoVector); nRetCode = GetFilteredModules(hExceptionThread, pExceptionInfo, pDumpModuleInfoVector); KG_PROCESS_SUCCESS(nRetCode); nRetCode = GetFirstModule(hExceptionThread, pExceptionInfo, pDumpModuleInfoVector); KG_PROCESS_SUCCESS(nRetCode); DefaultModuleInfo.dwModuleBase = 0; DefaultModuleInfo.dwStackAddress = (DWORD64)pExceptionInfo->ExceptionRecord->ExceptionAddress; strncpy(DefaultModuleInfo.szModuleName, UNKNOWN_MODULE_NAME, sizeof(DefaultModuleInfo.szModuleName) / sizeof(DefaultModuleInfo.szModuleName[0])); DefaultModuleInfo.szModuleName[sizeof(DefaultModuleInfo.szModuleName) / sizeof(DefaultModuleInfo.szModuleName[0]) - 1] = '\0'; pDumpModuleInfoVector->push_back(DefaultModuleInfo); Exit1: nResult = true; Exit0: return nResult; }
static void logModules( DWORD pid, WORD indent ) { char **modules; char end[10]; DWORD cnt; DWORD i; ProcNode *pnode; ModuleNode *mnode; char *name; pnode = FindProcess( pid ); if( pnode != NULL ) { mnode = GetFirstModule( pnode ); while( mnode != NULL ) { if( mnode->size == -1 ) { strcpy( end, "????????" ); } else { sprintf( end, "%08lX", mnode->base + mnode->size ); } if( mnode->name == NULL ) { name = "???"; } else { name = mnode->name; } logPrintf( STR_MODULE_WITH_ADDR, indent, "", mnode->base, end, name ); mnode = GetNextModule( mnode ); } } else { modules = GetModuleList( pid, &cnt ); if( modules == NULL ) { logPrintf( STR_MODULE_LST_UNAVAILABLE ); } else { for( i=0; i < cnt; i++ ) { logPrintf( STR_MODULE, indent, "", modules[i] ); } } FreeModuleList( modules, cnt ); } }