Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

View Both Assembly and C code

Tags:

gdb

Do we have a way to view assembly and c code both using gdb.

disassemble function_name shows only assembly, I was trying to find a way to easliy map c code to assembly. Thanks

like image 483
Tectrendz Avatar asked Apr 02 '12 03:04

Tectrendz


People also ask

How do I display assembly code?

You may add the -S tag to see the assembly code. clang also outputs the assembly code with a similar -S tag. After that just look for a file with a . S extension.

How do I find the assembly code of C program in Visual Studio?

You can normally see assembly code while debugging C++ in visual studio (and eclipse too). For this in Visual Studio put a breakpoint on code in question and when debugger hits it rigth click and find "Go To Assembly" ( or press CTRL+ALT+D )


1 Answers

You can run gdb in Text User Interface (TUI) mode:

gdb -tui <your-binary> (gdb) b main (gdb) r (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. A few others tricks:

  • set disassembly-flavor intel - if your prefer intel notation
  • set print asm-demangle - demangles C++ names in assembly view
  • ni - next instruction
  • si - step instruction

If you do not want to use the TUI mode (e.g. your terminal does not like it), you can always do:

x /12i $pc 

which means print 12 instructions from current program counter address - this also works with the tricks above (demangling, stepping instructions, etc.).

The "x /12i $pc" trick works in both gdb and cgdb, whereas "layout split" only works in gdb.

Enjoy :)

like image 171
sirgeorge Avatar answered Nov 18 '22 13:11

sirgeorge