эксплойт: SIGSEGV, ошибка сегментации

Для моего задания hw я пытаюсь использовать файл c переполнения. Я не могу редактировать исходный файл, и я также не могу его перекомпилировать.

Я добрался до того, что вернулся по намеченному адресу. Однако после того, как он выполнил код некоторое время, я получаю следующее:

   0xffffcc38                  pop    %eax
   0xffffcc39                  push   %eax
   0xffffcc3a                  pop    %ecx
 → 0xffffcc3b                  xor    0x30(%ebp), %eax
   0xffffcc3e                  xor    %eax, 0x30(%ebp)
   0xffffcc41                  xor    %esi, 0x30(%ebp)
   0xffffcc44                  xor    0x30(%ebp), %esi
   0xffffcc47                  pop    %ax
   0xffffcc49                  push   $0x68736538
   0xffffcc3b in ?? ()


gef➤

Program terminated with signal SIGSEGV, Segmentation fault.
The program no longer exists.

Он работал нормально с 0xffffcc30-> 0xffffcc3a, но внезапно остановился на 0xffffcc3b. Могу ли я узнать, почему это могло произойти?


person Nandar Soe    schedule 30.09.2018    source источник
comment
Как кто-нибудь сможет сказать, не имея доступа к исполняемому файлу и вашему коду?   -  person Swordfish    schedule 30.09.2018


Ответы (1)


Могу ли я узнать, почему это могло произойти?

Если эта инструкция произвела SIGSEGV:

0xffffcc3b                  xor    0x30(%ebp), %eax

тогда надежная ставка на то, что $EBP + 0x30 указывает на недоступную память.

Скорее всего, вы «наступили» на $EBP ранее в своем эксплойте.

person Employed Russian    schedule 30.09.2018