VS 中如何查看编译出来的.o文件?

cumirror 2011-03-12 04:37:34
在linux下可以用gcc编译.c文件生成目标代码.o文件,里面形式如下:
00000000 <_main>:
0: 55 pushl %ebp
1: 89 e5 movl %esp,%ebp 3: 68 10 00 00 00 pushl $0x10
4: 32 .data
8: e8 f3 ff ff ff call 0
9: DISP32 _a
d: c9 leave
e: c3 ret

vs编译出来的文件是.obj,里面有很多冗余的信息,我看不明白,在VS中如何查看向上面形式代码指令,我希望看到link前的代码指令和link后的代码指令。

希望懂的朋友回复下,谢谢~
...全文
1402 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
cumirror 2011-03-13
  • 打赏
  • 举报
回复
OK.了解了,谢谢~
Lactoferrin 2011-03-12
  • 打赏
  • 举报
回复
55 | 83 EC | 40 83 EC 40是那些指令的机器码16位显示

还有如果你直接在cmd中运行link,可能出现dll找不到的问题,这是路径的原因。
你可以打开visual studio的控制台模式,这样会设置好环境变量,就可以直接link了
cumirror 2011-03-12
  • 打赏
  • 举报
回复
可以了,我把msdis150.dll这个文件拷贝到link.exe所在目录下就可以了,谢谢~

00000000: 55 push ebp
00000001: 8B EC mov ebp,esp
00000003: 83 EC 40 sub esp,40h
00000006: 53 push ebx
00000007: 56 push esi
00000008: 57 push edi
00000009: 8B 45 08 mov eax,dword ptr [ebp+8]
0000000C: 50 push eax
0000000D: 68 00 00 00 00 push offset ??_C@_02DKCKIIND@?$CFs?$AA@
00000012: E8 00 00 00 00 call _printf
00000017: 83 C4 08 add esp,8
0000001A: 5F pop edi
0000001B: 5E pop esi
0000001C: 5B pop ebx
0000001D: 8B E5 mov esp,ebp
0000001F: 5D pop ebp
00000020: C3 ret

另外,地址后面的55 | 83 EC | 40 83 EC 40 这些16进制数代表什么,可以解释下吗?
cumirror 2011-03-12
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 lactoferrin 的回复:]

这不是目录,这是命令行参数

link.exe就是vc的连接器,在vc的bin目录中

[/Quote]

我按照上述命令,生成的文件内容为:
--------------------------------------------------------------------
Microsoft (R) COFF/PE Dumper Version 8.00.50727.42
Copyright (C) Microsoft Corporation. All rights reserved.


Dump of file D:\***\func.obj

File Type: COFF OBJECT

LINK : warning LNK4195: unable to load msdis150.dll

Summary

7CC .debug$S
50 .debug$T
40 .drectve
3 .rdata
21 .text
-----------------------------------------------------------------------

这个不是期待的内容啊。
Lactoferrin 2011-03-12
  • 打赏
  • 举报
回复
这不是目录,这是命令行参数

link.exe就是vc的连接器,在vc的bin目录中

在cmd中运行
link.exe /dump /disasm c:\xx.obj>>c:\a.txt
link.exe /dump /disasm c:\xx.exe>>c:\b.txt
cumirror 2011-03-12
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 lactoferrin 的回复:]

link.exe /dump /disasm c:\xx.obj>>c:\a.txt
link.exe /dump /disasm c:\xx.exe>>c:\b.txt
[/Quote]

楼上能说详细点吗,link.exe我在那个目录中能找到,还有/dump和/disasm这两个目录是什么意思?
Lactoferrin 2011-03-12
  • 打赏
  • 举报
回复
link.exe /dump /disasm c:\xx.obj>>c:\a.txt
link.exe /dump /disasm c:\xx.exe>>c:\b.txt

64,646

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