Как установить самую раннюю точку останова
Я пытаюсь остановить сразу после загрузки модуля в GDB. Давайте предположим, что двоичный файл полностью удален из всей символьной информации, поэтому здесь нет главного.
В идеале я бы установил точку останова на точке входа, но эта идея не работает из-за перемещений:
(gdb) info target
Symbols from "./application".
Local exec file:
`./application', file type elf64-x86-64.
Entry point: 0xc154
...
(gdb) break *0xc154
Breakpoint 1 at 0xc154
(gdb) r
Starting program: ./application
Warning:
Cannot insert breakpoint 1.
Error accessing memory address 0xc154: Input/output error.
(gdb) info target
Symbols from "./application".
Unix child process:
Using the running image of child process 22835.
While running this, GDB does not access memory from...
Local exec file:
`./application', file type elf64-x86-64.
Entry point: 0x555555560154
Несмотря на то, что этот вид работает (я мог бы установить новую точку останова на новом адресе и отключить исходный), он не может быть легко выполнен через сценарий / пакетный режим GDB, потому что в середине у него есть сбойная инструкция.
Есть способ сделать это? В идеале было бы полезно что-то вроде «запустить одну инструкцию», а не «запустить».