|
========================================
标题起错了!!! 应该是前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) |
|