C 堆栈溢出-保存的帧指针出现sigsegv错误

C 堆栈溢出-保存的帧指针出现sigsegv错误,c,stack,overflow,buffer,C,Stack,Overflow,Buffer,我试图在64位Linux操作系统上实现一个简单的缓冲区溢出。问题是,如果保存的帧指针被覆盖,我会得到一个总线错误(SIGSEGV) 下面是C代码: #include <string.h> #include <stdio.h> void func(char *buffer) { char string[24]; strcpy (string, buffer); } int main (int argc, char *argv[]) { if (a

我试图在64位Linux操作系统上实现一个简单的缓冲区溢出。问题是,如果保存的帧指针被覆盖,我会得到一个总线错误(SIGSEGV)

下面是C代码:

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

void func(char *buffer)
{
    char string[24];
    strcpy (string, buffer);
}

int main (int argc, char *argv[])
{
    if (argc > 1)
        func(argv[1]);

    printf("asdf\n");
}

使用strncpy(string,buffer,23)然后添加空终止符。欢迎使用堆栈溢出。请尽快阅读这一页。严格来说,SIGBUS(总线错误)不同于SIGSEGV(分段冲突)。请准确。是什么让您认为0x00400595是一个很好的返回地址?你期望发生什么,为什么?西斯格塞格夫看起来是对我的合理回应。
./a.out $(perl -e 'printf "A" x 36 . "\x95\x05\x40";')