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
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ó.
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.
Để 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.
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
[Đâ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. –
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
- 1. gdb: (không tìm thấy các biểu tượng gỡ lỗi)
- 2. Gỡ lỗi SIGBUS trên x86 Linux
- 3. Python: gỡ lỗi bằng gdb (trên OSX)
- 4. Biểu tượng gỡ lỗi không tải
- 5. Lỗi gỡ lỗi từ xa với GDB
- 6. Không có biểu tượng gỡ lỗi nào trong gdb ngay cả khi biên dịch bằng cờ -g
- 7. Gỡ lỗi ứng dụng bằng cách sử dụng ADB qua Bluetooth cho trên netbook Android-x86
- 8. Gỡ lỗi qemu bằng gdb
- 9. Gỡ lỗi với Eclipse CDT và GDB
- 10. Xcode 3.2 + LLVM = không có biểu tượng địa phương khi gỡ lỗi
- 11. Sử dụng perlbrew để xây dựng một perl với các biểu tượng gỡ lỗi
- 12. gdb: "Không có bảng biểu tượng nào được tải"
- 13. Biểu tượng gỡ lỗi trông như thế nào?
- 14. x86 Dịch vụ gỡ lỗi từ xa trên x64
- 15. Biểu tượng gỡ lỗi trong Erlang
- 16. Cách sử dụng phiên bản gỡ lỗi của libc
- 17. Visual studio + gdb gỡ lỗi từ xa
- 18. Xcode, không có biểu tượng gỡ lỗi cho một số lớp con
- 19. android ndk-gdb không tải những biểu tượng
- 20. Xem mã nguồn từ "Máy chủ biểu tượng" mà không gỡ lỗi?
- 21. Biểu tượng gỡ lỗi thư viện tĩnh
- 22. Gỡ lỗi thẻ passvvm với gdb
- 23. Tôi có thể phát ra các biểu tượng gỡ lỗi từ ứng dụng Delphi của mình mà Process Explorer có thể sử dụng không?
- 24. tạm dừng gdb mà không có điểm ngắt
- 25. Xóa dấu mà không sử dụng biểu tượng
- 26. Gỡ lỗi chương trình MinGW với gdb trên Windows, không chấm dứt khi xác nhận lỗi
- 27. Làm cách nào để sử dụng trình gỡ lỗi gdb MinGW để gỡ lỗi chương trình C++ trong Windows?
- 28. gdb: thoát khỏi chương trình mà không thoát khỏi gdb
- 29. Gỡ lỗi x86 Ứng dụng .NET trên Windows x64 trong VS2008
- 30. Không thể gỡ lỗi trang web: không có biểu tượng nào được tải
+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