2010-10-01 31 views
6

Các dự án nhúng của tôi có một bước sau xử lý thay thế một giá trị trong tệp thực thi bằng đèn flash của CRC (một số phần). Bước này chỉ có thể được thực hiện sau khi liên kết vì đó là cơ hội đầu tiên để CRC hình ảnh. Trong quá khứ, định dạng tệp là COFF và tôi đã tạo một công cụ tùy chỉnh để thực hiện việc vá.Công cụ sửa đổi đơn giản tệp tin elf?

Công cụ phát triển đã chuyển sang ELF, vì vậy tôi cần phải triển khai lại trình vá CRC. Trước khi tôi làm, tôi nghĩ rằng tôi sẽ tìm kiếm một công cụ hiện có để làm điều này. Trình biên dịch dựa trên gcc, nhưng tôi không thể thấy bất kỳ kết hợp nào của ldnmreadelf có thể thực hiện công việc. Tìm kiếm của Google chưa thành công.

Công cụ hiện tại của tôi sử dụng nm để tìm địa chỉ để vá và gọi cho trình vá bằng địa chỉ, giá trị dự kiến ​​(để ngăn ghi đè dữ liệu sai) và giá trị CRC mới. CRC được tính dựa trên định dạng "hex" của tệp thực thi (mà tôi cũng vá) nên may mắn thay tôi không phải làm lại phần đó.

Tôi có thể triển khai điều này với libelf và mã tùy chỉnh một lần nữa, nhưng trước khi thực hiện, nó đã tồn tại chưa?

Có cách nào tốt hơn để hoàn thành mục tiêu đưa CRC của tệp thực thi vào tệp thi hành để nó có sẵn cho ứng dụng không?

Trả lời

4

Nếu tôi đã hiểu những gì bạn đang cố gắng làm một cách chính xác, tôi nghĩ rằng những điều sau đây sẽ làm việc:

  • nm cung cấp cho bạn địa chỉ ảo runtime của địa điểm bạn muốn vá;
  • readelf -S cung cấp cho bạn cả địa chỉ ảo thời gian chạy và khoảng bù trong tệp cho đầu mỗi phần;
  • ghép hai phần lại với nhau (ví dụ: với một vài dòng ngôn ngữ kịch bản yêu thích của bạn) cho phép bù đắp trong tệp để vá.
+0

Đây là một gợi ý tuyệt vời, +1. Tôi sẽ thử. –

0

Tôi không chắc liệu điều này có hiệu quả không, nhưng bạn có thể sắp xếp nó để vị trí CRC trong tệp đối tượng của bạn được đặt thành địa chỉ của một biểu tượng bên ngoài X. Biểu tượng bên ngoài đó sau đó có thể được thỏa mãn bằng một bước liên kết cuối cùng bằng cách liên kết trong tệp elf mà không làm gì ngoài việc chỉ định rằng địa chỉ của X là CRC mà bạn đã tính toán.

Điều này vẫn còn khá khó khăn, và tôi không chắc chắn nếu nó dễ dàng làm-có thể (vì nó là một lạm dụng các công cụ).

+0

Vâng, tôi chưa biết cách thực hiện công việc này vì liên kết sẽ không hoàn thành với các biểu tượng bị thiếu và tôi cần liên kết được thực hiện để tôi có thể tính CRC. –

+0

Tôi đã nghĩ rằng điều này có thể không phải là một vấn đề, nhưng có vẻ như ngay cả khi relinking một file thực thi được xây dựng (tất cả các phụ thuộc được gặp bởi một filefile) mà 'ld' tổ chức lại và phá vỡ mọi thứ. Có một số chương trình để nhồi nhét số sê-ri vào hình ảnh phần vững. Có lẽ có một hình ảnh elf mà bạn có thể sử dụng lại cho việc này. – nategoose

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