通过终端中的gcc查看C源代码的汇编代码

通过终端中的gcc查看C源代码的汇编代码,c,linux,gcc,assembly,C,Linux,Gcc,Assembly,我成功运行了gcc-S filename.c或gcc filename.c-S,但没有输出。那么如何查看汇编代码本身呢?它编译成filename.s。使用less查看它。或者使用-o-将输出文件设置为-(表示标准输出)。小写的-s用于在链接时剥离可执行文件;你确定这对汇编程序有用吗?大写的-S表示“生成程序集”。@JonathanLeffler:这两个命令都有效gcc-sfoo.c编译为foo.Sgcc-sfoo.c编译并链接到名为a.out的精简二进制文件。你是对的,同时使用这两个文件是没有用

我成功运行了gcc-S filename.cgcc filename.c-S,但没有输出。那么如何查看汇编代码本身呢?

它编译成
filename.s
。使用
less查看它
。或者使用
-o-
将输出文件设置为
-
(表示标准输出)。小写的
-s
用于在链接时剥离可执行文件;你确定这对汇编程序有用吗?大写的
-S
表示“生成程序集”。@JonathanLeffler:这两个命令都有效
gcc-sfoo.c
编译为
foo.S
gcc-sfoo.c
编译并链接到名为
a.out
的精简二进制文件。你是对的,同时使用这两个文件是没有用的(
gcc-S-S foo.c
),但是OP说他们没有这样做。@PeterCordes-我的评论的要点是,在运行
gcc filename.c-S
)之后查找汇编文件是没有意义的-不会生成和保留任何文件。感谢您确认
-s
名义上是用于“剥离可执行文件”。在我的Mac电脑上,它(
-s
)是禁止操作的,或者从
ld
-
ld:warning:option-s已经过时并且被忽略了。
@JonathanLeffler:哦,是的,我明白你的意思。我假设OP没有运行
ls-lrt
来查看目录中最近修改的文件,而是希望直接输出到终端,而不是文件。这就是为什么我评论使用
gcc foo.c-O1-s-fverbose asm-masm=intel-o-| less
。但是,如果要使用
objdump-drwC-Mintel a.out | less