demangle module

Class

Description

binaryninja.demangle.CoreDemangler

Pluggable name demangling interface. Seeregister anddemangle for details…

binaryninja.demangle.Demangler

Pluggable name demangling interface. Seeregister anddemangle for details…

binaryninja.demangle.demangle_generic

demangle_generic demangles a mangled symbol name to a Type object.

binaryninja.demangle.demangle_gnu3

demangle_gnu3 demangles a mangled name to a Type object.

binaryninja.demangle.demangle_llvm

demangle_llvm demangles a mangled name using the LLVM demangler.

binaryninja.demangle.demangle_ms

demangle_ms demangles a mangled Microsoft Visual Studio C++ name to a Type object.

binaryninja.demangle.get_qualified_name

get_qualified_name gets a qualified name for the provided name list.

binaryninja.demangle.simplify_name_to_qualified_name

simplify_name_to_qualified_name simplifies a templated C++ name with default arguments and…

binaryninja.demangle.simplify_name_to_string

simplify_name_to_string simplifies a templated C++ name with default arguments and returns a…

CoreDemangler

classCoreDemangler[source]

Bases:Demangler

demangle(arch:Architecture,name:str,view:BinaryView|None=None)Tuple[Type|None,QualifiedName]|None[source]

Demangle a raw name into a Type and QualifiedName.

The result of this function is a (Type, QualifiedName) tuple for the demangledname’s details.

Any unresolved named types referenced by the resulting Type will be created asempty structures or void typedefs in the view, if the result is used ona data structure in the view. Given this, the call todemangleshould NOT cause any side-effects creating types in the view trying to resolve thisand instead just return a type with unresolved named type references.

The most recently registered demangler that claims a name is a mangled string(returns true fromis_mangled_string), and then returns a value fromthis function will determine the result of a call todemangle_generic.If this call returns None, the next most recently used demangler(s) will be tried instead.

If the mangled name has no type information, but a name is still possible to extract,this function may return a successful (None, <name>) result, which will be accepted.

Parameters:
  • arch (Architecture) – Architecture for context in which the name exists, eg for pointer sizes

  • name (str) – Raw mangled name

  • view (BinaryView |None) – (Optional) BinaryView context in which the name exists, eg for type lookup

Returns:

Tuple of (Type, Name) if successful, None if not. Type may be None if onlya demangled name can be recovered from the raw name.

Return type:

Tuple[Type |None,QualifiedName] |None

is_mangled_string(name:str)bool[source]

Determine if a given name is mangled and this demangler can process it

The most recently registered demangler that claims a name is a mangled string(returns true from this function), and then returns a value fromdemangle will determine the result of a call todemangle_generic.Returning True from this does not require the demangler to succeed the call todemangle, but simply implies that it may succeed.

Parameters:

name (str) – Raw mangled name string

Returns:

True if the demangler thinks it can handle the name

Return type:

bool

Demangler

classDemangler[source]

Bases:object

Pluggable name demangling interface. Seeregister anddemanglefor details on the process of this interface.

The list of Demanglers can be queried:

>>>list(Demangler)[<Demangler: MS>, <Demangler: GNU3>]
__init__(handle=None)[source]
demangle(arch:Architecture,name:str,view:BinaryView|None=None)Tuple[Type,QualifiedName]|None[source]

Demangle a raw name into a Type and QualifiedName.

The result of this function is a (Type, QualifiedName) tuple for the demangledname’s details.

Any unresolved named types referenced by the resulting Type will be created asempty structures or void typedefs in the view, if the result is used ona data structure in the view. Given this, the call todemangleshould NOT cause any side-effects creating types in the view trying to resolve thisand instead just return a type with unresolved named type references.

The most recently registered demangler that claims a name is a mangled string(returns true fromis_mangled_string), and then returns a value fromthis function will determine the result of a call todemangle_generic.If this call returns None, the next most recently used demangler(s) will be tried instead.

If the mangled name has no type information, but a name is still possible to extract,this function may return a successful (None, <name>) result, which will be accepted.

Parameters:
  • arch (Architecture) – Architecture for context in which the name exists, eg for pointer sizes

  • name (str) – Raw mangled name

  • view (BinaryView |None) – (Optional) BinaryView context in which the name exists, eg for type lookup

Returns:

Tuple of (Type, Name) if successful, None if not. Type may be None if onlya demangled name can be recovered from the raw name.

Return type:

Tuple[Type,QualifiedName] |None

is_mangled_string(name:str)bool[source]

Determine if a given name is mangled and this demangler can process it

The most recently registered demangler that claims a name is a mangled string(returns true from this function), and then returns a value fromdemangle will determine the result of a call todemangle_generic.Returning True from this does not require the demangler to succeed the call todemangle, but simply implies that it may succeed.

Parameters:

name (str) – Raw mangled name string

Returns:

True if the demangler thinks it can handle the name

Return type:

bool

classmethodpromote(demangler)[source]

Promote a demangler to the highest-priority position.

>>>list(Demangler)[<Demangler: MS>, <Demangler: GNU3>]>>>Demangler.promote(list(Demangler)[0])>>>list(Demangler)[<Demangler: GNU3>, <Demangler: MS>]
Parameters:

demangler – Demangler to promote

