Assembly 汇编作业分配错误
我有以下两个文件: 任务2.s: 以及main2.c文件:Assembly 汇编作业分配错误,assembly,x86,Assembly,X86,我有以下两个文件: 任务2.s: 以及main2.c文件: #include <stdio.h> #include <string.h> #include<stdlib.h> #define BUFFER_SIZE(1024) extern void isDivisibleBy3(int x); int main(int argc, char** argv) { char buf[BUFFER_SIZE]; printf("Enter st
#include <stdio.h>
#include <string.h>
#include<stdlib.h>
#define BUFFER_SIZE(1024)
extern void isDivisibleBy3(int x);
int main(int argc, char** argv)
{
char buf[BUFFER_SIZE];
printf("Enter string: ");
fflush(stdout);
fgets(buf, BUFFER_SIZE, stdin);
int number=atoi(buf);
printf("Got Number: %d\n", number);
isDivisibleBy3(number);
return 0;
}
int check(int evenBits, int oddBits){
int res=abs(evenBits-oddBits);
switch (res){
case 0:{return 1;}
case 1:{return -1;}
case 2:{return -1;}
default: {isDivisibleBy3(res);}
}
return 0;
}
我认为堆栈上的5和8是和偶数和和奇数
我不知道如何克服堆栈上的错误,也不知道为什么这会发生在长数字上。检查
函数中的default
分支最终将返回0
,并且此0
的asm代码不会“恢复调用方状态”(清理堆栈),它只使用了一个普通的ret
。非常感谢!
#include <stdio.h>
#include <string.h>
#include<stdlib.h>
#define BUFFER_SIZE(1024)
extern void isDivisibleBy3(int x);
int main(int argc, char** argv)
{
char buf[BUFFER_SIZE];
printf("Enter string: ");
fflush(stdout);
fgets(buf, BUFFER_SIZE, stdin);
int number=atoi(buf);
printf("Got Number: %d\n", number);
isDivisibleBy3(number);
return 0;
}
int check(int evenBits, int oddBits){
int res=abs(evenBits-oddBits);
switch (res){
case 0:{return 1;}
case 1:{return -1;}
case 2:{return -1;}
default: {isDivisibleBy3(res);}
}
return 0;
}
the number is divisible by 3
Program received signal SIGSEGV, Segmentation fault.
0x00000005 in ?? ()
(gdb) where
#0 0x00000005 in ?? ()
#1 0x00000008 in ?? ()
#2 0x00000000 in ?? ()