8

Tôi đang tìm cách tạo các tệp nhị phân ELF độc quyền hiện có, được liên kết với các phiên bản thư viện hệ thống, di động cụ thể. Với thiết bị di động, tôi có nghĩa là thực hiện công việc thực thi trên mọi hệ thống với cùng kiến ​​trúc bộ xử lý và hệ thống tương thích, không nhất thiết phải có mã nguồn của thư viện (nếu không có cách nào mà không có mã nguồn, nó cũng sẽ ổn) .tạo các tệp nhị phân ELF độc quyền trên Linux

Cho đến nay tôi nghĩ đến hai khả năng, nhưng tôi không biết nếu họ đang ở tất cả các khả năng và nếu có, để lựa chọn:

  1. Tìm kiếm tất cả các thư viện liên kết và phụ thuộc của họ và bao gồm chúng trong một thư mục con của tệp nhị phân và thay đổi Thư viện-Đường dẫn đến thư mục đó.
  2. Liên kết lại các thư viện tĩnh thành tệp nhị phân thành một tệp lớn thực thi (nếu chương trình không tự xác minh dựa trên tổng kiểm tra).

Cấp phép không có vấn đề vì tôi không muốn phân phối các chương trình di động đã tạo, chỉ để sử dụng riêng.

Cảm ơn câu trả lời của bạn.

+0

http://stackoverflow.com/questions/2157636 | http://stackoverflow.com/questions/16250831 | http://stackoverflow.com/questions/15386027 –

Trả lời

6

Tìm kiếm tất cả thư viện được liên kết và phụ thuộc của chúng và đưa chúng vào thư mục con của tệp nhị phân và thay đổi Thư viện-đường dẫn đến thư mục đó.

Điều này sẽ hiệu quả đối với hầu hết các thư viện được chia sẻ, nhưng sẽ không hoạt động cho libc.so.6 (có khả năng gây ra vấn đề nếu hệ thống đích của bạn không có phiên bản đủ mới).

Lý do: glibc bao gồm hơn 200 thư viện chia sẻ riêng biệt, có giao diện nhị phân chưa được phiên bản giữa chúng và không có ABI ổn định giữa chúng. Bởi vì điều này, tất cả các phần của glibc phải đến từ cùng một bản dựng. Một trong những phần này là libc.so.6. Số khác là ld-linux.so. Đường dẫn tuyệt đối đến sau là được mã hóa cứng vào mọi tệp thi hành động. Kết quả cuối cùng: nếu bạn cung cấp bản sao của riêng mình libc.so.6 và nếu bản sao đó không khớp với /lib/ld-linux*.so.2 hiện diện trên hệ thống thì bạn sẽ thấy các sự cố rất lạ mà bạn sẽ gặp rất nhiều thời gian để giải thích hoặc gỡ lỗi.

Liên kết lại thư viện tĩnh vào tệp nhị phân thành một tệp thực thi lớn.

Điều đó không thể làm việc trên bất kỳ hệ thống UNIX khác hơn AIX: tất cả họ đều xem xét a.outfoo.so là liên kết sản phẩm thức, mà không thể được liên kết với bất kỳ hơn nữa.

Có tồn tại statifier, điều này tạo ra tệp thực thi tĩnh (rất lớn) từ một tệp động. Tôi không có kinh nghiệm sử dụng nó.

+0

Cảm ơn câu trả lời chi tiết của bạn. Tôi sẽ cung cấp cho statifier một thử sau ngày hôm nay (GMT + 1) và xem nếu nó có thể giúp tôi trong một số cách. – FSMaxB

+0

Trình thống kê dường như không hoạt động tốt và phần mềm khác có thể giúp tôi đạt được mục tiêu (ermine) của tôi là độc quyền. Nhưng ít nhất có một cách để đạt được những gì tôi thougt. – FSMaxB

+0

Tôi đã thử Ermine và nó hoạt động tốt (sử dụng phiên bản dùng thử) – FSMaxB