Files
2025-09-29 00:52:08 +02:00

35 lines
1.5 KiB
Python
Executable File

import os
import ctypes
_undname = ctypes.CDLL(os.path.join(os.path.dirname(__file__), '_undname.so'))
_undname.undname.restype = ctypes.c_char_p
BUFSZ = 2048
UNDNAME_COMPLETE = 0x0000
UNDNAME_NO_LEADING_UNDERSCORES = 0x0001 # Don't show __ in calling convention
UNDNAME_NO_MS_KEYWORDS = 0x0002 # Don't show calling convention at all
UNDNAME_NO_FUNCTION_RETURNS = 0x0004 # Don't show function/method return value
UNDNAME_NO_ALLOCATION_MODEL = 0x0008
UNDNAME_NO_ALLOCATION_LANGUAGE = 0x0010
UNDNAME_NO_MS_THISTYPE = 0x0020
UNDNAME_NO_CV_THISTYPE = 0x0040
UNDNAME_NO_THISTYPE = 0x0060
UNDNAME_NO_ACCESS_SPECIFIERS = 0x0080 # Don't show access specifier public/protected/private
UNDNAME_NO_THROW_SIGNATURES = 0x0100
UNDNAME_NO_MEMBER_TYPE = 0x0200 # Don't show static/virtual specifier
UNDNAME_NO_RETURN_UDT_MODEL = 0x0400
UNDNAME_32_BIT_DECODE = 0x0800
UNDNAME_NAME_ONLY = 0x1000 # Only report the variable/method name
UNDNAME_NO_ARGUMENTS = 0x2000 # Don't show method arguments
UNDNAME_NO_SPECIAL_SYMS = 0x4000
UNDNAME_NO_COMPLEX_TYPE = 0x8000
def undname(name, flags=UNDNAME_NAME_ONLY):
if name.startswith("?"):
name = _undname.undname(ctypes.create_string_buffer(BUFSZ), name, BUFSZ, flags)
elif name.startswith("_") or name.startswith("@"):
name = name.rsplit('@',1)[0][1:]
return name