35 lines
1.5 KiB
Python
Executable File
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
|