| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 807 人关注过本帖
标题:利用堆栈溢出对程序的操作
只看楼主 加入收藏
d1003577678
Rank: 1
等 级:新手上路
帖 子:18
专家分:9
注 册:2014-11-9
结帖率:100%
收藏
已结贴  问题点数:20 回复次数:8 
利用堆栈溢出对程序的操作
代码在下面

当输入58个字符时,报错,输入56个却没有。
单buffer长度只有50
为什么??

[ 本帖最后由 d1003577678 于 2015-4-13 13:13 编辑 ]
2015-04-13 13:11
wp231957
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:神界
等 级:贵宾
威 望:423
帖 子:13688
专家分:53332
注 册:2012-10-18
收藏
得分:4 
无图无真相  无代码无真相

DO IT YOURSELF !
2015-04-13 13:11
d1003577678
Rank: 1
等 级:新手上路
帖 子:18
专家分:9
注 册:2014-11-9
收藏
得分:0 
void good()
{
    FILE *fp;
    char name[20], phone[20];
    puts("Win!");
    printf("Your name: ");
    scanf("%s", name);
    printf("Your phone number: ");
    scanf("%s", phone);
    fp = fopen("/home/ving/winner_A","ab+");
    fprintf(fp,"%s\t%s\n",name,phone);
    fclose(fp);
}

void bad()
{
    printf("I'm sorry, you're at %p and you want to be at %p\n", bad, good);
}

int main(int argc, char **argv)
{
    void (*fp)(void) = bad;
    char buffer[50];

    if(argc != 2 || strlen(argv[1]) < 4)
        return 0;

    memcpy(buffer, argv[1], strlen(argv[1]));
    memset(buffer, 0, strlen(argv[1]) - 4);

    fp();

    return 0;
}
2015-04-13 13:11
d1003577678
Rank: 1
等 级:新手上路
帖 子:18
专家分:9
注 册:2014-11-9
收藏
得分:0 
回复 3楼 d1003577678
applicant@t:~$ ./Problem_A aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa0x4007ad
Segmentation fault (core dumped)
applicant@t:~$ ./Problem_A aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa4007ad
I'm sorry, you're at 0x400848 and you want to be at 0x4007ad
2015-04-13 13:12
d1003577678
Rank: 1
等 级:新手上路
帖 子:18
专家分:9
注 册:2014-11-9
收藏
得分:0 
回复 楼主 d1003577678
Your task is to change the function pointer fp's value from function bad to function good.
Stack overflow is your chance.
2015-04-13 13:12
wp231957
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:神界
等 级:贵宾
威 望:423
帖 子:13688
专家分:53332
注 册:2012-10-18
收藏
得分:0 
LINUX下的代码????  搞不懂你想表达什么

DO IT YOURSELF !
2015-04-13 13:14
forever74
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:CC
等 级:版主
威 望:58
帖 子:1705
专家分:4345
注 册:2007-12-27
收藏
得分:4 
错误就是错误,不用费心去研究为什么,那个是平台相关的,换个环境结果就不同了。

对宇宙最严谨的描述应该就是宇宙其实是不严谨的
2015-04-13 14:53
z_j_j_1
Rank: 4
等 级:业余侠客
威 望:1
帖 子:62
专家分:213
注 册:2015-4-4
收藏
得分:4 
回复 楼主 d1003577678
我明白你的意思!
你的意思是同样是溢出 56 和58 为什么结果不一样对吧?
其实 只要是溢出就有可能出错 因为不受程序员控制了,溢出部分是由编译器随机处理的。56没有出错 只能说明运气好点 编译器恰巧没有覆盖溢出部分的内存。
2015-04-13 15:05
zhangqi_gsts
Rank: 6Rank: 6
来 自:甘肃天水
等 级:侠之大者
威 望:1
帖 子:227
专家分:457
注 册:2011-3-27
收藏
得分:4 
很简单,越界后内存的随机性
2015-04-13 18:39
快速回复:利用堆栈溢出对程序的操作
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.016823 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved