Chinaunix首页 | 论坛 | 博客
  • 博客访问: 370478
  • 博文数量: 94
  • 博客积分: 3421
  • 博客等级: 中校
  • 技术积分: 919
  • 用 户 组: 普通用户
  • 注册时间: 2009-11-18 16:27
文章分类

全部博文(94)

文章存档

2015年(8)

2013年(6)

2012年(26)

2011年(8)

2010年(26)

2009年(20)

我的朋友

分类: LINUX

2011-10-11 14:39:32

(1)ESP:栈指针寄存器(extended stack pointer),其内存放着一个指针,该指针永远指向系统栈最上面一个栈帧的栈顶。
(2)EBP:基址指针寄存器(extended base pointer),其内存放着一个指针,该指针永远指向系统栈最上面一个栈帧的底部。

系统栈(也叫核心栈、内核栈)是内存中属于操作系统 空间的一块区域,其主要用途为:
              (1)保存中断现场,对于嵌套中断,被中断程序的现场信息依次压入系统栈,中断返回时逆序弹出;
              (2)保存操作系统子程序间相互调用的参数、返回值、返回点以及子程序(函数)的局部变量。
    用户栈是用户进程空间中的一块区域,用于保存用户进程的子程序间相互调用的参数、返回值、返回点以及子程序(函数)的局部变量。


如果是gcc/linux的可执行文件,先用readelf看:
  1. $ readelf -l /bin/ls
  2. ...
  3.   Type           Offset   VirtAddr   PhysAddr   FileSiz MemSiz  Flg Align
  4. ...
  5.   GNU_STACK      0x000000 0x00000000 0x00000000 0x00000 0x00000 RW  0x4
  6. ...
复制代码
如果MemSiz为零,则由OS决定栈的大小。
  1. $ ulimit -a | grep stack
  2. stack size              (kbytes, -s) 8192
复制代码
可以看到OS设定的值是8MB

编译时改变stack大小的方法:
ld --stack=栈尺寸

gcc -Wl,--stack=栈尺寸
例如 gcc -Wl,--stack=0x4000000
阅读(2984) | 评论(0) | 转发(0) |
0

上一篇:数据段

下一篇:getopts/getopt的一些应用

给主人留下些什么吧!~~