man*_*els 11 c++ python name-mangling
我想在Python程序中修改和解码C++函数名.有没有这样的东西?我现在搜索了几个小时,也许我很幸运...
Gle*_*ard 21
如果你想要解码名称,例如.为了显示,您可以创建一个运行c ++ filt的管道.
def demangle(names):
args = ['c++filt']
args.extend(names)
pipe = subprocess.Popen(args, stdin=subprocess.PIPE, stdout=subprocess.PIPE)
stdout, _ = pipe.communicate()
demangled = stdout.split("\n")
# Each line ends with a newline, so the final entry of the split output
# will always be ''.
assert len(demangled) == len(names)+1
return demangled[:-1]
print demangle(['_ZNSt15basic_stringbufIcSt11char_traitsIcESaIcEE17_M_stringbuf_initESt13_Ios_Openmode',
'_ZNSt15basic_stringbufIcSt11char_traitsIcESaIcEE6setbufEPci'])
Run Code Online (Sandbox Code Playgroud)
如果需要使用特定的demangling方法,可以指定c ++ filt的参数.
管理名称要困难得多,如果不了解所涉及类型的定义,可能无法完成.
您很可能不想在 Python 中执行此操作。顺便说一句,您可能不应该从 DLL 中导出损坏的名称,因为这使得使用不同编译器的任何人都难以使用它。
如果您必须使用损坏的名称,那么只需将它们硬编码到您的 Python 代码中即可。如果你打算在 Python 代码中进行修改,那么你必须:
在我看来,用 Python 编写所有这些内容似乎不太可能比简单地对损坏的名称进行硬编码更好。