免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 1887 | 回复: 1

[C] 栈底地址的获取 [复制链接]

论坛徽章:
3
程序设计版块每日发帖之星
日期:2016-02-13 06:20:00程序设计版块每日发帖之星
日期:2016-06-22 06:20:00程序设计版块每日发帖之星
日期:2016-06-28 06:20:00
发表于 2016-06-25 10:46 |显示全部楼层
本帖最后由 keymirage 于 2016-06-25 10:48 编辑
  1. test.c

  2. #include <stdlib.h>
  3. #include <stdio.h>

  4. int main (int argc , char **argv)
  5. {
  6.         int  i,j;
  7.         char buff[12]="abcdefghijkl";
  8.        
  9.         i        = 4;
  10.         j        = 5;

  11.         printf("i=%d, j=%d\n",i,j);

  12. }

  13. >gcc -g test.c

  14. (gdb) disassemble main
  15. Dump of assembler code for function main:
  16.    0x08048434 <+0>:        push   %ebp
  17.    0x08048435 <+1>:        mov    %esp,%ebp
  18.    0x08048437 <+3>:        and    $0xfffffff0,%esp
  19.    0x0804843a <+6>:        sub    $0x40,%esp
  20.    0x0804843d <+9>:        mov    0xc(%ebp),%eax
  21.    0x08048440 <+12>:        mov    %eax,0x1c(%esp)
  22.    0x08048444 <+16>:        mov    %gs:0x14,%eax
  23.    0x0804844a <+22>:        mov    %eax,0x3c(%esp)
  24.    0x0804844e <+26>:        xor    %eax,%eax
  25.    0x08048450 <+28>:        movl   $0x64636261,0x30(%esp)
  26.    0x08048458 <+36>:        movl   $0x68676665,0x34(%esp)
  27.    0x08048460 <+44>:        movl   $0x6c6b6a69,0x38(%esp)
  28.    0x08048468 <+52>:        movl   $0x4,0x28(%esp)
  29.    0x08048470 <+60>:        movl   $0x5,0x2c(%esp)
  30.    0x08048478 <+68>:        mov    $0x8048580,%eax
  31.    0x0804847d <+73>:        mov    0x2c(%esp),%edx
  32.    0x08048481 <+77>:        mov    %edx,0x8(%esp)
  33.    0x08048485 <+81>:        mov    0x28(%esp),%edx
  34.    0x08048489 <+85>:        mov    %edx,0x4(%esp)
  35.    0x0804848d <+89>:        mov    %eax,(%esp)
  36. ---Type <return> to continue, or q <return> to quit---
  37.    0x08048490 <+92>:        call   0x8048340 <printf@plt>
  38.    0x08048495 <+97>:        mov    0x3c(%esp),%edx
  39.    0x08048499 <+101>:        xor    %gs:0x14,%edx
  40.    0x080484a0 <+108>:        je     0x80484a7 <main+115>
  41.    0x080484a2 <+110>:        call   0x8048350 <__stack_chk_fail@plt>
  42.    0x080484a7 <+115>:        leave  
  43.    0x080484a8 <+116>:        ret   
  44. End of assembler dump.

  45. Breakpoint 1, 0x08048437 in main (argc=1, argv=0xbffff21c) at str_bof.c:6
  46. 6        {
  47. (gdb) p $esp
  48. $3 = (void *) 0xbffff238
  49. (gdb) p $ebp
  50. $4 = (void *) 0xbffff238
  51. (gdb) nexti
  52. 0x0804843a        6        {
  53. (gdb) p $esp
  54. $5 = (void *) 0xbffff230
  55. (gdb) p $ebp
  56. $6 = (void *) 0xbffff238
  57. (gdb) nexti
  58. 0x0804843d        6        {
  59. (gdb) p $ebp
  60. $7 = (void *) 0xbffff238
  61. (gdb) p $esp
  62. $8 = (void *) 0xbffff1f0
  63. (gdb)
  64. $9 = (void *) 0xbffff1f0
复制代码
//-------------------------------------------------------
即通过gdb获取到的栈底信息为:
//-------------------------------------------------------
ebp        : 0xbffff238
esp        : 0xbffff1f0(gdb获取到的 stack bottom 1)


//-------------------------------------------------------
// 通过/proc/PID/stat获取到的栈底信息为:
//-------------------------------------------------------
通过 ps -ef | grep a.out 得进程号 5183
>/proc/5183$ cat stat | awk '{ print $28 }'
>3219163840 (即:0xBFE08AC0, stack bottom 2)

//-------------------------------------------------------
// 问题:
//-------------------------------------------------------
为何 stack bottom 1 与 stack bottom 2 会不一致?(甚至相差很远)

论坛徽章:
3
程序设计版块每日发帖之星
日期:2016-02-13 06:20:00程序设计版块每日发帖之星
日期:2016-06-22 06:20:00程序设计版块每日发帖之星
日期:2016-06-28 06:20:00
发表于 2016-06-25 10:51 |显示全部楼层
........................................................
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

SACC2019中国系统架构师大会

【数字转型 架构演进】SACC2019中国系统架构师大会
2019年10月31日~11月2日第11届中国系统架构师大会(SACC2019)将在北京隆重召开。四大主线并行的演讲模式,1个主会场、20个技术专场、超千人参与的会议规模,100+来自互联网、金融、制造业、电商等领域的嘉宾阵容,将为广大参会者提供一场最具价值的技术交流盛会。




----------------------------------------

大会官网>>
  

北京盛拓优讯信息技术有限公司. 版权所有 16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122
中国互联网协会会员  联系我们:huangweiwei@it168.com
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP