Trên Mac OS X, tệp thi hành nhị phân ở định dạng DYLD chứa "lệnh trình tải" hướng dẫn hệ thống tải thư viện cách xử lý nội dung của tệp. Cụ thể, lệnh bộ nạp hướng dẫn hệ thống nơi các thư viện phụ thuộc nên được tìm kiếm, v.v.Làm cách nào để cài đặt lệnh trình tải DYLD không được hỗ trợ rõ ràng bởi ld?
Bạn có thể xem danh sách đầy đủ các lệnh bộ nạp cho bất kỳ nhị phân nào trên hệ thống của bạn bằng cách chạy "otool -l/path/to/your/app ".
Nói chung, các lệnh trình tải này được đặt bởi công cụ "ld" trong giai đoạn liên kết của quá trình biên dịch của dự án.
Câu hỏi của tôi là, tôi cần phải làm gì để thêm lệnh bộ nạp cho các loại được công khai không được hỗ trợ (rõ ràng) bởi ld? Cụ thể, tôi muốn tận dụng lợi thế của trình nạp bộ nạp LC_DYLD_ENVIRONMENT, có thể được sử dụng để chỉ định một chuỗi trong bảng lệnh bộ nạp của một tệp nhị phân cần được tải và được đánh giá là cài đặt biến môi trường trong ngữ cảnh của thực thi.
Tôi không thấy bất kỳ đối số nào để ld có thể tạo điều kiện thuận lợi cho việc này. Một cái gì đó như "-sectcreate" nhưng để cụ thể thêm vào nội dung của các lệnh loader, là những gì tôi sau.
Tôi biết điều này là có thể vì ít nhất một ứng dụng chuẩn trên Mac OS X sử dụng nó: Safari. Nhưng tôi không biết liệu họ có đạt được điều này bằng một số loại massage sau liên kết nhị phân hay không, nếu họ đang sử dụng phiên bản tùy chỉnh của ld để biết cách xây dựng và chuỗi lệnh trình tải tùy chỉnh trong hoặc nếu họ đang khai thác một tính năng tổng quát của lệnh ld mà tôi chưa thể tìm ra.
Tuyệt vời! Cảm ơn. Tôi cũng đã nhận được một số phản hồi thông qua Twitter đã chỉ ra rằng LC_DYLD_ENVIRONMENT không thực sự cho phép bạn xác định các biến môi trường tùy ý, chỉ những biến có ảnh hưởng đến tải DYLD. Vì vậy, đến mức độ đề xuất LSEnvironment từ Ned dưới đây là phù hợp hơn cho các nhu cầu trước mắt của tôi, nhưng câu trả lời của bạn là tài liệu tham khảo thích hợp nhất cho ý chính của câu hỏi. – danielpunkass