You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

如何查看C等代码编译后的机器语言或汇编代码?

嘿,这个问题问得好!想看看C代码编译后的汇编甚至机器码,其实用常用的编译器和工具就能轻松搞定,我给你分情况详细讲讲:

一、查看汇编代码(最常用,可读性高)

不管是GCC、Clang(跨平台通用)还是MSVC(Windows专属),都能直接生成易读的汇编文件:

GCC/Clang 操作

  • 生成单独的汇编文件:
    在终端执行gcc -S your_code.c(Clang把gcc换成clang就行),编译完成后会生成一个your_code.s文件,直接用文本编辑器打开就能看到汇编代码。
    • 小技巧:如果习惯Intel格式的汇编(默认是AT&T格式),加-masm=intel参数,比如gcc -S -masm=intel your_code.c
    • 想看优化后的汇编?加优化等级参数,比如-O2gcc -S -O2 your_code.c,对比无优化(-O0)的版本,能直观看到编译器做的各种优化操作。
  • 直接在终端输出汇编(不生成文件):
    执行gcc -S -o - your_code.c,汇编代码会直接打印在终端里,适合快速查看小段代码的汇编结果。

MSVC 操作

打开Visual Studio自带的开发者命令提示符,执行:
cl /c /Fa your_code.c,编译后会生成your_code.asm文件,打开就能看到对应汇编代码。

二、查看机器码(二进制指令)

机器码是CPU能直接执行的二进制指令,通常我们会通过反汇编工具把二进制文件转换成「机器码+对应汇编」的形式查看:

从目标文件查看(编译未链接阶段)

  • GCC/Clang:
    先编译生成目标文件:gcc -c your_code.c,得到your_code.o
    然后用objdump -d your_code.o反汇编,输出里会同时显示机器码(左侧十六进制)和对应的汇编指令(右侧)。
  • MSVC:
    先编译生成目标文件:cl /c your_code.c,得到your_code.obj
    然后用dumpbin /disasm your_code.obj查看,同样会同步展示机器码和汇编。

从可执行文件查看(编译链接完成后)

  • Linux/macOS:
    先编译出可执行文件:gcc your_code.c -o your_code
    然后执行objdump -d your_code,就能看到整个可执行程序的机器码和汇编,包括链接进来的系统库代码。
  • Windows:
    用MSVC编译出.exe文件后,执行dumpbin /disasm your_code.exe即可查看完整的机器码与对应汇编。
额外小技巧

如果想一次性获取编译全流程的中间文件(预处理后的C代码、汇编、目标文件),可以用gcc -save-temps your_code.c,执行后会生成your_code.i(预处理后代码)、your_code.s(汇编)、your_code.o(目标文件)三个文件,方便你一步步分析编译的完整过程。

内容的提问来源于stack exchange,提问作者CCox

火山引擎 最新活动