Это зависит от платформы во многих отношениях.Не вся ваша память является исполняемой, и в современной системе обычно существует исключительная ситуация - или между памятью, которая может быть записана, и памятью, которая является исполняемой, именно по этим причинам.Если вы используете linux, вы можете захотеть собрать стек с дополнительными вызовами mprotect
, поэтому вы измените его на исполняемый.Это потребует более сложной и составленной полезной нагрузки, но выполнимо.
Другой вариант заключается в том, что у вас все еще есть проблемы в аргументах после обратного адреса, что означает, что вам может «повезти» с вызовом другогофункция, поскольку вы не повредили стек, но когда вы вставили свой код, вы сделали.
Для дальнейшего чтения:
- NX бит
- mprotect