diff options
| author | Mason Reed <mason@vector35.com> | 2024-04-24 18:33:11 -0400 |
|---|---|---|
| committer | Mason Reed <mason@vector35.com> | 2024-05-03 11:25:32 -0400 |
| commit | 80201094d494278493e2e08f6adc7c2b4c5b0ad6 (patch) | |
| tree | f770620e12d5b8c21155c2a67b3d66e34816b2ed /python/demangle.py | |
| parent | 92a468d7566de31e6867a77c5cf1c64e33792109 (diff) | |
Expose LLVM demangler
Diffstat (limited to 'python/demangle.py')
| -rw-r--r-- | python/demangle.py | 33 |
1 files changed, 33 insertions, 0 deletions
diff --git a/python/demangle.py b/python/demangle.py index 874b13cf..158880f0 100644 --- a/python/demangle.py +++ b/python/demangle.py @@ -46,6 +46,39 @@ def get_qualified_name(names): return "::".join(names) +def demangle_llvm(mangled_name: str, options=None): + """ + ``demangle_llvm`` demangles a mangled name to a Type object. + + :param str mangled_name: a mangled (msvc/itanium/rust/dlang) name + :param options: (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 + :type options: Tuple[bool, BinaryView, None] + :return: returns demangled name or None on error + :rtype: str + """ + outName = ctypes.POINTER(ctypes.c_char_p)() + outSize = ctypes.c_ulonglong() + names = [] + if ( + isinstance(options, binaryview.BinaryView) and core.BNDemangleLLVMWithOptions( + mangled_name, ctypes.byref(outName), ctypes.byref(outSize), options + ) + ) or ( + isinstance(options, bool) and core.BNDemangleLLVM( + mangled_name, ctypes.byref(outName), ctypes.byref(outSize), options + ) + ) or ( + options is None and core.BNDemangleLLVMWithOptions( + mangled_name, ctypes.byref(outName), ctypes.byref(outSize), None + ) + ): + for i in range(outSize.value): + names.append(outName[i].decode('utf8')) # type: ignore + core.BNFreeDemangledName(ctypes.byref(outName), outSize.value) + return names + return None + + def demangle_ms(archOrPlatform:Union[Architecture, Platform], mangled_name:str, options=False): """ ``demangle_ms`` demangles a mangled Microsoft Visual Studio C++ name to a Type object. |
