wAterLoo 发表于 2012-3-17 02:11:49

分享一段有助于理解堆栈缓冲区溢出的代码

本帖最后由 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=0;

    printf("Hello World!\n");

}

}

Next_Enter 发表于 2012-3-17 19:47:47

?a=0?a一个常量地址可以赋值?

wAterLoo 发表于 2012-3-18 02:40:38

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

Next_Enter 发表于 2012-3-17 19:47 static/image/common/back.gif
?a=0?a一个常量地址可以赋值?
不知道怎么回事,编辑从VC复制过来后居然少字符了
已更正

Next_Enter 发表于 2012-3-27 20:04:14

:( 这个赋值是不是赋值到了 i上
我这里也有一段 我以前写的

差不多
#include <iostream>
using namespace std;
int main()
{
char bufPass="123456";
char bufIn;
cout<<"请输入密码!\n";
int i=3;
while(i--)
{
cin>>bufIn;
if (strcmp(bufPass,bufIn)==0)
{
          cout<<"登录成功!\n";
}
else
{
          cout<<"登录失败!\n";
}
}
return 0;
}

Next_Enter 发表于 2012-3-27 20:04:38

0018FF3831 31 31 31 31 31 00 CC111111..
0018FF4031 32 33 34 35 36 00 CC123456..

Next_Enter 发表于 2012-3-27 20:05:27

如果我输入超了 就会赋值到 0018FF4031 32 33 34 35 36 00 CC123456.. 这 哈哈
页: [1]
查看完整版本: 分享一段有助于理解堆栈缓冲区溢出的代码