免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
12下一页
最近访问板块 发新帖
查看: 3185 | 回复: 11
打印 上一主题 下一主题

你们有没有遇到过栈地址增长的情况? [复制链接]

论坛徽章:
1
荣誉会员
日期:2011-11-23 16:44:17
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2005-12-13 15:42 |只看该作者 |倒序浏览
今天有个程序core掉了,调试了一下,跟踪临时变量的地址,发现很奇怪的现象:
地址一开始递减,跑到一个动态库so中,就变成递增了,象这样:
程序开始:30322d98
调用动态库前:30321db0
动态库中(分配临时变量前):30317238
动态库中(分配临时变量后):30321190

可以看出分配了大约40多k的临时变量,但这些变量地址怎么是递增的?增到一定程序,把原来的栈破坏掉了,程序core dump

环境是AIX 5
谁遇到过没有?帮忙解释一下?

论坛徽章:
0
2 [报告]
发表于 2005-12-13 17:20 |只看该作者
对不起,我解释不了。
我是来求学的。
24点的算法。
你原来的注释看不太明白,你有更好的方法计算吗?
你有空能发个注释给我吗?
cheesae@tom.com

先谢谢了!

论坛徽章:
1
荣誉会员
日期:2011-11-23 16:44:17
3 [报告]
发表于 2005-12-13 17:25 |只看该作者
楼上的不要这样啊~~~
那都是好久以前的程序了,我总得自己看一下再说吧?

论坛徽章:
0
4 [报告]
发表于 2005-12-13 17:36 |只看该作者
呵呵,对不起!
等您看完,有空的时候,不忘给我发一个注释。
谢谢了

论坛徽章:
0
5 [报告]
发表于 2005-12-13 20:55 |只看该作者
没遇到过。共享库的函数,其中的自动变量也是在栈里,不该与普通函数的压栈方向不一样啊

论坛徽章:
0
6 [报告]
发表于 2005-12-13 21:57 |只看该作者
LZ能否说明一下, 几个数值是怎么得到的.

这是32位PPC吧.

论坛徽章:
1
荣誉会员
日期:2011-11-23 16:44:17
7 [报告]
发表于 2005-12-14 09:07 |只看该作者
  1. #include <iostream>
  2. using namespace std;

  3. int main()
  4. {
  5.     char s[100];
  6.     int  n[100];
  7.     double d[100];

  8.     sprintf(s, "%p", s);
  9.     cout << s << endl;
  10.     sprintf(s, "%p", n);
  11.     cout << s << endl;
  12.     sprintf(s, "%p", d);
  13.     cout << s << endl;
  14.     {
  15.         char c;
  16.         sprintf(s, "%p", &c);
  17.         cout << s << endl;
  18.     }
  19. }
复制代码

在AIX 5上用xlC_r编译(g++类似)
2ff22100
2ff22168
2ff222f8
2ff22618

在HP-UX上用aCC编译(g++类似)
77a70a10
77a70a74
77a70c08
77a70f28

在LINUX上
0xbfffe780
0xbfffe5f0
0xbfffe2d0
0xbfffe2cf

可以看出在AIX和HP上都是先把局部变量的空间先算出来,然后从低到高分配
之前说的溢出是因为用的visibroker线程有栈空间限制(只有64K?)分配了过多的局部变量的原因,而与地址增长无关

论坛徽章:
0
8 [报告]
发表于 2005-12-14 16:19 |只看该作者
aix真是个怪物,我半星期来忙得焦头烂额的调试,竟然发现Sys V的IPC之前,ftok全给我返回-1 。 只好定义了个wrapper,自己返回一个key,问题才解决了。 在yuxh大哥的帖子上搭车感慨下。

论坛徽章:
0
9 [报告]
发表于 2005-12-14 22:30 |只看该作者
64K是有点小.

栈地址递减是相对于stack frame之间吧, 同一stack frame里的临时变量地址应当是compiler自由选择的.

论坛徽章:
0
10 [报告]
发表于 2005-12-14 22:47 |只看该作者
如果系统实现了 alloc, 可以用它来测试栈的增长方向。

[ 本帖最后由 win_hate 于 2005-12-15 00:14 编辑 ]
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP