我只知道两个:
- dumpbin,它与Visual Studio一起提供
- PEView,来自wjradburn.com
有一个名为DbgHelp的工具,但它更适用于PE文件而不是目标文件,并且旨在作为API使用。
COFF格式本身起源于Unix https://en.wikipedia.org/wiki/COFF,尽管微软已经对该格式进行了扩展,而Unix似乎已经放弃了该格式,转而使用ELF。但是您可能会在Unix世界中找到一些有用的工具,例如来自SCO的这个转储工具http://docsrv.sco.com:507/en/man/html.CP/dump.CP.html
只需将COFF格式转换为ELF并使用一些ELF查看器:
objcopy.exe --input-target=pe-i386 --output-target=elf32-i386 somefile.o somefile.elf
嗯,很奇怪这个选项没有被提到过,但是使用支持COFF格式和目标架构的Binutils绝对能够显示COFF文件内容(在你提问的时候就已经可以了)。
这包括像nm
、objdump
以及-- 根据你尝试做什么来确定 -- 也有strip
、objcopy
、ld
等工具。
如果你想要非常详细的信息,llvm-readobj
或许是最接近你所寻找的,它非常详细和描述得很好;至少如果你对COFF文件的大致内容有一定的了解的话。
另一方面,LLVM 还带来了 Binutils 工具的克隆版本,但前缀为 llvm-
。因此,您可能会找到 llvm-objdump
、llvm-objcopy
、llvm-strip
、llvm-nm
等工具。
在现代版的 Visual Studio(自 VS2019 以来,如果我没记错),您可以从 Visual Studio Installer 安装完整的 Clang/LLVM 工具链,其中包含这些工具--否则,也可以在 Clang/LLVM 项目网站 上找到预打包的工具链。
Binutils 和 LLVM 也完全能够处理库管理器 (lib.exe
) 生成的 .lib
文件格式;ar
和 7-Zip 可用于解包它们。如果您需要某些高级功能来操作对象文件或库,则可能需要查看 objconv。
llvm-cxxfilt.exe
在LLVM16.0版本之前仍然无法正确地解析一些符号。有时候人们仍然需要使用undname.exe
来进行解析。 - ChrisZZ