【问题标题】:Obtain Mangled Symbol Name based on C++ Signature根据 C++ Signature 获取 Mangled Symbol Name
【发布时间】:2015-09-15 14:08:48
【问题描述】:

有人知道如何根据给定的 C++ 函数签名获取损坏的符号名称吗? 例如:

__stdcall unsigned char MyClass::MyFunc(const int param1, int param2);

会变成:

?MyFunc@MyClass@@QGE@?BHH@Z

使用 Microsoft Visual C++ 编译器时。

我正在考虑一些 WINAPI 功能,但我没有找到任何...


编辑: 好的 - 我知道,这不是一个非常明确的问题。我想要实现的是以下内容:
GetMangledName("__stdcall unsigned char MyClass::MyFunc(const int param1, int param2);");
// Returns "?MyFunc@MyClass@@QGE@?BHH@Z"

【问题讨论】:

  • 你是什么意思(重新)装饰?损坏的名称对于函数参数类型是唯一的,它们的损坏方式是编译器实现特定的,并且不能更改,除非您使用不同的参数类型。
  • @πάνταῥεῖ:我编辑了我的问题
  • 为什么这个标签是 C#?
  • @crashmstr:因为我一开始就想到了 P/Invokation(因为我的应用程序是用 C# 编写的) - 但后来我想,我也可以在纯 C++ 中做到这一点(但我忘了删除标签).....我将编辑我的问题
  • 我认为您实际上不能 P/Invoke 成员函数(更不用说创建 C++ 对象来调用它们了),这就是为什么这样做没有任何意义的原因之一。从 C++ 构建 COM 组件或使用 C++/CLI 是在 C# 中使用面向对象接口的两种常用方法(还有一些其他方法,例如使用 SWIG)。

标签: c++ function naming


【解决方案1】:

我相信名称 mangling 取决于编译器,而不是 c++ 规范的一部分。因此,据我所知,唯一可靠的方法是调用您正在使用的实际编译器并获取源名称如何映射到损坏名称的映射。

【讨论】:

    猜你喜欢
    • 2023-03-13
    • 1970-01-01
    • 2021-09-16
    • 1970-01-01
    • 2015-07-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多