如何查看代码块中的汇编代码?

How to view assembly code in codeblocks?

我想查看我的 C 代码的汇编版本,并且我了解到 -S 选项可以显示它,但是在使用该选项时出现此错误:

cannot specify -o with -c, -S or -E with multiple files

除此之外,我使用的唯一编译器选项是:-m64-Wfatal-errors。我使用 Codebloc::Blocks IDE 和 mingw64 编译器。源文件是a43.c,我在这个地方插入了选项:

我做的对吗?我更喜欢使用 GUI 而不是命令行。

如果你在Linux,你可以使用gcc来编译代码, 和 objdump -M intel -D a.out 其中 a.out 是您的编译代码,-M intel 是输出到 intel 语法或删除 -M intel . 但是您也可以使用 gcc -S code.c -o asm_code 在其他地方查看汇编语言输出。

编译器选项:

-c  # compile only (don't link)
-S  # assemble only (don't compile or link)
-E  # preprocess only (don't assemble, compile or link)

是互斥的。此外,您不能指定:

-o foo.o    # write output to `foo.o`

如果您指定多个输入源文件。

您正在将 -S a43.c 添加到 其他编译器选项 。那意味着你 正在将它们添加到项目的现有编译选项中。那些 默认情况下选项已经包含 -c,因为这是 compile 的选项, 所以添加 -S-c 冲突。

-S 不接受任何参数,特别是没有文件名参数。它说 gcc 仅 assemble(不编译或 link)输入文件,无论它们是什么。所以添加:

-S a43.c

以及添加 -S 到现有选项,添加一个输入文件, a43.c,到项目的编译器选项。但当然 Code::Blocks 会添加 每当编译其中一个时,编译器选项的输入文件的名称 项目中的文件。所以命令行中会有两个个源文件名。 因此错误:

cannot specify -o with -c, -S or -E with multiple files

如果您想修改 Code::Blocks 编译选项,使它们 生成编译的每个文件的汇编列表,然后删除

-S a43.c

来自其他编译器选项并将其替换为

-save-temps

然后,每当gcc在工程中编译一个文件foo.c时,它会保存 中间文件为:

foo.s   # The assembly
foo.i   # The preprocessed source

这些文件将保存在与 foo.c 本身相同的目录中;不在 输出目标文件 foo.o 的目录。

the documentation of -save-temps in the GCC manual