2010-05-24 31 views
7

Tôi hiện đang tìm cách thêm dữ liệu vào tệp thực thi ELF đã biên dịch, tức là nhúng tệp vào tệp thi hành mà không biên dịch lại tệp.Đóng gói tệp vào tệp thực thi ELF

Tôi có thể dễ dàng thực hiện điều đó bằng cách sử dụng cat myexe mydata > myexe_with_mydata, nhưng tôi không thể truy cập dữ liệu từ tệp thực thi vì tôi không biết kích thước của tệp thực thi gốc.

Có ai có ý tưởng về cách tôi có thể triển khai tính năng này không? Tôi nghĩ đến việc thêm một phần vào tệp thực thi hoặc sử dụng một dấu hiệu đặc biệt (ví dụ: 0xBADBEEFC0FFEE) để phát hiện sự bắt đầu của dữ liệu trong tệp thực thi, nhưng tôi không biết liệu có cách nào hay hơn để thực hiện nó hay không.

Xin cảm ơn trước.

Trả lời

5

Bạn có thể thêm các tập tin vào file elf như một phần đặc biệt với objcopy (1):

objcopy --addsection sname=file oldelf newelf 

sẽ bổ sung hồ sơ cho oldelf và ghi các kết quả để newelf (oldelf sẽ không được sửa đổi) Sau đó, bạn có thể sử dụng libbfd để đọc tệp elf và trích xuất phần theo tên hoặc chỉ cuộn mã của riêng bạn đọc bảng mục và tìm phần của bạn. Đảm bảo sử dụng tên phần không va chạm với bất kỳ thứ gì mà hệ thống mong đợi - miễn là tên của bạn không bắt đầu bằng số ., bạn sẽ ổn.

+0

Tôi không biết objcopy có thể làm điều đó! Cảm ơn. –

1

Tôi đã tạo một thư viện nhỏ có tên là elfdataembed cung cấp giao diện đơn giản để trích xuất/tham chiếu các phần được nhúng bằng cách sử dụng objcopy. Điều này cho phép bạn vượt qua bù đắp/kích thước cho một công cụ khác, hoặc tham khảo nó trực tiếp từ thời gian chạy bằng cách sử dụng các bộ mô tả tập tin. Hy vọng rằng điều này sẽ giúp một người nào đó trong tương lai. Cần chú ý đến cách tiếp cận này hiệu quả hơn việc biên dịch thành một biểu tượng, vì nó cho phép các công cụ bên ngoài tham chiếu dữ liệu mà không cần trích xuất, và cũng không yêu cầu toàn bộ nhị phân được nạp vào bộ nhớ theo thứ tự để trích xuất/tham chiếu nó.

Các vấn đề liên quan