Я работаю над простой атакой переполнения буфера. Программа принимает массив размером 12, который при переполнении явно перезаписывает элементы в стеке, включая указатель возврата. Стек выглядит любит это перед входом I элементов в массив:Не уверен, что изменить адрес возврата в атаку переполнения буфера
0xffffcf80: 0x00000000 0x00000000 0xffffcfa8 0x00209210
0xffffcf90: 0xffffcfd8 0x00209210 0x003514e0 0x080486a4
0xffffcfa0: 0xffffcfb4 0x00350ff4 **0xffffcfd8** 0x08048543
Я один жирным шрифтом я считаю, что обратный адрес. Когда я вводим шестнадцатеричную строку, например: 11 11 11 11 22 22 22 22 33 33 33 33 44 44 44 44 55 55 55 55, а затем я попробовал другую ячейку памяти в качестве последней части записи, чтобы указать обратный адрес в другом месте. Я всегда получаю ошибку незаконной инструкции.
Я пробовал много разных мест памяти, которые получаю от использования команды info frames в gdb, но все они возвращают тот же результат. Я думаю, что мне просто сложно понять концепцию. Я хотел бы получить любое объяснение или помощь, даже если это не связано напрямую с моим вопросом. Заранее спасибо!
Попробуйте скомпилировать вашу программу с помощью '-fno-stack-protector' (для отключения проверки стека стека) и' -fno-PIE' (чтобы отключить рандомизацию местоположения исполняемого кода, так как вы хотите перейти на фиксированный адрес). –