demangle

EB: In need of demangling a C++ symbol under windows, and failed to googled such tool, I have successfully ffidled UnDecorateSymbolName() function.

The signature of this function, found in imagehlp.dll, is:

DWORD UnDecorateSymbolName(
  IN  LPSTR DecoratedName,
  OUT LPSTR UnDecoratedName,
  IN  DWORD UndecoratedLength,
  IN  DWORD Flags
);

The function take a string buffer for the undecorated name in output. I don't know if this is the good way to do this. I reserve a string of 1024 chars for it.

load ffidl05.dll

ffidl::callout \
    dll_UnDecorateSymbolName {pointer-utf8 pointer-utf8 int int} int \
    [ffidl::symbol "imagehlp.dll" UnDecorateSymbolName]

proc demangle {symbol} {
    set ret [string repeat { } 1024]
    dll_UnDecorateSymbolName $symbol $ret 1024 0
    set ret
}