Як зламати інструкцію з монтажу за даною адресою в 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/…
Лоран Г

4
І звичайно ви можете прибрати перші нулі і скоротити break, дати b *0x400448.
user202729

Щоб усунути неоднозначність з названими функціями або даними 0x0000000000400448(як би це було незвично!)
Ден Андерсон,

1
@ compile-fan break * 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.