如何在机器语言/汇编中查看已编译的代码?

时间:2018-06-01 15:19:25

标签: c assembly

我希望在编译一些代码(例如C)后,看到机器语言或程序集中生成的代码。怎么办?

4 个答案:

答案 0 :(得分:3)

许多编译器(包括gccclang)都有一个-S选项,使它们成为输出程序集而不是二进制文件。

或者,您可以使用反汇编程序查看现有二进制文件的程序集。例如,GNU binutils中的objdump可以使用-d--disassemble)或-D--disassemble-all)选项向您显示给定二进制文件的程序集。< / p>

答案 1 :(得分:2)

https://gcc.gnu.org/onlinedocs/gcc/Overall-Options.html#Overall-Options找到GCC文档(假设gcc):

  

-S       在编译阶段之后停止;不要组装。对于指定的每个非汇编器输入文件,输出采用汇编程序代码文件的形式。       默认情况下,源文件的汇编程序文件名是通过将后缀“.c”,“。i”等替换为“.s”来完成的。       不需要编译的输入文件将被忽略。

例如,gcc -S hello.c将输出名为hello.s的程序集文件。

答案 2 :(得分:0)

使用-g标志编译代码,并使用gdb

运行
gcc -g main.c
gdb a.exe

并在gdb中:

(gdb) layout asm

相关帖子here

中有更多信息

答案 3 :(得分:0)

如果您正在编译源代码:gcc -S file.c

如果您没有源代码,只需要二进制文件:objdump -d exe