Чтобы ваш шелл-код работал правильно, вам нужно скомпилировать вашу программу с флагом -z execstack
. Это отключает защиту NX , которая включена по умолчанию, и предотвращает пометку страниц, содержащих данные, как исполняемые. Если вы не отключите NX, программа выйдет из строя, потому что страница памяти, куда будет помещена ваша строка шелл-кода, не будет исполняемой, и процесс будет уничтожен при попытке выполнить его содержимое.
Я также вижу int 0x80
в вашем шелл-коде, поэтому я предполагаю, что это должен быть 32-битный шелл-код x86. Кроме этого вы пропускаете int
перед main()
, но я думаю, что это ошибка копирования-вставки.
Скомпилируйте вашу программу с:
gcc -m32 -z execstack prog.c