#include <stdlib.h>
#include <unistd.h>
#include <stdio.h>
int main(int argc, char **argv) {
int modified;
char buffer[64];
modified = 0;
gets(buffer);
if(modified != 0)
printf("Changed!");
else
printf("Not changed!");
}
Я пытаюсь поиграть с переполнением буфера.
Когда счетчик программы достигает if ( изменено! = 0) , базовый указатель равен 0x00007fffffffdfe0.
Прямо под базовым указателем я вижу 4 байта, которые содержат целое число 0, что имеет смысл.
Однако буфер не прямо под измененным int.
Похоже, что 4 байта по 0 затем 0x00007fff находятся в стеке, затем 64 байта As, которые я ввел, следуют после.
Почему нет буфера символов [ 64] приходят сразу после изменения int? почему есть «пробел»?
Я скомпилировал его с помощью g cc -g -fno-stack-protector test1. c -o test1
Спасибо