How to Output Assembler Code from C/C Source in GCC
When analyzing compiled code, accessing the generated assembly code is essential. In GCC, this can be achieved using the "-S" option.
Using the -S Option
By default, "-S" runs the preprocessor on the source file, performs initial compilation but stops before invoking the assembler. Combined with "-fverbose-asm," this option associates C code with the assembly code as a comment, especially useful at optimization level -O0.
gcc -S helloworld.c
Customizing Output File
The output file is typically named after the source file with a .s extension. To customize the output file's location, use the "-o" option:
gcc -S -o my_asm_output.s helloworld.c
Alternatively, you can output to the console by using "-o -":
gcc -S -o - helloworld.c | less
Accessing Assembly for Executable Objects
If you do not have the original source code but have the object file, use objdump with the "--disassemble" option (-d):
objdump -S --disassemble helloworld > helloworld.dump
Enable debugging in the original compilation (-g) for enhanced disassembly output with source line references.
Additional Objdump Options
Consider using these objdump options for more detailed analysis:
For example, the following command provides rich disassembly output:
objdump -drwC -Mintel -S foo.o | less
Remember, "-r" is crucial to display symbol references in a .o file with placeholders.
The above is the detailed content of How to Generate Assembly Code from C/C using GCC and objdump?. For more information, please follow other related articles on the PHP Chinese website!