免费注册 查看新帖 |

Chinaunix

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

[C++] [求教]栈的溢出覆盖,结果和我的期待不一样。 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2014-01-01 20:05 |只看该作者 |倒序浏览
我知道x86平台上栈是从高地址到低地址增长,数组元素是从低地址到高地址增长。所以,数组元素越界的话,会把高地址的元素覆盖掉。
下面是个测试程序,我使用GCC和VC(release版,不开优化)编译运行。

其中a[1]是个int数组,只有一个元素,如果对于a[1]赋值,导致溢出: 我期待的是栈上面的j变量被覆盖,因为距离近,printf打印11.
但是运行的结果是,看起来变量i被覆盖了,打印的结果是12.

以上两个编译器编译运行的结果都是12.这是为什么呢? 难道我的理解有什么偏差吗?
源代码:

  1. int main(){
  2.     int i=1;
  3.     int j=2;
  4.     int a[1];
  5.     a[1]=10;
  6.     printf("%d\n",i+j);
  7.     return 0;
  8. }
复制代码

论坛徽章:
16
CU十二周年纪念徽章
日期:2013-10-24 15:41:3415-16赛季CBA联赛之广东
日期:2015-12-23 21:21:55青铜圣斗士
日期:2015-12-05 10:35:30黄金圣斗士
日期:2015-11-26 20:42:16神斗士
日期:2015-11-19 12:47:50每日论坛发贴之星
日期:2015-11-18 06:20:00程序设计版块每日发帖之星
日期:2015-11-18 06:20:002015亚冠之城南
日期:2015-11-10 19:10:492015亚冠之萨济拖拉机
日期:2015-10-28 18:47:282015亚冠之柏太阳神
日期:2015-08-30 17:21:492015亚冠之山东鲁能
日期:2015-07-07 18:48:39摩羯座
日期:2014-08-29 23:01:42
2 [报告]
发表于 2014-01-01 23:54 |只看该作者
看哈反汇编结果

论坛徽章:
4
白羊座
日期:2013-09-17 21:59:30技术图书徽章
日期:2013-10-12 22:16:03白羊座
日期:2013-10-14 11:01:40双子座
日期:2013-12-17 18:26:39
3 [报告]
发表于 2014-01-02 00:37 |只看该作者
局部变量的存放顺序应当没有被规定,不同的编译器实现可能不同,
同一编译器不同版本,不同的优化级别都可能不同

论坛徽章:
95
程序设计版块每日发帖之星
日期:2015-09-05 06:20:00程序设计版块每日发帖之星
日期:2015-09-17 06:20:00程序设计版块每日发帖之星
日期:2015-09-18 06:20:002015亚冠之阿尔艾因
日期:2015-09-18 10:35:08月度论坛发贴之星
日期:2015-09-30 22:25:002015亚冠之阿尔沙巴布
日期:2015-10-03 08:57:39程序设计版块每日发帖之星
日期:2015-10-05 06:20:00每日论坛发贴之星
日期:2015-10-05 06:20:002015年亚冠纪念徽章
日期:2015-10-06 10:06:482015亚冠之塔什干棉农
日期:2015-10-19 19:43:35程序设计版块每日发帖之星
日期:2015-10-21 06:20:00每日论坛发贴之星
日期:2015-09-14 06:20:00
4 [报告]
发表于 2014-01-02 00:40 |只看该作者
回复 1# sampher


    变量在代码中出现的顺序和它们在栈中(如果它们确实在栈中出现的话)的顺序之间是没有对应关系的。例如用 gcc 4.8.2 在 Linux 下测试你的代码,结果就是 11。

论坛徽章:
0
5 [报告]
发表于 2014-01-02 18:38 |只看该作者
MMMIX 发表于 2014-01-02 00:40
回复 1# sampher

谢谢。。。。。。。。。
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP