Monthly Archives: January 2012

Debugging Tip – Use gdb To Map Assembly With Source Code

With the latest version of gdb (version 7 and above), one can easily map the source code and the assembly listing.  The /m switch when used with the disassemble command gives the assembly listing along with the source code when available.

(gdb) help disassemble
Disassemble a specified section of memory.
Default is the function surrounding the pc of the selected frame.
With a /m modifier, source lines are included (if available).

A sample listing of the disassemble command with the /m switch is pasted below:

(gdb) disassemble /m

11 int y = x +33;
0x004010c1 <+49>: mov -0x4(%ebp),%eax
0x004010c4 <+52>: add $0x21,%eax
0x004010c7 <+55>: mov %eax,-0x8(%ebp)

12 printf("%d\n",y);

0x004010ca <+58>: mov -0x8(%ebp),%eax
0x004010cd <+61>: mov %eax,0x4(%esp)
0x004010d1 <+65>: movl $0x402020,(%esp)
0x004010d8 <+72>: call 0x401198 <printf>

13 return 0;
0x004010dd <+77>: mov $0x0,%eax

14 }
0x004010e2 <+82>: leave
0x004010e3 <+83>: ret 

Note that the assembly language block corresponds to the source line just above it.