示例#1
0
文件: KDumpFile.cpp 项目: viticm/pap2
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;
}
示例#2
0
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 );
    }
}