Jak przerwać instrukcję asemblera pod podanym adresem w gdb?


99
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   

Próbowałem:

breaki 0x0000000000400448

ale wydaje się, że nie ma takiego polecenia.

Czy gdb ma taką funkcję?


3
dlaczego breaki? czy to literówka?
phil294

2
@Blauhirn Być może jako domniemana analogia do stepii nexti, które są używane do wykonywania pojedynczych kroków na poziomie instrukcji.
Per Lundberg

Odpowiedzi:


152

próbować break *0x0000000000400448


15
Probably because * is required to specify an address. see sourceware.org/gdb/current/onlinedocs/gdb/…
Laurent G

4
I oczywiście możesz usunąć wiodące zera i skrócić break, dać b *0x400448.
user202729

Aby ujednoznacznić funkcję lub dane o nazwie 0x0000000000400448(choćby nietypowe!)
Dan Anderson,

1
@ compile-fan break * address Ustaw punkt przerwania pod adresem adres. Możesz użyć tego do ustawienia punktów przerwania w częściach programu, które nie mają informacji debugowania ani plików źródłowych. ftp.gnu.org/old-gnu/Manuals/gdb/html_node/gdb_28.html Debugowałem kod asemblera i dotarłem tutaj z tym samym pytaniem, które zadałeś.
P4cK3tHuNt3R

64

Inny sposób:

break *main+4

This will add a breakpoint at 0x000000000040044c
I think this is easier than writing the whole address!

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.