Trình tải ELF tải đoạn, không phần; ánh xạ từ các phần đến phân đoạn được xác định bởi tập lệnh liên kết được sử dụng để xây dựng tệp thực thi.
Tập lệnh trình liên kết mặc định không ánh xạ các phần gỡ lỗi cho bất kỳ phân đoạn nào, vì vậy điều này bị bỏ qua.
Thông tin biểu tượng có hai loại: biểu tượng tĩnh được xử lý ngoài băng và không bao giờ được lưu trữ dưới dạng dữ liệu phần; bảng biểu tượng động được tạo ra bởi trình liên kết và được thêm vào một phân đoạn đặc biệt được tải cùng với tệp thực thi, vì nó cần được truy cập tới trình liên kết động. Lệnh strip
chỉ xóa các ký hiệu tĩnh, không bao giờ được tham chiếu trong phân đoạn.
Vì vậy, bạn có thể sử dụng thông tin gỡ lỗi đầy đủ thông qua toàn bộ quá trình và điều này sẽ không ảnh hưởng đến kích thước của hình ảnh thực thi trong RAM, vì nó không được tải. Điều này cũng có nghĩa là thông tin không được bao gồm trong các bãi lõi, vì vậy điều này không mang lại cho bạn bất kỳ lợi ích nào ở đây.
Tiện ích objcopy
có tùy chọn đặc biệt để chỉ sao chép thông tin gỡ lỗi, do đó bạn có thể tạo tệp ELF thứ hai chứa thông tin này và sử dụng các tệp nhị phân bị tước; khi phân tích kết xuất lõi, sau đó bạn có thể tải cả hai tệp vào trình gỡ lỗi:
objcopy --only-keep-debug myprogram myprogram.debug
strip myprogram
Nguồn
2011-05-09 12:04:04
Tôi nghĩ câu hỏi sẽ xem liệu biểu tượng được tải vào bộ nhớ theo mặc định hay không. Nếu có, điều này sẽ góp phần làm tăng thời gian và mức tiêu thụ bộ nhớ. Câu hỏi thú vị, mong được trả lời. +1 – 0xC0000022L
Tại sao không thử làm cả hai? –
@unapersson: Thật khó để thực hiện các thử nghiệm như vậy trong môi trường của chúng tôi, vì hiệu suất phụ thuộc sâu sắc vào các yếu tố bên ngoài thay đổi nhanh chóng. – Johan