1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58
| #include<stdio.h> int add(int a, int b){ int c = a + b; return c; } int main() { int a = -1; int b = 0; int sum = add(a, b); }
$ gcc -m32 -g test1.c $ gdb a.out (gdb) b main Breakpoint 1 at 0x80483f7: file test1.c, line 8. (gdb) b add Breakpoint 2 at 0x80483e1: file test1.c, line 3. (gdb) r Breakpoint 1, main () at test1.c:8 8 int a = -1; (gdb) disas main Dump of assembler code for function main: 0x080483f1 <+0>: push %ebp 0x080483f2 <+1>: mov %esp,%ebp 0x080483f4 <+3>: sub $0x10,%esp => 0x080483f7 <+6>: movl $0xffffffff,-0xc(%ebp) 0x080483fe <+13>: movl $0x0,-0x8(%ebp) 0x08048405 <+20>: pushl -0x8(%ebp) 0x08048408 <+23>: pushl -0xc(%ebp) 0x0804840b <+26>: call 0x80483db <add> 0x08048410 <+31>: add $0x8,%esp 0x08048413 <+34>: mov %eax,-0x4(%ebp) 0x08048416 <+37>: mov $0x0,%eax 0x0804841b <+42>: leave 0x0804841c <+43>: ret End of assembler dump. (gdb) p $esp $1 = (void *) 0xffffcc68 (gdb) p $ebp $2 = (void *) 0xffffcc78 (gdb) disas add Dump of assembler code for function add: 0x080483db <+0>: push %ebp 0x080483dc <+1>: mov %esp,%ebp 0x080483de <+3>: sub $0x10,%esp => 0x080483e1 <+6>: mov 0x8(%ebp),%edx 0x080483e4 <+9>: mov 0xc(%ebp),%eax 0x080483e7 <+12>: add %edx,%eax 0x080483e9 <+14>: mov %eax,-0x4(%ebp) 0x080483ec <+17>: mov -0x4(%ebp),%eax 0x080483ef <+20>: leave 0x080483f0 <+21>: ret (gdb) p $ebp $6 = (void *) 0xffffcc58 (gdb) p $esp $5 = (void *) 0xffffcc48
|