在 C++ 中查看编译器损坏的名称

发布于 2024-07-16 21:29:26 字数 118 浏览 14 评论 0原文

如何查看 C++ 中重载函数的编译器生成的损坏名称? 我正在使用 VC9,但也欢迎其他编译器的答案。

编辑:我发现这里所有的答案都很有用。 接受我最喜欢的那个。

How do I view the compiler-generated mangled names for overloaded functions in C++? I'm using VC9 but answers for other compilers are welcome too.

Edit: I find all the answers useful here. Accepting the one I liked best.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(6

渔村楼浪 2024-07-23 21:29:27

您可以使用 Dependency Walker 查看修饰后的函数名称。

在依赖项遍历器中打开任何 DLL\EXE,在右侧窗格中您可以看到修饰函数名称的列表。

You can see the decorated function names by using Dependency Walker.

Open any DLL\EXE in dependency walker and in right pane you can see a list of decorated function names.

倾听心声的旋律 2024-07-23 21:29:27

因为您还询问其他编译器。 gnu 工具链上有一个名为 nm 的工具。 你会在 linux 和 cygwin 上得到它,我相信它在 mingw 中也可用。 不带参数调用它会显示二进制文件中损坏的符号。 用 --demangle 调用它会起到明显的作用。

Since you also ask about other compilers. There is a tool called nm on the gnu toolchain. You will get it on linux and cygwin, and I believe that it is also available in mingw. Calling it with no parameters will show the mangled symbols in the binary. Calling it with --demangle will do the obvious.

红焚 2024-07-23 21:29:27

你可以查看地图文件。 假设您打开了地图文件生成功能。

You could look in the map file. Assuming you have map file generation turned on.

[旋木] 2024-07-23 21:29:27

您可以使用 Dumpbin 查看修饰(损坏)的名称。

You can view decorated (mangled) names with Dumpbin.

在梵高的星空下 2024-07-23 21:29:27

虽然上述所有方法都有效,但有一个很好的记录 使用 列出文件来查看损坏的名称的方法:项目属性页-> C/C++-> 输出文件 -> 汇编器输出。

(编辑:)

仅列出文件和 DUMPBIN 是有原因的 被记录为查看修饰名称的方法。 作为解决方案建议的映射文件和依赖项遍历器都仅显示修饰名称。 如果一个函数名称有多个重载,那么您将很难将它们与您看到的各种修饰名称相匹配。 (这或多或少重建了装饰方案。虽然 可能,它违背了整个最初的目的。)

While all the above works, there is a nicely documented way to view the mangled names by use of Listing Files: Project Property Pages -> C/C++ -> Output Files -> Assembler Output.

(EDIT:)

There is a reason only Listing files and DUMPBIN are documented as ways to see decorated names. Both the map file and dependency walker, suggested as solutions, display only decorated names. If you have multiple overloads of a function name, you'll have a hard time matching them to the various decorated names you'd see. (That's more or less reconstructing the decoration scheme. While possible, it defeats the whole original purpose.)

南街九尾狐 2024-07-23 21:29:27

linux gnu 工具链 nm 命令可用于查看损坏的名称。

#include<iostream> 
using namespace std;

int fun1(){}
int fun1(int){}
int main()
{
return 0;
}
#g++ name_decoration_2.cpp
#nm a.out
...
...
000000000040064e T _Z4fun1i
0000000000400648 T _Z4fun1v
U _ZNSt8ios_base4InitC1Ev@@GLIBCXX_3.4
U _ZNSt8ios_base4InitD1Ev@@GLIBCXX_3.4

linux gnu tool chain nm command can be used to see mangled name.

#include<iostream> 
using namespace std;

int fun1(){}
int fun1(int){}
int main()
{
return 0;
}
#g++ name_decoration_2.cpp
#nm a.out
...
...
000000000040064e T _Z4fun1i
0000000000400648 T _Z4fun1v
U _ZNSt8ios_base4InitC1Ev@@GLIBCXX_3.4
U _ZNSt8ios_base4InitD1Ev@@GLIBCXX_3.4
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文