3

Is there anyway using a C compiler such as GCC or clang to generate assembly output that has the C code mapped to the assembly output (so that it possible to see what block of assembly represent in C code) on a Linux system? I am trying to understand what the output of a piece of C code is with O3 enabled but I am having difficult time since my knowledge of assembly is lacking.

CodeMonkey
  • 31
  • 2
  • 1
    This might be what you're looking for: http://stackoverflow.com/questions/1289881/using-gcc-to-produce-readable-assembly – Retired Ninja Sep 11 '14 at 07:21
  • use `-S` options with GCC, TCC, BCC – Grijesh Chauhan Sep 11 '14 at 07:22
  • 2
    The quickest way is to use [godbolt](http://gcc.godbolt.org/#) it even uses color to link the C code to assembly. You will have to use `-x c` though but that is not too hard. Previously I would have linked you to [Online C++ compiler and evaluator](http://stackoverflow.com/questions/3916000/online-c-compiler-and-evaluator) but sadly was recently deleted. – Shafik Yaghmour Sep 11 '14 at 07:23
  • You can either go the `objdump` route, or you can tell gcc to generate a listings file (as described [here](http://www.delorie.com/djgpp/v2faq/faq8_20.html)). – Michael Sep 11 '14 at 07:28

1 Answers1

0

Use -S option with gcc to generate the assembly file output.

gcc -S file.c

EDIT:

If you want to view both assembly output and C code side-by-side, use gdb -tui a.out:

(gdb) layout split

The layout split command divides the window into two parts - one of them displaying the source code, the other one the corresponding assembly.

Shafik Yaghmour
  • 154,301
  • 39
  • 440
  • 740
manav m-n
  • 11,136
  • 23
  • 74
  • 97