Выполнение в стеке в GDB? - PullRequest
0 голосов
/ 10 мая 2018

Я работаю над двоичным упражнением Capture The Flag, первым в серии. У меня была идея записать код в стек и выполнить его. Чтобы проверить это, я запустил исполняемый файл со специальным вводом, чтобы он переходил к коду в стеке. Чтобы проверить это, я использовал gdb, и это сработало!

Однако, когда я попытался запустить это за пределами gdb, я получил страшную Segmentation Fault. Я думаю это потому, что Ubuntu 16.04 не позволяет выполнять код в стеке, но я не уверен.

Если это так, почему я могу выполнить в gdb?

Также я попытался использовать execstack -s в бинарном упражнении, ничего не получалось, поэтому я начинаю подозревать, что у меня могут быть другие проблемы. Но, если у меня возникли другие проблемы, как я могу отладить эти проблемы, не прибегая к gdb, при котором процесс работает отлично?

1 Ответ

0 голосов
/ 12 мая 2018

Спасибо Марку Плотнику за помощь в ответе!

Получается, что я могу выполнить из стека, в GDB и вне GDB. Проблема была, действительно, ASLR. Я определил «фактическое значение» указателя стека, чтобы программа «вернулась в стек», куда я ввел программу. Это в отличие от записи адреса памяти указателя стека как непосредственного, который работал в GDB, но не работал бы вне его, потому что, как говорит Марк Плотник, «GDB отключает ASLR», который рандомизирует базовый адрес указателя стека.

...