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é?


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


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!

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.