8

下面代码的输出是“溢出”,但我没有显式调用该func函数。它是如何工作的?

#include<stdio.h>
#include<string.h>
#include<stdlib.h>

int copy(char *input)
{
    char var[20];
    strcpy(var, input);
    return 0;
}

int func(void)
{
    printf("Overflow\n");
    return 0;
}

int main(int argc, char *argv[])
{
    char str[] = "AAAABBBBCCCCDDDDEEEEFFFFGGGG";
    int *p = (int *)&str[24];
    *p = (int)func;

    copy(str);
    return 0;
}
4

1 回答 1

11

copy函数溢出函数中的var缓冲区,并用copy函数的地址覆盖main返回地址func

copy函数返回时,不是在函数调用main之后返回,而是返回到函数。copyfunc

于 2012-11-13T13:27:06.373 回答