2012-04-11 7 views
6

Tôi muốn thêm một số thông tin vào một tập tin ELF, nhưng nó lý tưởng cần được thực hiện theo cách mà một chương trình có thể dễ dàng đọc thông tin này mà không hiểu ELF hoặc sử dụng các công cụ ngoài thư viện ngôn ngữ chuẩn. Tôi đã nghĩ đến việc đơn giản thêm dữ liệu này vào cuối tệp ELF (với một số loại sentinel để cho biết sự bắt đầu của dữ liệu để chương trình đọc chỉ có thể tìm kiếm ngược lại), nhưng tôi muốn đảm bảo điều này không ' vi phạm thông số ELF trước. Tôi không quan tâm đến việc một trình tải cụ thể có hoạt động tốt với dữ liệu được nối thêm như vậy hay không; Tôi muốn biết liệu thông số kỹ thuật ELF có đảm bảo bất cứ điều gì để tôi có thể biết các trình tải tương thích ELF khác nhau sẽ hài lòng với nó hay không.Có phụ thêm dữ liệu tùy ý vào một tệp ELF vi phạm thông số ELF không?

Tôi thấy rằng câu hỏi như thế này đã được hỏi trước, nhưng một trong hai giả định rằng phụ thêm này là ok hoặc không có phản ứng trực tiếp:

Theo như tôi có thể nói, thông số kỹ thuật ELF có tại đây:

Tôi không thể xác định bằng một vài tìm kiếm cho dù thuộc tính tôi muốn được cho phép rõ ràng bởi thông số đó hay không.

Trả lời

7

Đặc điểm kỹ thuật không thực sự nói bất cứ điều gì về nó, vì vậy người ta có thể tranh luận "hành vi không xác định để có dữ liệu theo dõi". Mặt khác, đặc điểm kỹ thuật của ELF khá rõ ràng về các kỳ vọng của nó: “Các đoạn và đoạn không có thứ tự được chỉ định là“ . Chỉ có tiêu đề ELF có vị trí cố định trong tệp. ”, cung cấp đủ chỗ để nhúng dữ liệu theo cách này hay cách khác, sử dụng một phần hoặc làm việc mà không có [dữ liệu này sau đó không được tham chiếu!].

"Tự do dữ liệu" này đã bị khai thác từ ít nhất vào cuối những năm 1980; xem xét "lưu trữ tự giải nén", trong đó phần mở rộng mã giải nén chung được để trống trên phần dữ liệu sau.

Thực tế, bạn có thể tìm thấy tính năng ngầm định như vậy ngay cả ở định dạng dữ liệu không thể thực thi, chẳng hạn như RIFF và PNG. Không phải tất cả các định dạng đều cho phép điều này tất nhiên; đặc biệt là những nơi dữ liệu được xác định để chạy cho đến EOF thay vì cho một độ dài cố định được lưu trữ trong một số tiêu đề. (Xem xét Zip: thêm dữ liệu là không thể, nhưng prepending là, đó là những gì dẫn đến EXE-kéo khóa là có thể đọc được bởi cả (chưa sửa đổi) giải nén chương trình hệ điều hành.)

Có chỉ là một nhược điểm khi sử dụng dữ liệu không được báo trước như sau: khi đọc và lưu tệp, bạn có thể mất dữ liệu này.

0

Bạn có thể thêm dữ liệu bổ sung vào các tệp ELF (vì bạn có thể thêm phân đoạn mới và phần mới cho ELF), nhưng bạn nên có (hoặc cải tiến) các công cụ để làm việc trên các ELF "đã cải thiện" của bạn có thể là một gánh nặng đáng kể. Và đừng quên viết tài liệu rất tốt (nếu có thể, trong một tài liệu có thể truy cập tự do) những gì bạn đang làm.