Comment interrompre les instructions de montage à une adresse donnée dans 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   

J'ai essayé:

breaki 0x0000000000400448

mais il semble qu'il n'y ait pas une telle commande.

Est-ce que gdb a une telle fonctionnalité?

compilation-fan
la source
3
pourquoi breaki? est-ce une faute de frappe?
phil294
2
@Blauhirn Peut-être comme une analogie supposée avec stepiet nexti, qui sont utilisés pour un pas à pas au niveau de l'instruction.
Per Lundberg

Réponses:

147

essayer break *0x0000000000400448

Laurent G
la source
15
Probablement parce que * est nécessaire pour spécifier une adresse. voir sourceware.org/gdb/current/onlinedocs/gdb/…
Laurent G
4
Et bien sûr, vous pouvez supprimer les zéros et abréger break, donner b *0x400448.
user202729
Pour lever l'ambiguïté avec une fonction ou des données nommées 0x0000000000400448(aussi inhabituel que ce soit!)
Dan Anderson
1
@ compile-fan break * address Définit un point d'arrêt à l'adresse adresse. Vous pouvez l'utiliser pour définir des points d'arrêt dans les parties de votre programme qui n'ont pas d'informations de débogage ou de fichiers source. ftp.gnu.org/old-gnu/Manuals/gdb/html_node/gdb_28.html J'étais en train de déboguer un code d'assemblage et j'ai atteint ici pour la même question que vous avez posée.
P4cK3tHuNt3R
63

Autrement:

break *main+4

Cela ajoutera un point d'arrêt à 0x000000000040044c
Je pense que c'est plus facile que d'écrire l'adresse entière!

jyz
la source