UNMAGLING EXPORTED SYMBOLS
Unmangling: Back to Human-Readable Names
Among the exported and imported functions of DLLs there may be found DLLs written in C++ that often export functions with mangled names. Because the C++ programming language allows programmers to give different entities the same name, C++ compilers generate external entity names that include information regarding aspects of the entity's type and fully qualified name in order to keep them disinguishable. This name "mangling" ensures that external names will not clash and that entities with strange names, such as operators (eg. "=", "+", "*" ...), have alphanumeric names that a linker will accept.
Conversely, mapping mangled names back to human-readable ones can be quite a challenge as different vendors employ different encoding schemes to generate these external names. For example, when compiling a function with this signature:
char * istrstream::str(void)
Microsoft C++ compilers embellish it like this:
and Borland C++ compilers embellish it like this:
PE Explorer is able to internally unmangle the exported symbols from libraries compiled with both Microsoft and Borland C++ compilers.