Việc chuyển đổi một loạt các đối tượng được chia sẻ và ELF chia sẻ có thể thực thi được thành một blob được liên kết tĩnh không đơn giản.
Các kho lưu trữ thực thi mà bạn đề cập có thể có thể. Giả sử rằng bằng 'lưu trữ thực thi', bạn có nghĩa là một tệp khi chạy un-zips chính nó và chạy một chương trình mà không phụ thuộc vào các tệp khác trên hệ thống.
Điều này có thể được thực hiện khá đơn giản bằng cách sử dụng shell script và một loạt các tiện ích được tìm thấy trong hầu hết các bản phân phối linux (Tuy nhiên, nó bổ sung các phụ thuộc vào shell và các tiện ích). Làm cho ELF 'lưu trữ thực thi' có thể được tham gia nhiều hơn mặc dù các nguyên tắc là như nhau. Nếu bạn mong muốn phiên bản chương trình của mình được thực thi thường xuyên, bạn nên sửa đổi tập lệnh để 'cài đặt' nó vào hệ thống người dùng như được chỉ định bởi David và janneb .
Một ví dụ sử dụng shell script dựa trên lưu trữ thực thi
Thu thập các tệp bạn cần để thực hiện, một ví dụ sử dụng cat
chương trình sẽ có các mục sau:
fachas_cat_files/cat
fachas_cat_files/lib/libc.so.6
Base64 mã hóa tệp tgz và tạo nó cat.b64
, có thể được thực hiện như thế này sau khi thiết lập fachas_cat_files
thư mục của bạn .
tar -cz fachas_cat_files | base64 > cat.b64
Điều này làm cho một đại diện của tệp tar với các ký tự có thể in được để nó có thể được bao gồm trong tập lệnh.
Lưu ý md5sums của các tệp bạn đang đóng gói, mà bạn sử dụng để xác minh xem các tệp chưa được chỉnh sửa là của riêng bạn hay không, trong tập lệnh shell.
find fachas_cat_files/ -type f -exec md5sum {} \; > cat.md5
Tạo một kịch bản shell như sau và đặt tên cho chương trình "lưu trữ" mới của bạn.
#!/bin/bash
TEMP_DIR=/tmp
# Check Md5sum
md5sum -c --quiet >/dev/null 2>&1 <<EOF
--- Paste contents of cat.md5 here. ---
EOF
# Untar from base64 encoded tarball.
test $? -eq 0 || base64 -d <<EOF | tar -xz -C ${TEMP_DIR}
--- Paste contents of cat.b64 here. ---
EOF
# Execute the binary.
LD_LIBRARY_PATH=${TEMP_DIR}/fachas_cat_files/lib/ ${TEMP_DIR}/fachas_cat_files/cat $*
# Optionally remove the temporary files, if you do, the whole md5sum set of steps is
# not necessary.
# rm -fr ${TEMP_DIR}/fachas_cat_files