strcpy分段错误(ELF可执行文件)

strcpy分段错误(ELF可执行文件),c,gcc,C,Gcc,我知道程序中有一个BoF,但是缓冲区没有超过“AA”,那么,为什么我会得到“分段错误” 这是来源: #include <stdio.h> #include <string.h> #include <stdlib.h> void func(char *arg) { char name[32]; strcpy(name, arg); printf("\nWelcome, %s\n\n", name); } int main(int ar

我知道程序中有一个BoF,但是缓冲区没有超过“AA”,那么,为什么我会得到“分段错误”

这是来源:

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

void func(char *arg)
{
    char name[32];
    strcpy(name, arg);
    printf("\nWelcome, %s\n\n", name);
}

int main(int argc, char *argv[])
{
    if (argc != 2)
    {
        printf("Use: %s YOUR_NAME\n", argv[0]);
        exit(0);
    }

    func(argv[2]);
    printf("The end\n\n");

    return 0;
}
#包括
#包括
#包括
无效函数(字符*参数)
{
字符名[32];
strcpy(名称,arg);
printf(“\n帮助,%s\n\n”,名称);
}
int main(int argc,char*argv[])
{
如果(argc!=2)
{
printf(“使用:%s您的_NAME\n”,argv[0]);
出口(0);
}
func(argv[2]);
printf(“结束\n\n”);
返回0;
}

取消对空指针的引用
argv[argc]
定义为
NULL


我想你的意思是
func(argv[1])。数组在C中从零开始索引。

失败!为什么没有初始化为32个空的名称缓冲区时没有出现错误?使用空指针的strcpy会导致未定义的行为
#include <stdio.h>
#include <string.h>
#include <stdlib.h>

void func(char *arg)
{
    char name[32];
    strcpy(name, arg);
    printf("\nWelcome, %s\n\n", name);
}

int main(int argc, char *argv[])
{
    if (argc != 2)
    {
        printf("Use: %s YOUR_NAME\n", argv[0]);
        exit(0);
    }

    func(argv[2]);
    printf("The end\n\n");

    return 0;
}