2011-08-25 19 views
8

Tôi đang cố gắng tháo rời một đối tượng được tạo cho ARM với gcc. Thật không may, objdump đang cố gắng đoán xem mã là ARM và Thumb, và là nhận được nó sai: nó nghĩ rằng mã của tôi là Thumb khi nó thực sự ARM.objdump và ARM vs Thumb

Tôi thấy rằng objdump có một tùy chọn để buộc nó giải thích tất cả các hướng dẫn như Thumb (-Mforce-thumb), nhưng nó không có một để buộc chế độ ARM!

Điều này có vẻ như là một sự thiếu sót thực sự kỳ lạ đối với tôi, và nó cản trở khả năng hoàn thành công việc của tôi (tôi đang sử dụng thiết bị nhúng và phương pháp gỡ lỗi duy nhất của tôi là xem xét việc tháo gỡ). Tôi đã thử các cách tiếp cận khác nhau, bao gồm cố gắng nói objdump sử dụng kiến ​​trúc ARM không hỗ trợ Thumb, nhưng không có gì có vẻ hiệu quả. Bất kỳ ý tưởng?

(Và vâng, tôi biết rằng các hướng dẫn thực sự là ARM ...)

+0

là bạn đang tước các tệp nhị phân (elf), có thể thông tin đã có và sau đó bị xóa. Hoặc có thể bạn phải thêm một công tắc để bao gồm thông tin gỡ lỗi vào nhị phân. –

+0

Đó là 'objdump ... -Mno-force-thumb' hôm nay. Không thể nói nếu điều này đã có mặt vào năm 2011. Về cơ bản nó là ARM hoặc Thumb, vì vậy khi bạn nói 'no-force-thumb', tập lệnh là ARM. – JSmyth

Trả lời

0

này nghe có vẻ giống như một lỗi trong cả hai trình biên dịch/mối liên kết hoặc objdump. Thông thường các biểu tượng phải được đánh dấu đúng nếu chúng là Thumb hoặc ARM và được tháo rời cho phù hợp.

Điều đó nói rằng, có một vài điều bạn có thể thử:

  1. giải thích tập tin nhị phân đồng bằng (-b -D nhị phân) - điều này sẽ vô hiệu hóa biểu tượng kiểm tra và sẽ tháo rời toàn bộ tập tin như ARM. Nhược điểm: rất nhiều rác trong đầu ra, không có địa chỉ đẹp.
  2. sử dụng IDA Pro. Ngay cả khi nó đoán sai, bạn luôn có thể ghi đè quyết định của nó. Ngoài ra, đó là một môi trường tháo gỡ đẹp hơn nhiều :)
+0

Tôi cần thông tin biểu tượng để tôi biết những gì tôi đang xem, do đó, sử dụng nhị phân nguyên không cắt nó, tôi sợ. Tệp được đề cập không có thông tin gỡ lỗi để thông tin đánh dấu phải ở đó. Quá trình xây dựng của tôi là phức tạp nhưng không liên quan đến gcc trong suốt; bất kỳ ý tưởng gì có thể tước bỏ biểu tượng đánh dấu? –

+0

Thật khó để nói chính xác vấn đề là gì. In nội dung của bảng biểu tượng và xem xét print_insn (_arm) trong arm-dis.c. Có lẽ điều đó sẽ cho bạn một số ý tưởng. –

3

arm-linux-gnueabi-objdump -marm -b binary -D thực hiện thủ thuật cho tôi. Nó không bảo vệ thông tin biểu tượng, vì vậy nó không hoàn toàn là những gì bạn đang tìm kiếm, nhưng nó mang lại cho bạn sự tháo rời, đó là một sự khởi đầu.