请高手指教这个栈溢出问题
我使用的是ubuntu 12.04 系统。程序代码:
#include <stdio.h> #include <stdlib.h> #include <string.h> int check_authentication(char *password) { int auth_flag = 0; char password_buffer[16]; strcpy(password_buffer, password); if(strcmp(password_buffer, "brillig") == 0) auth_flag = 1; if(strcmp(password_buffer, "outgrabe") == 0) auth_flag = 1; return auth_flag; } int main(int argc, char *argv[]) { if(argc < 2) { printf("Usage: %s <password>\n", argv[0]); exit(0); } if(check_authentication(argv[1])) { printf("\n-=-=-=-=-=-=-=-=-=-=-=-=-=-\n"); printf(" Access Granted.\n"); printf("-=-=-=-=-=-=-=-=-=-=-=-=-=-\n"); } else { printf("\nAccess Denied.\n"); } }
以上是代码。
之后我利用栈溢出,在password_buffer数组中输入了一个很大的内容,并最终将一个新地址写入了调用函数的返回地址中。但是结果却没有跳转到新地址运行,而是直接提示错误就退出了。
请高手指教这是不是和系统有一定关系呢。