Кажется, что ваша программа скомпилирована для использования A ddress S pace L ayout R andomization (ASLR).При каждом выполнении вашей программы основные разделы памяти (такие как ваш код, глобальные переменные, стек и т. Д.) Отображаются в случайный адрес памяти.Таким образом, адрес «перемещается» каждый раз, когда вы выполняете свою программу.
Я бы посоветовал вам проверить, можно ли отключить ASLR для вашей программы, скомпилировав его для использования фиксированных адресов.Другим вариантом может быть временное отключение ASLR для вашего ПК (что не рекомендуется, поскольку пользователи обычно забывают включить его впоследствии).
Еще один прием, который я часто использую, поскольку это упражнение, заключается в том, чтобы "утечка "адрес, который вы хотите использовать вручную.Добавьте строку печати в вашу программу, чтобы напечатать нужный адрес, и только затем ждите ввода, который переполнит программу.Сделав параметрический эксплойт по адресу, вы сможете использовать упражнение (имитирующее случай реального слова, в котором вам нужна утечка памяти, чтобы ваша атака сработала).
Например (взято из тестамодуль разведчик ):
printf("The buffer is at address: %p\n", buffer);
printf("Press ENTER to continue\n");
fgetc(stdin);