Tôi nằm ngoài mục tiêu của gdb và tôi thậm chí không có ngăn xếp tương ứng với mục tiêu đó. Dù sao tôi cũng muốn một bước, để tôi có thể xác minh những gì đang xảy ra trong mã assembly của tôi, bởi vì tôi không phải là một chuyên gia tại hội đồng x86. Thật không may, gdb từ chối thực hiện việc gỡ lỗi mức lắp ráp đơn giản này. Nó cho phép tôi thiết lập và dừng lại trên điểm ngắt thích hợp, nhưng ngay sau khi tôi cố gắng đơn bước trở đi, gdb báo cáo lỗi "Không thể tìm thấy giới hạn của chức năng hiện tại" và EIP không thay đổi.Sử dụng gdb để mã một bước lắp ráp bên ngoài lỗi nguyên nhân thực thi được chỉ định "không thể tìm thấy giới hạn của hàm hiện tại"
chi tiết bổ sung:
Mã máy được tạo ra bởi báo cáo asm gcc và tôi sao chép nó vào vị trí bộ nhớ hạt nhân mà nó thực hiện, từ đầu ra của -d objdump. Tôi sẽ không bận tâm một cách đơn giản để sử dụng một bộ nạp để tải mã đối tượng của tôi đến một địa chỉ được di dời, nhưng nhớ rằng việc nạp phải được thực hiện trong một mô-đun hạt nhân.
Tôi giả sử một giải pháp thay thế khác là tạo ra một mô-đun hạt nhân giả hoặc tệp thông tin gỡ lỗi để cung cấp cho gdb, để làm cho nó tin rằng khu vực này nằm trong mã chương trình. gdb hoạt động tốt trên hạt nhân thực thi chính nó.
(Đối với những người thực sự muốn biết, tôi đang chèn mã vào thời gian chạy vào không gian dữ liệu hạt nhân Linux bên trong VMware VM và gỡ lỗi từ gdb remote gỡ lỗi hạt nhân thông qua bản dựng gdb được xây dựng trong VMware Workstation. m không viết khai thác hạt nhân; Tôi là một sinh viên tốt nghiệp bảo mật viết một mẫu thử nghiệm.)
(Tôi có thể đặt điểm ngắt trên mỗi lệnh trong assembly của tôi). hướng dẫn lắp ráp x86 khác nhau và vị trí lắp ráp sẽ thay đổi mỗi khi tôi khởi động lại.)
Thông minh http://www.ksplice.com/ folks tiêm dữ liệu và mã vào hạt nhân bằng cách lắp ráp các mô-đun hạt nhân "giả" và tải chúng. Và nếu họ có thể làm điều đó, tại sao bạn không thể? ;-) – ephemient