2015-10-08 3 views
1

У меня создалось впечатление, что заказ, который вы объявили переменной, будет определять порядок их размещения в стеке при вызове функции, будет обратная связь (обратный порядок от того, как они объявлены будет использоваться, чтобы поместить их в стек).Заказ переменных стека gcc

Например, у меня есть две переменные:

char buffer[16]; 
int flag = 0; 

Я хотел бы быть уверенным, что флаг всегда ставится перед буфер, но независимо от того, в каком порядке я объявить их в C, GDB показывает, что буфер всегда помещается перед флагом в стеке, что очень плохо для переполнения буфера на основе стека. Почему это?

Система им помощь в Arch Linux 64bit работает на x86_64 с GCC 5.2

+0

Не переполняйте стековые буферы - тогда ваше требование исчезает. –

+0

Возможно, компилятор пытается сделать интенсивные переполнения буфера более сложными? :-) –

ответ

2

Там нет гарантированного упорядочения переменных стека. Если вы хотите применить конкретный заказ, поместите их в структуру.

Смежные вопросы