Я читаю Взлом: Искусство эксплуатации (2-е издание) , и я в настоящее время нахожусь в разделе о переполнении буфера.
В первом примере переменные объявляются / инициализируются в следующем порядке:
int auth_flag = 0;
char password_buffer[16];
Далее в этом примере объясняется, что вы можете использовать gdb для проверки адресов auth_flag
и password_buffer
, и вы заметите, что адрес auth_flag
выше password_buffer
. Что нужно иметь в виду: я запускаю все это в Ubuntu в Virtualbox на Macbook Pro (процессор Intel, 64-разрядный).
Я скомпилировал код первого примера следующим образом: gcc -g -fno-stack-protector -o auth_overflow auth_overflow.c
Как и ожидалось, адрес auth_flag
выше, чем password_buffer
.
Чтобы устранить проблему, представленную выше, автор объясняет, что вы должны изменить порядок объявлений:
char password_buffer[16];
int auth_flag = 0;
Я скомпилировал код так же: gcc -g -fno-stack-protector -o auth_overflow2 auth_overflow2.c
К сожалению, я не увидел адрес auth_flag
ниже, чем password_buffer
. На самом деле это было еще выше. Почему это? Что я делаю неправильно?