2008-11-26 24 views
14

Làm cách nào để sử dụng GDB để gỡ lỗi chương trình không có biểu tượng gỡ lỗi trên bộ xử lý 32 bit x86? Kiểm tra các đối số hàm, các biến cục bộ, các con trỏ giải quyết sẽ hữu ích khi biết cách thực hiện. Ý định không thực sự sử dụng điều này cho kỹ thuật đảo ngược, vì đôi khi tôi quá lười biếng để cài đặt các biểu tượng gỡ lỗi và sẽ tuyệt vời để biết cách lấy một số thông tin cơ bản từ gdb.Sử dụng GDB mà không có biểu tượng gỡ lỗi trên x86?

Trả lời

6

Không có biểu tượng gỡ lỗi, bạn chỉ có thể gỡ lỗi ở cấp ASM. Ok, bạn sẽ nhận được bit thông tin khác, nhưng bạn sẽ không nhận được rất nhiều trừ khi bạn hiểu một chút về ASM và mã trình biên dịch tạo ra. Điều này sẽ cho phép bạn thực hiện kiểm tra đơn giản các biến cục bộ, v.v. nếu bạn biết mình đang làm gì.

Nếu bạn có nguồn, nó sẽ dễ dàng hơn để biên dịch lại nó.

+0

+1, GDB trên một nhị phân tổng hợp mà không cần ký hiệu (hoặc thậm chí là một nhị phân đầy đủ tối ưu hóa) hoạt động tốt nhất như một mức độ lắp ráp trình gỡ rối - một tác vụ có khả năng hợp lý tại. – Falaina

1

Tất cả những gì bạn có thể làm là nhìn vào sổ đăng ký và nội dung của ngăn xếp - bạn sẽ phải làm mọi thứ bằng cách suy ra những điều được sử dụng cho, như Draemon đề cập.

20

Để bắt đầu, bạn có thể thực hiện;

gdb "whatever" 
break __libc_start_main 
r 

sẽ thiết lập điểm ngắt trong mã crt0 của libc và cho phép bạn ngắt trước mã chính, ngay cả khi nhị phân đích bị tước hoàn toàn.

Điều đó sẽ đưa bạn đến trạng thái đang chạy tại điểm ngắt trước hầu hết mã người dùng. Sau đó, bạn có thể thực hiện một bước, giải thể, kết xuất bộ nhớ, vv ... với nội dung trái tim của bạn.

Tính năng này hoạt động trên tất cả các nền tảng, thực tế yêu cầu của bạn về IA-32/x86 không quan trọng.

+0

rất đẹp. Sẽ được mát mẻ để đề cập đến rằng "tháo rời" là một lệnh gdb mà bãi ASM. Bây giờ bạn có thể đọc (hoặc, trong trường hợp của tôi, xem xét) mã ASM! Yay! – Lotus

+1

[Đây là hướng dẫn hay] (http://felix.abecassis.me/2012/08/gdb-debugging-stripped-binaries/) về gỡ lỗi các tệp nhị phân đã tước với GDB. –

0

Vâng, điều quan trọng nhất là bạn có thể thư giãn ngăn xếp. Có ba cách này có thể được đảm bảo:

  • ký xây dựng gỡ lỗi với -g

  • Trên các hệ thống mà làm C++ ngoại lệ ươm qua bảng (? Lẽ bất cứ điều gì ELF những ngày này), cờ -funwind-tables sẽ nói với nó để tạo ra các bảng như vậy bất kể ngôn ngữ, và GDB có thể sử dụng các bảng này (ít nhất, với x86 linux nó có thể).

  • Hoặc, thất bại đó, ít nhất là đảm bảo rằng không được kích hoạt

Các vấn đề liên quan