Version and Platform (required):
- Binary Ninja Version: 5.4.9471-dev Ultimate, c9252859
- OS: macos
- OS Version: 26.4
- CPU Architecture: arm64
Bug Description:
A user on Slack reported that even though they're returning a type from their custom demangler, it is not being applied to the symbol in question. This works correctly for demanglers written in C++ (our GNU3 / MSVC demanglers) and Rust (our Swift demangler).
Steps to reproduce:
I was able to reproduce with this unit test:
def test_custom_demangler_applies_type(self):
"""Test that a custom Demangler subclass correctly returns both type and name via demangle_generic."""
mangled_prefix = "_CUSTOMTEST_"
class TypeTestDemangler(Demangler):
name = "TypeTestDemangler"
def is_mangled_string(self, name: str) -> bool:
return name.startswith(mangled_prefix)
def demangle(self, arch, name, view=None, simplify=False):
if not name.startswith(mangled_prefix):
return None
demangled_name = name[len(mangled_prefix):]
func_type = Type.function(Type.int(4), [
FunctionParameter(Type.pointer(arch, Type.char()), "arg1"),
])
return (func_type, QualifiedName(demangled_name))
TypeTestDemangler().register()
arch = Architecture["x86_64"]
result = demangle_generic(arch, mangled_prefix + "my_func")
assert result is not None, "demangle_generic returned None"
demangled_type, demangled_name = result
assert demangled_name == ["my_func"], f"Expected ['my_func'], got {demangled_name}"
assert demangled_type is not None, "Custom demangler type was not returned by demangle_generic"
assert demangled_type.type_class == bn.TypeClass.FunctionTypeClass, \
f"Expected FunctionTypeClass, got {demangled_type.type_class}"
This gives:
FAILED AssertionError: Custom demangler type was not returned by demangle_generic
Version and Platform (required):
Bug Description:
A user on Slack reported that even though they're returning a type from their custom demangler, it is not being applied to the symbol in question. This works correctly for demanglers written in C++ (our GNU3 / MSVC demanglers) and Rust (our Swift demangler).
Steps to reproduce:
I was able to reproduce with this unit test:
This gives: