2015-03-28 17 views
6

Tôi hiện đang xây dựng một kim loại trần có thể thi hành, trong đó có một số phần đặc biệt chứa mã. Tuy nhiên, khi tôi làm objdump -d tôi chỉ nhận được mã cho các mục .text.init.text. Trang man page cho objdump chỉ nói rằng nó "chỉ chia nhỏ các phần đó được dự kiến ​​sẽ chứa hướng dẫn" khi sử dụng tùy chọn -d. Phần nào là những phần này và cách objdump cho biết phần nào cần giải mã? Tôi biết tôi cũng có thể sử dụng tùy chọn -D để có được giải mã đầy đủ tất cả các phần, nhưng điều này thường là nhiều hơn tôi cần.Phần nào objdump được tháo rời theo mặc định

Trả lời

5

objdump sử dụng nội bộ libbfd để nhận thông tin về phần. objdump chuyển gọi lại tới bfd_map_over_sections() gọi lại cuộc gọi lại trên mỗi phần. Khi được gọi, libbfd chuyển số asection * đến cuộc gọi lại có thành viên type. Nếu loại có chứa các cờ SEC_CONTENTS | SEC_CODE, nó sẽ bị tháo rời theo objdump khi tùy chọn -d được chuyển.

Vào libbfd là khá khó khăn hơn, tôi hy vọng rằng việc phát hiện loại phụ thuộc vào kiến ​​trúc, nhưng tôi hy vọng tôi đã cho bạn ít nhất là con trỏ bên phải. (Có lẽ khi có nhiều thời gian hơn tôi sẽ đào hơn vào này và mở rộng các câu trả lời) ..


Btw, nếu bạn cần một kịch bản để lọc ra các phần của sự quan tâm từ objdump -D bạn có thể sử dụng sed, như thế này :

# ------------Place section names here ---------------vvv 
objdump -D object.o | sed -rn '/Disassembly of.*\.(comment|text)/{:a;p;n;/Disassembly of/!ba}' 
Các vấn đề liên quan