原创 函数调用时的栈信息

2013-2-20 19:59 757 14 14 分类: 消费电子

 

在看到《C专家编程》中关于运行时的数据结构这一节时,
使用gdb测试的一个小程序,
观察函数调用时栈的排列帮助理解。
 
..............
214  804843d:   e8 82 ff ff ff          call   80483c4 <add>
215  8048442:   89 45 fc                mov    %eax,-0x4(%ebp)
........
250  804847c:   e8 8f ff ff ff          call   8048410 <b>
251  8048481:   a3 30 97 04 08          mov    %eax,0x8049730
.............
281  80484c7:   e8 7e ff ff ff          call   804844a <a>
282 
283     return 0;   
284  80484cc:   b8 00 00 00 00          mov    $0x0,%eax
 
堆栈情况:
(gdb) p &p
$14 = (char **) 0xbffff400
(gdb) x/8 0xbffff430
0xbffff430:     0x00000001     0x00000002     0x00000003     0x00000004
0xbffff440:     0x080496fc     0x080496fd     0xbffff458     0x080484a4
(gdb) x/32 0xbffff3f0
0xbffff3f0:     0x00000000     0xbffff418     0x08048442     0x00000000
0xbffff400:     0xbffff430     0x0000001e     0x00000000     0x00000000
0xbffff410:     0x00000000     0x00000000     0xbffff448     0x08048481
0xbffff420:     0xbffff430     0x00000000     0x00000000     0x009c08ab
0xbffff430:     0x00000001     0x00000002     0x00000003     0x00000004
0xbffff440:     0x0804971c     0x0804971d     0xbffff458     0x080484cc
0xbffff450:     0x009ce6d0     0xbffff470     0xbffff4c8     0x009f96d5
0xbffff460:     0x080484f0     0x08048310     0xbffff4c8     0x009f96d5
(gdb) p __libc_start_main
$3 = {<text variable, no debug info>} 0x9f95f0 <__libc_start_main>

文章评论0条评论)

登录后参与讨论
我要评论
0
14
关闭 站长推荐上一条 /2 下一条