LinuxSir.cn,穿越时空的Linuxsir!

 找回密码
 注册
搜索
热搜: shell linux mysql
查看: 806|回复: 0

汇编问题:esp堆栈中的前31字节是什么用的?

[复制链接]
发表于 2007-10-17 18:17:52 | 显示全部楼层 |阅读模式
========================================
标题起错了!!!  应该是前34 字节而非31字节!
========================================
看一本linux下的汇编的书,
其中说到程序初始化后,堆栈中存放参数及环境变量
书中的说法是esp指向的第一个地址存放参数数目,
后面存放指向参数的指针,
接着是一个0x00000000
后面是环境变量,
我试了书中的代码,发现在我的机器上不是这个样子的,
如下:
0xbfbf422c:     0x4adc6f70      0x00000004      0xbfbf42b4      0xbfbf42c8
0xbfbf423c:     0x00000000      0x00000000      0x4a3fc650      0x4a3fbfc0
0xbfbf424c:     0x4a3fbfc0      0x4af00ff4      0x4a3fbca0      0x00000000
0xbfbf425c:     0xbfbf4288      0x6036d989      0xa66cd263      0x00000000
0xbfbf426c:     0x00000000      0x00000000      0x4a3f3470      0x4adc6e9d
0xbfbf427c:     0x4a3fbfc0      0x00000004      0x08048300      0x00000000
0xbfbf428c:     0x08048321      0x080483d4      0x00000004      0xbfbf42b4
0xbfbf429c:     0x08048450      0x08048440      0x4a3ee660      0xbfbf42ac

0xbfbf42ac:     0x4a3f6f2b      0x00000004      0xbfbf484e      0xbfbf486e
0xbfbf42bc:     0xbfbf4870      0xbfbf4872      0x00000000      0xbfbf4874

这里我的参数是 1 ,2, 3共四个参数.
esp指向的内存地址是 第一个 0xbfbf422c
第二个34位内存地址才是存放参数数量的值(  ox00000004)
第34个内存地址也存放参数数量,后面的35,36,37,38个内存地址存放具体参数指针
所以我想知道,前面的31个内存地址,除了那个也存放参数数量的以外
究竟有没有用,
还有,在哪里可以找到关于堆栈中存放什么数据的资料.


操作系统: fc7
GDB:  GNU gdb Red Hat Linux (6.6-8.fc7rh)
GCC: gcc (GCC) 4.1.2 20070502 (Red Hat 4.1.2-12)
您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 返回顶部 返回列表