Gdb'de belirli bir adreste montaj talimatı nasıl kesilir?


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   

Denedim:

breaki 0x0000000000400448

ama öyle görünüyor ki böyle bir komut yok.

Gdb'nin böyle bir özelliği var mı?


3
neden breaki? bu bir yazım hatası mı?
phil294

2
@Blauhirn Belki de talimat düzeyinde tek adım için kullanılan stepive ile sözde bir benzetme olarak nexti.
Per Lundberg

Yanıtlar:


147

Deneyin break *0x0000000000400448


15
Muhtemelen bir adres belirtmek için * gerektiğinden. bkz. sourceware.org/gdb/current/onlinedocs/gdb/…
Laurent G

4
Ve tabii ki baştaki sıfırları kaldırıp kısaltabilirsiniz break, verin b *0x400448.
user202729

Adlandırılmış işlev veya verilerle belirsizliği 0x0000000000400448ortadan
Dan Anderson

1
@ compile-fan break * address Adres adresinde bir kesme noktası ayarlayın. Bunu, programınızın hata ayıklama bilgileri veya kaynak dosyaları olmayan bölümlerinde kesme noktaları ayarlamak için kullanabilirsiniz. ftp.gnu.org/old-gnu/Manuals/gdb/html_node/gdb_28.html Bir montaj kodunun hatalarını ayıklıyordum ve sorduğunuz soru için buraya ulaştım.
P4cK3tHuNt3R

63

Diğer yol:

break *main+4

Bu bir kesme noktası ekleyecek ve 0x000000000040044c
bence bu, tüm adresi yazmaktan daha kolay!

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.