windows 可执行文件中的函数符号

Function symbols in windows executeable

我想获取一个包含可执行文件的所有函数的损坏名称的列表,以供某些外部分析。

在 Linux 这是一个简单的任务。我只需要像往常一样编译,运行 nm 就可以得到一个包含损坏名称的列表。

$ nm test    
                 U _GLOBAL_OFFSET_TABLE_
                 U printf
                 U __stack_chk_fail
0000000000000012 T _Z3fooi
0000000000000000 T _Z3foov
0000000000000007 T _Z4footv
0000000000000000 W _ZN3BarC1Ev
0000000000000000 W _ZN3BarC2Ev
0000000000000000 n _ZN3BarC5Ev

在 windows 和 Microsoft 的 Visual C++(msvc?)上,我想不出一种以相同方式获取信息的方法。 我尝试使用 cl /Od /DEBUG 和 运行 dumpbin /EXPORTS /HEADERS 编译我的应用程序,但我没有得到我的应用程序的损坏函数名称的列表。

dumpbin /EXPORTS test.exe
Microsoft (R) COFF/PE Dumper Version 14.00.24245.0
Copyright (C) Microsoft Corporation. All rights reserved.


Dump of file test.exe

File Type: EXECUTABLE IMAGE

Summary

2000 .data
1000 .gfids
1000 .pdata
9000 .rdata
1000 .reloc
C000 .text
Type a message

dumpbin 是否仅适用于共享库而不适用于可执行文件? 由于我只需要所有损坏的名称(例如 _Z3foov、_ZN3BarC1Ev)而不更改我的应用程序代码,是否有更好的解决方案来获取此字符串? 我通常在 linux 上开发 C++ 应用程序。因此我不太了解 windows 具体情况。

在 Visual Studio 中,您正在寻找 "MAP file"。链接器选项是 /MAP,它位于 Visual Studio 中的 "Debugging" 属性下。这是作为构建的一部分生成的,而不是之后生成的。输出是一个类似于 nm 输出的简单文本文件。