我想知道如何使用Unix从C程序生成汇编代码。
我尝试了gcc:gcc -c file.c
我还首先使用cpp
,然后尝试as
,但我收到了错误。
我正在尝试从3个不同的程序构建汇编程序
prog1.c prog2.c prog.h
gcc -S prog1.c prog2.c prog.h
是否正确?
似乎不正确。我不知道是否必须从每个汇编程序生成汇编程序然后将它们链接
由于
答案 0 :(得分:9)
根据手册:
`-S'
Stop after the stage of compilation proper; do not assemble. The
output is in the form of an assembler code file for each
non-assembler input file specified.
By default, the assembler file name for a source file is made by
replacing the suffix `.c', `.i', etc., with `.s'.
Input files that don't require compilation are ignored.
所以请尝试gcc -S file.c
。
答案 1 :(得分:5)
来自man gcc
:
-S Stop after the stage of compilation proper; do not
assemble. The output is an assembler code file for
each non-assembler input file specified.
By default, GCC makes the assembler file name for a
source file by replacing the suffix `.c', `.i',
etc., with `.s'. Use -o to select another name.
GCC ignores any input files that don't require com-
pilation.
答案 2 :(得分:5)
如果你正在使用gcc(看起来像),那就是gcc -S。
如果需要,请不要忘记使用-I指定包含路径。
gcc -I ../my_includes -S my_file.c
并且您将使用汇编程序指令获取my_file.s。
答案 3 :(得分:2)
objdump -d也非常好用,它将为您提供整个二进制文件(exe或共享库)的汇编列表。
这比使用编译器生成的asm要清楚得多,因为对同一源文件中的函数的调用可能会显示尚未解析到它们的最终位置。
使用-g构建代码,您还可以将-line和/或--source添加到objdump标志中。