Thứ Ba, 4 tháng 6, 2013

Liên kết tĩnh và liên kết động

Khi một excutable được tạo, vị trí của bất cứ hàm thư viện được tham chiếu bởi excutable đó phải được tìm ra. Linker có hai phương thức cho việc giải quyết các lời gọi tới các hàm thư viện: liên kết tĩnh liên kết động. Các đối số của command line cung cấp đến linker để xác định xem phương thức nào được sử dụng.

Một excutable có thể được liên kết tĩnh, liên kết động, hoặc cả hai.

Khi có một yêu cầu liên kết tĩnh, linker kết hợp application's object files với một bản sao của thư viện được yêu cầu để tạo một excutable file. Tại runtime, không cần locate library code vì nó đã được chứa bên trong executable. Các lợi thế của liên kết tĩnh là (1) nó đưa đến kết quả có các lời gọi hàm nhanh hơn và (2) việc phân bố của binaries là dễ dàng hơn bởi vì không cần những giả định về sự hiện diện của library code trên các hệ thống khách. Các mặt hạn chế của liên kết tĩnh bao gồm (1) excutables sinh ra có kích thước lớn và (2) khó khăn trong việc upgrading các chương trình khi các thành phần của thư viện thay đổi. Các chương trình thường gặp nhiều khó khăn để update bởi vì chúng phải  được tái liên kết (relinked) mỗi khi thư viện thay đổi. Trong hoàn cảnh reverse-engineering, liên kết tĩnh phức tạp một phần nào đó các vấn đề. Nếu chúng ta phải đối mặt với công việc phân tích binary được liên kết tĩnh, không có một cách dễ dàng để trả lời các câu hỏi "Các thư viện nào được liên kết trong binary này ?" và "Trong những function được liên kết thì function nào là library function? "

Liên kết động khác với liên kết tĩnh ở điểm linker không cần tạo ra bất cứ bản sao nào của các thư viện được yêu cầu. Thay vào đó, linker đơn giản chèn các tham chiếu đến bất cứ thư viện yêu cầu (thường là .so và .dll files) vào trong file thực thi cuối cùng, chúng ta sẽ có những excutable files nhỏ hơn. Upgrading library code là dễ dàng hơn rất nhiều khi liên kết động được tận dụng.  Bởi vì duy nhất một bản sao của library được duy trì và bản sao đó được tham chiếu đến nhiều binaries, thay thế một thư viện đã hết hạn duy nhất với một phiên bản mới ngay lập tức update tới mọi binaries sử dụng thư viện đó. Một trong những hạn chế của việc sử dụng liên kết động là nó yêu cầu quá trình loading phức tạp hơn. Tất cả các thư viện cần thiết phải được located và được load vào trong bộ nhớ, như đối lập với việc loading một file được liên kết tĩnh có một file chứa tất cả library code.

Một bất lợi khác của liên kết động đó là nhà sản xuất phải phân phối không chỉ các file thực thi của họ mà còn phải phân phối tất cả các file thư viện mà excutable phụ thuộc. Việc cố gắng thực thi một chương trình trên một hệ thống mà không chứa các file thư viện yêu cầu sẽ sinh ra lỗi.

Để cho việc liên kết tĩnh đến function thích hợp, binaries được liên kết động phải chỉ ra những thư viện nào chúng phụ thuộc đi cùng với resources xác định được yêu cầu từ mỗi thư viện.

Không có nhận xét nào:

Đăng nhận xét