Как сломать инструкцию по сборке по заданному адресу в gdb?


97
0x0000000000400448 <main+0>:    push   %rbp
0x0000000000400449 <main+1>:    mov    %rsp,%rbp
0x000000000040044c <main+4>:    mov    $0x6,%eax
0x0000000000400451 <main+9>:    leaveq 
0x0000000000400452 <main+10>:   retq   

Я старался:

breaki 0x0000000000400448

но вроде там не такая команда.

Есть ли в gdb такая возможность?


3
почему breaki? это опечатка?
phil294

2
@Blauhirn Возможно, как предполагаемая аналогия с stepiи nexti, которые используются для пошагового выполнения на уровне инструкций.
Per Lundberg

Ответы:


147

пытаться break *0x0000000000400448


15
Вероятно потому, что * требуется для указания адреса. см. sourceware.org/gdb/current/onlinedocs/gdb/…
Laurent G

4
И, конечно, вы можете убрать ведущие нули и сократить break, дать b *0x400448.
user202729

Чтобы устранить неоднозначность с помощью функции или названных данных 0x0000000000400448(как бы необычно это ни было!)
Дэн Андерсон

1
@ compile-fan break * address Установить точку останова по адресу address. Вы можете использовать это, чтобы установить точки останова в частях вашей программы, которые не имеют отладочной информации или исходных файлов. ftp.gnu.org/old-gnu/Manuals/gdb/html_node/gdb_28.html Я отлаживал код сборки и обратился сюда по тому же вопросу, который вы задали.
P4cK3tHuNt3R

63

По-другому:

break *main+4

Это добавит точку останова, 0x000000000040044c
я думаю, это проще, чем писать весь адрес!

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.