Как мне взломать работающую программу с помощью GDB? - PullRequest
0 голосов
/ 24 октября 2018

Если я запускаю программу под GDB, как мне сломаться в произвольной точке?Нажатие Ctrl + C убивает программу.Ctrl + Break ничего не делает.

Я не могу вводить команды GDB, потому что моя программа сама находится в цикле REPL, поэтому все, что я ввожу, идет в мою программу, а не в GDB.

Моя программаиспользует linenoise для реализации REPL;Я предполагаю, что это скрывает Ctrl + C и т. Д. От gdb.

Ctrl + \ приводит к появлению в моей программе квадратного объекта 001C, а не SIGUSR1.

1 Ответ

0 голосов
/ 25 октября 2018

Нажатие Ctrl + C убивает программу.

То есть не стандартное поведение GDB.

Вы установили handle SIGINT nostop pass?Вы можете проверить текущее расположение сигнала с помощью:

(gdb) handle SIGINT
Signal        Stop  Print   Pass to program Description
SIGINT        Yes   Yes     No              Interrupt

Обновление:

Моя программа использует белье для ввода с консоли.Я предполагаю, что он что-то сделал с Ctrl + C

Если ваша программа изменяет настройки терминала, у вас будет очень плохое время для его отладки с того же терминала .

Например, предположим, что программа устанавливает no echo, а затем достигает точки останова.Я думаю вы получите приглашение (gdb), но не увидите никаких команд, которые вы вводите в GDB.

Похоже, вам было бы намного лучше отладить эту программу с помощью другой терминал.Используйте gdb -p $PID, чтобы прикрепить его извне.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...