rizin/libr/bin/mangling/demangler.h
inisider cad09fa595 Add Microsoft C++ demangler
- Contains 20 commits:
- init work of demangler
- add some comments
- add parsing of name, class_name, namespace of objects(class and global)
- refactor
- add parsing of some type codes
- add skeleton of state machine for type code parsing
- add parsing of standard type for type codes state machine
- add parsing of type codes: _{J,K,T,Z,W}
- add parsing of types __m** and union
- add parsing of type codes: _m***, struct *
- add parsing of W type codes: enums...
- refactor getting of namespaces and name variables
- add class type code parsing
- add parsing of long double and bool
- add parsing of X * const volatile
- add parsing of * and & ( Q, R, S, A )
- add parsing of array
- integrate some initial part of microsofr demangler to rabin2
- fix some small bugs
- add parsing of variable storage class and do some small fix
2015-02-06 22:50:30 +01:00

43 lines
1.9 KiB
C

#ifndef DEMANGLER_H
#define DEMANGLER_H
#include "demangler_types.h"
///////////////////////////////////////////////////////////////////////////////
// Usage of SDemangler:
// SDemangler *mangler = 0;
// char *demangled_name = 0;
// create_demangler(&mangler); // can be checked == eDemanlerErrMemoryAlloc...
// if (init_demangler(mangler, str) == eDemanglerErrOK) {
// mangler->demangle(mangler, &demangled_name);
// }
// free_demangler(mangler);
///////////////////////////////////////////////////////////////////////////////
///////////////////////////////////////////////////////////////////////////////
/// \brief Create object of demangler.
/// \param demangler Object that will be created
/// \return Returns eDemangleErrOK if creating of object has been finish with
/// success, else - eDemanglerErrMemoryAllocation
///////////////////////////////////////////////////////////////////////////////
EDemanglerErr create_demangler(SDemangler **demangler);
///////////////////////////////////////////////////////////////////////////////
/// \brief Initialize object of demangler
/// \param demangler Object of demangler that will be initialized
/// \param sym Symbol that need to be demangled
/// \return Returns eDemangleErrOK if creating of object has been finish with
/// success, else one of next errors: eManglingUnsupported,
/// eDemanglerErrMemoryAllocation, eDemanglerErrUnsupportedMangling,
/// eDemanglerErrUnkown
///////////////////////////////////////////////////////////////////////////////
EDemanglerErr init_demangler(SDemangler *demangler, char *sym);
///////////////////////////////////////////////////////////////////////////////
/// \brief Deallocate demangler object
/// \param demangler Demangler object that will be deallocated
/// \return Returns void
///////////////////////////////////////////////////////////////////////////////
void free_demangler(SDemangler *demangler);
#endif // DEMANGLER_H