Wie kann man die Montageanleitung an einer bestimmten Adresse in gdb unterbrechen?


89
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   

Ich habe es versucht:

breaki 0x0000000000400448

aber es scheint, dass es keinen solchen Befehl gibt.

Hat gdb eine solche Funktion?


3
warum breaki? ist das ein Tippfehler?
Phil294

2
@Blauhirn Vielleicht als angebliche Analogie zu stepiund nexti, die für Einzelschritte auf Befehlsebene verwendet werden.
Per Lundberg

Antworten:


136

Versuchen break *0x0000000000400448


15
Wahrscheinlich, weil * erforderlich ist, um eine Adresse anzugeben. siehe sourceware.org/gdb/current/onlinedocs/gdb/…
Laurent G

3
Und natürlich können Sie die führenden Nullen entfernen und abkürzen break, geben b *0x400448.
user202729

Mit der benannten Funktion oder den genannten Daten zu disambiguieren 0x0000000000400448(ungewöhnlich wie das wäre!)
Dan Anderson

1
@ compile-fan break * address Legt einen Haltepunkt an der Adressadresse fest. Sie können dies verwenden, um Haltepunkte in Teilen Ihres Programms festzulegen, die keine Debuginformationen oder Quelldateien enthalten. ftp.gnu.org/old-gnu/Manuals/gdb/html_node/gdb_28.html Ich habe einen Assemblycode debuggt und hier nach derselben Frage gegriffen , die Sie gestellt haben.
P4cK3tHuNt3R

60

Ein anderer Weg:

break *main+4

Dies wird einen Haltepunkt hinzufügen, wenn 0x000000000040044c
ich denke, dass dies einfacher ist als das Schreiben der gesamten Adresse!

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.