2014-02-19 3 views
0

Я пытаюсь создать оболочку с помощью shellcode. Полезная нагрузка находится в самой программе, однако, когда я запускаю программу отдельно, я получаю ошибку сегментации, но при запуске в gdb открывается моя оболочка. Может кто-нибудь указать, в чем проблема?Выполняется в gdb, но не из gdb

[email protected]:~/folder$ ./a.out h h 
Segmentation fault (core dumped) 

[email protected]:~/folder$ gdb -q a.out 
Reading symbols from /home/folder/a.out...done. 
(gdb) run h h 
Starting program: /home/folder/a.out h h 
process 22119 is executing new program: /bin/dash 
$ 
$ 
+0

У меня был гейзенбаг как то раз. Это было неопределенное поведение, вызванное кучевой коррупцией. Будьте благодарны, это воспроизводимо. Я предлагаю вам сузить код до [минимального полного примера] (http://www.sscce.org), опубликовать его, и мы попытаемся обнаружить ошибку. – Beta

ответ

3

, что проблема может быть

Во-первых, так как вы получаете core, вы можете просто посмотреть на него, чтобы понять аварии.

Во-вторых, GDB отключает адрес рандомизации (ASLR) по умолчанию (чтобы сделать его проще для вас для отладки, так что все остается на одном месте), в то время как работает a.out за пределами GDB, вероятно, имеет полный ASLR, что, возможно, объясняет различное поведение от a.out с и без GDB.

Вы можете отключить ASLR глобально:

sudo -c "echo 0 > /proc/sys/kernel/randomize_va_space" 

Или вы можете включить рандомизации в GDB:

(gdb) set disable-randomization off 
Смежные вопросы