Переполнение буфера в стеке. Компилятор
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int check_authentication(char *pas)
{
char pas_buffer[16];
int auth_flag = 0;
strcpy(pas_buffer, pas);
if(strcmp(pas_buffer, "brillig") == 0)
auth_flag = 1;
if(strcmp(pas_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("Access Granted\n");
else
printf("Access Denied\n");
return 0;
}
При переполнении буфера программы, в переменную auth_flag заноситсся ненулевое значение, из-за чего получаем "Access Granted". Но ведь переменная auth_flag должно добавляться в стек после массивка pas_buffer. Т.е. значение переменной auth_flag должно оставаться равным 0
Изучаю переполнение буфера. Но столкнулся с такой проблемой, что переменные в стеке хранятся в неправильном порядке. Узнал, что компилятор может менять порядок переменных в стеке(для оптимизации или чего-то еще). Можно как-нибудь сделать так, чтобы компилятор(gcc) ничего не изменял? Или посоветуйте другой компилятор