问题描述
帮助我不明白为什么会出现段错误。
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
解决方法
几个小时后,即时比较文件输出gcc,在asm文件.s上参数的偏移量不使用ebp而是esp,我找到了 参数1 12(%esp) 参数2 16(%esp) 参数3 20(%esp)
但是在我的代码上 参数3为0x10(%ebp)
这种情况可能是因为,gcc不会解析我的asm,而只是进行复制,因为im不在我的代码上使用操作数输入/输出。 Gcc将我的代码作为asm基本未扩展。 只需将粘贴复制到文件.s。