演示缓冲区溢出的代码

1602阅读 4评论2008-08-19 freearth
分类:C/C++

下午什么也不想干,心气烦躁......
基本上是打开什么,扫两眼,关掉什么。大概每个人都有这种时候吧。
无聊之余,忽然想起来以前了解过的缓冲区溢出攻击,虽然知道是怎么回事,但是从来没有自己动手写一个。于是就有了下面更加无聊的代码。在x86,32位,Fedora 9上可以成功。
%{
#include
#include
void print1(char *str);
void print2();

int main(int argc, char *argv[])
{
    char buf[32]={0};
    int *p=(int *)(buf+8);
    int i;
    for(i=0;i<8;i++)
        buf[i]='a';
    *p=(int *)print2;
    print1(buf);
    return 0;
}

void strcp(char *str1, char *str2)
{
    int i=0;
    while(str2[i]!='\0'){
        str1[i]=str2[i];
        i++;
    }
    str1[i]='\0';
    return;
}

void print1(char *str)
{
    char buf[4];
    strcp(buf,str);
    return;
}

void print2()
{
    printf("Hello, world!\n");
    exit(0);
    return;
}

%}
上一篇:Compilers Chaper 9 总结
下一篇:Compilers Chaper 10 总结

文章评论