Como interromper a instrução de montagem em um determinado endereço no 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   

Eu tentei:

breaki 0x0000000000400448

mas parece que não existe tal comando.

O gdb tem esse recurso?


3
por que breaki? isso é um erro de digitação?
phil294

2
@Blauhirn Talvez como uma suposta analogia com stepie nexti, que são usados ​​para passo único no nível de instrução.
Por Lundberg

Respostas:


152

experimentar break *0x0000000000400448


15
Provavelmente porque * é necessário para especificar um endereço. consulte sourceware.org/gdb/current/onlinedocs/gdb/…
Laurent G

4
E, claro, você pode remover os zeros à esquerda e abreviar break, dar b *0x400448.
user202729

Para eliminar a ambiguidade com função ou dados nomeados 0x0000000000400448(incomum como isso seria!)
Dan Anderson

1
@ compile-fan break * address Define um ponto de interrupção no endereço de endereço. Você pode usar isso para definir pontos de interrupção em partes de seu programa que não têm informações de depuração ou arquivos de origem. ftp.gnu.org/old-gnu/Manuals/gdb/html_node/gdb_28.html Eu estava depurando um código de montagem e cheguei aqui para a mesma pergunta que você fez.
P4cK3tHuNt3R

64

Outra maneira:

break *main+4

Isso adicionará um ponto de interrupção, 0x000000000040044c
acho que é mais fácil do que escrever o endereço inteiro!

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.