classmethodregister()[source]

Register a custom Demangler. Newly registered demanglers will get priority overpreviously registered demanglers and built-in demanglers.

name=None

demangle_generic

classdemangle_generic[source]

Bases:

demangle_generic demangles a mangled symbol name to a Type object.

Parameters:
  • archOrPlatform (Union[Architecture,Platform]) – Architecture or Platform for the symbol. Required for pointer/integer sizes and calling conventions.

  • mangled_name (str) – a mangled symbol name

  • view – (optional) view of the binary containing the mangled name

  • simplify – (optional) Whether to simplify demangled names

Returns:

returns tuple of (Optional[Type], demangled_name) or None on error

Return type:

Tuple

Example:
>>>demangle_generic(Architecture["x86_64"],"?testf@Foobar@@SA?AW4foo@1@W421@@Z")(<type: public: static enum Foobar::foo __cdecl (enum Foobar::foo)>, ['Foobar', 'testf'])>>>demangle_generic(Architecture["x86_64"],"__ZN20ArmCallingConvention27GetIntegerArgumentRegistersEv")(<type: immutable:FunctionTypeClass 'int64_t()'>, ['ArmCallingConvention', 'GetIntegerArgumentRegisters'])>>>

demangle_gnu3

classdemangle_gnu3[source]

Bases:

demangle_gnu3 demangles a mangled name to a Type object.

Parameters:
  • arch (Architecture) – Architecture for the symbol. Required for pointer and integer sizes.

  • mangled_name (str) – a mangled GNU3 name

  • options (Optional[Union[bool,BinaryView]]) – (optional) Whether to simplify demangled names : None falls back to user settings, a BinaryView uses that BinaryView’s settings, or a boolean to set it directly

Returns:

returns tuple of (Type, demangled_name) or (None, mangled_name) on error

Return type:

Tuple[Optional[Type],Union[str,List[str]]]

demangle_llvm

classdemangle_llvm[source]

Bases:

demangle_llvm demangles a mangled name using the LLVM demangler.

Parameters:
  • mangled_name (str) – a mangled (msvc/itanium/rust/dlang) name

  • options (Optional[Union[bool,BinaryView]]) – (optional) Whether to simplify demangled names : None falls back to user settings, a BinaryView uses that BinaryView’s settings, or a boolean to set it directly

Returns:

returns demangled name or None on error

Return type:

Optional[List[str]]

Example:
>>>demangle_llvm("?testf@Foobar@@SA?AW4foo@1@W421@@Z")['public: static enum Foobar::foo __cdecl Foobar::testf(enum Foobar::foo)']>>>

demangle_ms

classdemangle_ms[source]

Bases:

demangle_ms demangles a mangled Microsoft Visual Studio C++ name to a Type object.

Parameters:
  • archOrPlatform (Union[Architecture,Platform]) – Architecture or Platform for the symbol. Required for pointer/integer sizes and calling conventions.

  • mangled_name (str) – a mangled Microsoft Visual Studio C++ name

  • options (Optional[Union[bool,BinaryView]]) – (optional) Whether to simplify demangled names : None falls back to user settings, a BinaryView uses that BinaryView’s settings, or a boolean to set it directly

Returns:

returns tuple of (Type, demangled_name) or (None, mangled_name) on error

Return type:

Tuple[Optional[Type],Union[str,List[str]]]

Example:
>>>demangle_ms(Platform["x86_64"],"?testf@Foobar@@SA?AW4foo@1@W421@@Z")(<type: public: static enum Foobar::foo __cdecl (enum Foobar::foo)>, ['Foobar', 'testf'])>>>

get_qualified_name

classget_qualified_name[source]

Bases:

get_qualified_name gets a qualified name for the provided name list.

Parameters:

names (list(str)) – name list to qualify

Returns:

a qualified name

Return type:

str

Example:
>>>type,name=demangle_ms(Architecture["x86_64"],"?testf@Foobar@@SA?AW4foo@1@W421@@Z")>>>get_qualified_name(name)'Foobar::testf'>>>

simplify_name_to_qualified_name

classsimplify_name_to_qualified_name[source]

Bases:

simplify_name_to_qualified_name simplifies a templated C++ name with default arguments and returns a qualified name. This can also tokenize a string to a qualified name with/without simplifying it

Parameters:
  • input_name (Union[str,QualifiedName]) – String or qualified name to be simplified

  • simplify (bool) – (optional) Whether to simplify input string (no effect if given a qualified name; will always simplify)

Returns:

simplified name (or one-element array containing the input if simplifier fails/cannot simplify)

Return type:

QualifiedName

Example:
>>>demangle.simplify_name_to_qualified_name(QualifiedName(["std","__cxx11","basic_string<wchar, std::char_traits<wchar>, std::allocator<wchar> >"]),True)'std::wstring'>>>

simplify_name_to_string

classsimplify_name_to_string[source]

Bases:

simplify_name_to_string simplifies a templated C++ name with default arguments and returns a string

Parameters:

input_name (Union[str,QualifiedName]) – String or qualified name to be simplified

Returns:

simplified name (or original name if simplifier fails/cannot simplify)

Return type:

str

Example:
>>>demangle.simplify_name_to_string("std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >")'std::string'>>>