鱼C论坛

 找回密码
 立即注册
查看: 2237|回复: 5

[争议讨论] 分享一段有助于理解堆栈缓冲区溢出的代码

[复制链接]
发表于 2012-3-17 02:11:49 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
本帖最后由 wAterLoo 于 2012-3-18 02:43 编辑

把下面的的代码执行一遍,想象为什么?如果没想明白,可以跟踪汇编代码
#include<stdio.h>

void main()

{

  int i=0;

  int a[]={1,2,3,4,5,6,7,8,9,10};



  for(i=0;i<=10;i++)

  {

    a[10]=0;

    printf("Hello World!\n");

  }

}

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
发表于 2012-3-17 19:47:47 | 显示全部楼层
?a=0?  a一个常量地址  可以赋值?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
 楼主| 发表于 2012-3-18 02:40:38 | 显示全部楼层
本帖最后由 wAterLoo 于 2012-3-18 02:42 编辑

不知道怎么回事,编辑从VC复制过来后居然少字符了
已更正
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
发表于 2012-3-27 20:04:14 | 显示全部楼层
:( 这个赋值是不是赋值到了 i上
我这里也有一段 我以前写的

差不多
#include <iostream>
using namespace std;
int main()
{
  char bufPass[7]="123456";
  char bufIn[7];
  cout<<"请输入密码!\n";
  int i=3;
  while(i--)
  {
  cin>>bufIn;
  if (strcmp(bufPass,bufIn)==0)
  {
          cout<<"登录成功!\n";
  }
  else
  {
          cout<<"登录失败!\n";
  }
}
return 0;
}
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
发表于 2012-3-27 20:04:38 | 显示全部楼层
0018FF38  31 31 31 31 31 31 00 CC  111111..
0018FF40  31 32 33 34 35 36 00 CC  123456..
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
发表于 2012-3-27 20:05:27 | 显示全部楼层
如果我输入超了 就会赋值到 0018FF40  31 32 33 34 35 36 00 CC  123456.. 这 哈哈
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-10-8 10:54

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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