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

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

[ 本帖最后由 d1003577678 于 2015-4-13 13:13 编辑 ]
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
快速回复:利用堆栈溢出对程序的操作
数据加载中...
 
   



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

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