【问题标题】:How to read a .obj file?如何读取 .obj 文件?
【发布时间】:2017-08-03 07:18:11
【问题描述】:
在 Visual Studio 中,编译 c++ 文件后会生成一个目标文件 (.obj)。
如何阅读和理解它?
以及如何在 Visual Studio 2015 中查看编译器优化后的代码。
如果已经回答,请重定向。
【问题讨论】:
标签:
c++
windows
visual-studio-2015
compiler-optimization
【解决方案1】:
使用 Visual Studio 命令提示符下的 DUMPBIN 工具。具体来说,/DISASM 选项显示了反汇编。请注意,如果您启用了链接时优化,那么至少理论上最终代码可能会在 .obj 文件链接形成最终二进制文件(.exe 或 .dll)后发生变化。 DUMPBIN 也可以拆解。
【解决方案2】:
您有点问错了问题:您说您想查看编译器优化,但随后得出的结论导致您认为您需要 .obj 文件。正如愤世嫉俗者的回答所显示的那样,这是可行的,但是根据情况,有一些替代方案可以更方便/更好:
- 在调试器下运行代码,break,右键单击任意源文件,选择“Go To Disassembly”,即可查看源代码和内联汇编
- 让编译器输出汇编代码(同样可选地包括源代码和机器代码):转到项目设置->编译器->输出文件并设置“汇编器输出”
【解决方案3】:
/all 设置中的 Dumpbin 显示代码段和目录。对代码段特征等内容的详细解释不是常识,但可以在某些书籍中找到。这是 COFF 上的 precis,这是更详细的 description,甚至还有 WYSINWYX thesis。
添加到@cynic 的answer,在 Visual Studio (15 & 17) 中可以通过菜单运行 DumpBin。
转到工具/外部工具,然后单击添加。
在标题框中放入类似 DumpBin Your_Exe 或 Your_Obj 名称的内容,如果 DumpBin 不在环境设置中,请找到它的路径。
它可能类似于以下内容:
c:\program files (x86)\microsoft visual studio\2017\community\VC\Tools\MSVC\SDK-Version\bin\Host $(Platform)\$(平台)\dumpbin.exe
并将其添加到命令框。对于参数尝试类似:
/ALL /OUT:C:\Users\New\Desktop\dumpofYour_ExeName.txt "您的 obj/可执行文件的路径名"
是的,引号会起作用。
如果使用桌面,也将其放入初始目录框中。
如果您希望将“参数”框留空,请选择“提示参数”。