Open mstange opened 2 years ago
FYI we're encountering more of those symbols starting with ??
in the wild. Looking at this crash lead me to this PDB file for a Microsoft library that seems to have several.
I tried to feed ??A?$map@W4StatsType@TelemetryLoggerContextBase@@UCompositionStats@@U?$less@W4StatsType@TelemetryLoggerContextBase@@@std@@V?$allocator@U?$pair@$$CBW4StatsType@TelemetryLoggerContextBase@@UCompositionStats@@@std@@@5@@std@@QEAAAEAUCompositionStats@@$$QEAW4StatsType@TelemetryLoggerContextBase@@@Z
to the last version of undname.exe and it spits this out:
public: struct CompositionStats & __ptr64 __cdecl std::map<enum TelemetryLoggerContextBase::StatsType,struct CompositionStats,struct std::less<enum TelemetryLoggerContextBase::StatsType>,class std::allocator<struct std::pair<enum TelemetryLoggerContextBase::StatsType const ,struct CompositionStats> > >::operator[](enum TelemetryLoggerContextBase::StatsType && __ptr64) __ptr64
Trying it on ??_FUniqueJSONStrings@baseprofiler@mozilla@@QEAAXXZ
yields public: void __cdecl mozilla::baseprofiler::UniqueJSONStrings::
default constructor closure'(void) __ptr64`.
A bit of search yielded this:
A name fragment starting with ?? denotes a nested name. This is a name inside a local scope which must be exported. Its structure looks like the following: [...]
There's a bunch of details in that wiki page which I had never encountered before.
Here's a list of non-demanglable symbols from this mozglue.pdb:
demangler.com supports all of these except for the ones starting with
??_E
: