Команда 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