Làm thế nào để phá vỡ hướng dẫn lắp ráp tại một địa chỉ nhất định trong 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   

Tôi đã thử:

breaki 0x0000000000400448

nhưng có vẻ như không có lệnh như vậy.

Gdb có tính năng như vậy không?


3
tại sao breaki? đó có phải là lỗi đánh máy không?
phil294

2
@Blauhirn Có lẽ như một sự tương tự được cho là với stepinexti, được sử dụng cho một bước ở cấp hướng dẫn.
Per Lundberg

Câu trả lời:


147

thử break *0x0000000000400448


15
Có thể là vì * được yêu cầu để chỉ định một địa chỉ. xem sourceware.org/gdb/current/onlineocs/gdb/…
Laurent G

4
Và tất nhiên bạn có thể loại bỏ các số 0 đứng đầu và viết tắt break, cho b *0x400448.
user202729,

Để phân biệt với chức năng hoặc dữ liệu được đặt tên 0x0000000000400448(bất thường như vậy!)
Dan Anderson

1
Địa chỉ @ compile-fan break * Đặt điểm ngắt tại địa chỉ address. Bạn có thể sử dụng điều này để đặt các điểm ngắt trong các phần của chương trình không có thông tin gỡ lỗi hoặc tệp nguồn. ftp.gnu.org/old-gnu/Manuals/gdb/html_node/gdb_28.html Tôi đang gỡ lỗi mã lắp ráp và truy cập vào đây cho cùng một câu hỏi mà bạn đã hỏi.
P4cK3tHuNt3R

62

Cách khác:

break *main+4

Điều này sẽ thêm một điểm ngắt tại 0x000000000040044c
Tôi nghĩ điều này dễ dàng hơn so với việc viết toàn bộ địa chỉ!

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.