/* ================== Sym_GetFuncInfo ================== */ void Sym_GetFuncInfo( long addr, idStr &module, idStr &funcName ) { MEMORY_BASIC_INFORMATION mbi; module_t *m; symbol_t *s; VirtualQuery( (void*)addr, &mbi, sizeof(mbi) ); for ( m = modules; m != NULL; m = m->next ) { if ( m->address == (int) mbi.AllocationBase ) { break; } } if ( !m ) { Sym_Init( addr ); m = modules; } for ( s = m->symbols; s != NULL; s = s->next ) { if ( s->address == addr ) { char undName[MAX_STRING_CHARS]; if ( UnDecorateSymbolName( s->name, undName, sizeof(undName), UNDECORATE_FLAGS ) ) { funcName = undName; } else { funcName = s->name; } for ( int i = 0; i < funcName.Length(); i++ ) { if ( funcName[i] == '(' ) { funcName.CapLength( i ); break; } } module = m->name; return; } } sprintf( funcName, "0x%08x", addr ); module = ""; }