启动gas x86 n遇到段错误?

问题描述

帮助我不明白为什么会出现段错误

void *cp1(void *a,const void *b,size_t c){
    c=0;
    asm volatile(
    "movl $0x1,0x10(%%ebp)\n\t"
    :::);
    printf("n %zu\n",c);
}

我尝试objdump并得到它,

mov $0x0,0x10(%%ebp)\n\t ; this c=0
mov $0x1,0x10(%%ebp)\n\t ; this code from my asm volatile,n cause segfault

为什么我的asm代码出现段错误

解决方法

几个小时后,即时比较文件输出gcc,在asm文件.s上参数的偏移量不使用ebp而是esp,我找到了 参数1 12(%esp) 参数2 16(%esp) 参数3 20(%esp)

但是在我的代码上 参数3为0x10(%ebp)

这种情况可能是因为,gcc不会解析我的asm,而只是进行复制,因为im不在我的代码上使用操作数输入/输出。 Gcc将我的代码作为asm基本未扩展。 只需将粘贴复制到文件.s。