GDB не попадает в точки останова - PullRequest
5 голосов
/ 04 октября 2009

Чтобы узнать немного больше о системах FreeBSD и * nix в целом, я начинаю смотреть на двоичные файлы из игры DEFCON 17 Capture The Flag. Прямо сейчас я переворачиваю двоичный код tucod. Вот, возможно, полезная информация о tucod:

tucod: ELF 32-bit LSB executable, Intel 80386, version 1 (FreeBSD), for FreeBSD 7.2, dynamically linked (uses shared libs), FreeBSD-style, stripped

Некоторая другая, возможно, полезная информация, полученная в результате краткого статического анализа, заключается в том, что tucod связывается с портом 0xDEAD (мило, а?), И если вы дадите ему конкретный пароль («HANGEMHIGH!»), Он будет играть в игру зависшего человека. с тобой.

Проблема, с которой я сталкиваюсь, заключается в том, что я не достигаю своих точек останова в gdb. В частности, точка останова, которую я пытаюсь достичь, находится в коде, который обрабатывает клиентское соединение. Без точек останова код выполняется должным образом. Когда я устанавливаю точку останова для этого кода, дочерний процесс завершается (вместо того, чтобы взломать gdb, как и ожидалось). Если я установлю точки останова до того, как сервер откажется от дочернего элемента, я смогу ударить по ним нормально, но после нажатия кнопки «продолжить» дочерний элемент не будет продолжать обрабатывать мое соединение (то есть он не будет запрашивать у меня пароль или играть в зависания). ).

Поскольку после получения нового соединения демон разветвляется, я пытаюсь сказать gdb следовать за потомком с помощью этой команды:

(gdb) set follow-fork-mode child

Но после однократного выполнения инструкций после разветвления кажется, что это не работает.

Я пытался искать вызовы signal, полагая, что они реализовали собственный обработчик SIGINT (или аналогичный), но единственный вызов signal, который я вижу, обрабатывает SIGCHLD.

Моя точка останова в GDB в настоящее время выглядит так:

(gdb) info breakpoints
Num Type           Disp Enb Address    What
1   breakpoint     keep y   0x080497d0

И 0x080497d0 - это адрес, который я хочу использовать в коде обработки клиента.

Я новичок в анализе программного обеспечения в системах * nix и могу использовать некоторые указатели. Как еще мне следует заняться устранением неполадок, почему GDB не достигнет моих контрольных точек? Или есть что-то важное, что я просто пропускаю?

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

1 Ответ

2 голосов
/ 07 октября 2009

Смотрите здесь для ответа. Короче говоря, похоже, что GDB поддерживает дочерний режим отладки только в HP-UX и Linux.

...