Come interrompere le istruzioni di assemblaggio a un determinato indirizzo in gdb?


96
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   

Provai:

breaki 0x0000000000400448

ma sembra che non ci sia tale comando.

Gdb ha una tale funzionalità?


3
perchè breaki? è un errore di battitura?
phil294

2
@Blauhirn Forse come presunta analogia con stepie nexti, che sono usati per un singolo passo a livello di istruzione.
Per Lundberg

Risposte:


147

provare break *0x0000000000400448


15
Probabilmente perché * è necessario per specificare un indirizzo. vedi sourceware.org/gdb/current/onlinedocs/gdb/…
Laurent G

4
E ovviamente puoi rimuovere gli zeri iniziali e abbreviare break, dare b *0x400448.
user202729

Per chiarire le ambiguità con funzione o dati denominati 0x0000000000400448(insolito come sarebbe!)
Dan Anderson,

1
@ compile-fan break * address Imposta un punto di interruzione all'indirizzo indirizzo. Puoi usarlo per impostare punti di interruzione in parti del tuo programma che non hanno informazioni di debug o file di origine. ftp.gnu.org/old-gnu/Manuals/gdb/html_node/gdb_28.html Stavo eseguendo il debug di un codice assembly e sono arrivato qui per la stessa domanda che hai chiesto.
P4cK3tHuNt3R

62

Un altro modo:

break *main+4

Questo aggiungerà un punto di interruzione a 0x000000000040044c
Penso che sia più facile che scrivere l'intero indirizzo!

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.