У меня создалось впечатление, что заказ, который вы объявили переменной, будет определять порядок их размещения в стеке при вызове функции, будет обратная связь (обратный порядок от того, как они объявлены будет использоваться, чтобы поместить их в стек).Заказ переменных стека gcc
Например, у меня есть две переменные:
char buffer[16];
int flag = 0;
Я хотел бы быть уверенным, что флаг всегда ставится перед буфер, но независимо от того, в каком порядке я объявить их в C, GDB показывает, что буфер всегда помещается перед флагом в стеке, что очень плохо для переполнения буфера на основе стека. Почему это?
Система им помощь в Arch Linux 64bit работает на x86_64 с GCC 5.2
Не переполняйте стековые буферы - тогда ваше требование исчезает. –
Возможно, компилятор пытается сделать интенсивные переполнения буфера более сложными? :-) –