GDB - ожидаемая точка останова при будущей загрузке разделяемой библиотеки - PullRequest
0 голосов
/ 06 ноября 2018

Я пытаюсь запустить очень простой связанный файл в GDB.

Я сделал следующие действия:

(gdb) break _start
Breakpoint 1 at 0x4000b0
(gdb) start
Function "main" not defined.
**Make breakpoint pending on future shared library load? (y or [n]) ?**

Однако метка _start отсутствует ни в какой общей библиотеке, а просто в коде сборки, который сгенерировал исполняемый файл. Почему GDB спрашивает это?

1 Ответ

0 голосов
/ 06 ноября 2018

Команда GDB start устанавливает точку останова в начале main, а затем запускает вашу программу. Предположительно, в вашей программе нет символа main.

Внимательно прочитайте сообщение об ошибке, там написано Function "main" not defined. Точка останова на _start уже установлена; Если бы это была проблема, вы бы увидели приглашение после этой команды и не увидели бы числовой адрес. (Попробуйте с b xyz или b printf.)


Вы ищете команду run, которая просто запускает программу без поиска каких-либо символов в ней.

Используйте help start и help run в GDB, чтобы увидеть, что они делают.

Или онлайн документы: https://sourceware.org/gdb/onlinedocs/gdb/Starting.html

  • run: просто запустите программу, новые точки останова не добавляются.
  • start: установить одноразовую точку останова в main перед run. Полезно для скомпилированного C / C ++ или рукописного asm, который определяет main и использует стандартные файлы запуска CRT. Это то, что вы пытались использовать.
  • starti: остановка при первой инструкции процесса asm . Особенно полезно для исполняемого файла PIE без символов, где числовой адрес точки входа неизвестен до тех пор, пока ASLR не выберет его, если вы запустите его с включенным ASLR. (Поведение GDB по умолчанию отключает ASLR).

starti - относительно новая функция; до этого одним распространенным хаком было использование b *0, что приводит к ошибке сразу после запуска процесса, перед выполнением любых инструкций. Остановка на первой инструкции машинного кода в GDB

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