Danh mục

Liên kết động trong Linux và Windows (phần II)

Số trang: 16      Loại file: pdf      Dung lượng: 1.06 MB      Lượt xem: 8      Lượt tải: 0    
Jamona

Hỗ trợ phí lưu trữ khi tải xuống: 10,000 VND Tải xuống file đầy đủ (16 trang) 0
Xem trước 2 trang đầu tiên của tài liệu này:

Thông tin tài liệu:

Liên kết động trong Linux và Windows (phần II)Xem lại Phần IPhần II Bài này thảo luận khái niệm thư viện chia sẻ trong cả Windows và Linux. Đồng thời cũng lướt qua các kiểu cấu trúc dữ liệu khác nhau để giải thích liên kết động làm việc như thế nào trong các hệ điều hành này. Bài này rất hữu ích cho các nhà phát triển hứng thú nghiên cứu vấn đề về hàm ẩn bảo mật, liên quan tới tốc độ liên kết động. Và cũng khẳng định một số kiến thức cơ bản về liên kết...
Nội dung trích xuất từ tài liệu:
Liên kết động trong Linux và Windows (phần II)Liên kết động trong Linux và Windows (phần II)Xem lại Phần IPhần IIBài này thảo luận khái niệm thư viện chia sẻ trong cả Windows và Linux.Đồng thời cũng lướt qua các kiểu cấu trúc dữ liệu khác nhau để giải thíchliên kết động làm việc như thế nào trong các hệ điều hành này. Bài này rấthữu ích cho các nhà phát triển hứng thú nghiên cứu vấn đề về hàm ẩn bảomật, liên quan tới tốc độ liên kết động. Và cũng khẳng định một số kiến thứccơ bản về liên kết động đã được đưa ra trước đây.Phần một giới thiệu các khái niệm cho cả Linux và Windows, trong đó tậptrung chủ yếu vào Linux. Bây giờ trong phần hai chúng ta sẽ xem xét liênkết động hoạt động như thế nào trong Windows và tiến tới so sánh hai môitrường với nhau. Các bạn nên xem lại phần một trước khi tiếp tục với phầnhai này.Cấu trúc dữ liệu Windows Portable Executable File Format (PE)Chúng ta biết rằng một section (phân đoạn) là một đoạn mã lệnh hay dữ liệuhợp logic với nhau, và dữ liệu cho một bảng nhập thực thi thì nằm trong mộtsection. Trong phần này chúng ta sẽ xem xét một số section trong các fileWindows PE.Exports section (.edata)Section “.edata” bắt đầu với cấu trúc thư mục xuấtIMAGE_EXPORT_DIRECTORY. Thư mục xuất bao gồm RVAs (relativevirtual addresses - địa chỉ ảo quan hệ) của Bảng địa chỉ xuất. Bảng này baogồm địa chỉ của các điểm vào xuất, dữ liệu xuất và tuyệt đối. Một dãy số thứtự được dùng để đánh chỉ mục cho bảng địa chỉ. Cơ sở thứ tự (Ordinal Base)phải được trừ cho các số thứ tự trước khi đánh chỉ mục vào bảng.Export Name Table Pointers (Các con trỏ bảng tên xuất): mảng này chứađịa chỉ trong bảng tên xuất. Các con trỏ liên quan tới cớ sở hình ảnh và đượcsắp xếp theo thứ tự từ vựng để tìm kiếm nhị phân. Export Name Table baogồm các tên theo chuẩn ASCII của các điểm vào xuất khẩu hình ảnh.Export Ordinal Table (Bảng thứ tự xuất): các con trỏ bảng tên xuất khẩu vàbảng thứ tự xuất khẩu tạo thành hai mảng song song. Mảng bảng thứ tự xuấtbao gồm thứ tự kết hợp với tên xuất được trỏ bởi các con trỏ bảng tên xuất.Thứ tự sẽ được dùng như là chỉ mục trong EAT.Imports Section(.idata)Section “.idata” là ngược lại với section e.data mô tả ở trên. Nó bản đồ hoácác symbol hoặc thứ tự trở lại RVAs. Phân đoạn i.data bắt đầu với một bảngthư mục nhập IMAGE_IMPORT_DIRECTORY. Bảng thư mục nhập này baogồm một mảng cấu trúc IMAGE_IMPORT_DESCRIPTOR. Trong đó mỗiphần tử tương ứng với một thực thi. IMAGE_IMPORT_DESCRIPTOR baogồm RVAs của:Import Lookup Table (Bảng tra tìm nhập): đây là mảng của cấu trúcIMAGE_THUNK_DATA. Cấu trúc này bao gồm thứ tự hay hint (gợi ý) hoặctên của mỗi hàm nhập. Bảng nhận dạng các ký tự nhập khẩu, với điểm vàotrong Bảng tra tìm nhập khẩu là song song với điểm vào trong Bảng địa chỉnhập (Import Address Table - IAT). Nếu bit cao của điểm vào được thiết lập,các bit thấp sẽ là thứ tự. Nếu không thì điểm vào là một RVA của đầu vàotrong bảng hint-name.Import Address Table (Bảng điạ chỉ nhập): đây cũng là một mảng của cấutrúc IMAGE_THUNK_DATA. Ban đầu cả Bảng tra tìm nhập khẩu và Bảngđịa chỉ nhập khẩu chứa các điểm vào tương tự nhau. Bộ nạp có tác dụng điềnđịa chỉ cho các chu trình nhập trong bảng này, trong khi đó các mục trongImport Lookup Table giữ lại dữ liệu gốc như trước. Chúng ta sẽ xem vì saomối liên kết lại duy trì thông tin gốc muộn hơn khi chúng ta nói đến sự liênkết.Hint-name Table (Bảng gợi ý-tên): Bảng bao gồm một hint (gợi ý) 4 bytetheo sau tên với ký tự kết thúc là null. Giá trị hint được dùng để đánh chỉmục cho mảng Con trỏ bảng tên xuất khẩu, cho phép nhanh hơn là nhậpbằng tên. Hint sẽ chính xác nếu DDL không thay đổi hay ít nhất là danh sáchký tự xuất khẩu của nó không thay đổi. Nếu hint không chính xác thì việctìm kiếm nhị phân sẽ diễn ra trên bảng Export Name Pointer.Cách thức hoạt độngNạp một thực thi Windows và DDL cũng tương tự như nạp một chươngtrình ELF liên kết động trong Linux. Sự khác nhau là, ở đây mối liên kết làmột phần của bản thân nhân kernel. Đầu tiên nhân kernel sẽ bản đồ hoá mộtthực thi dẫn bởi tiêu đề của PE. Bộ nạp xem xét IAT của modul và do tìmxem liệu DDL có phụ thuộc vào phần thêm DDLs hay không. Nếu có thì bộnạp cũng bản đồ hoá chúng. Tiến trình này tiếp tục cho đến khi tất cả modulphụ thuộc đã được bản đồ hoá vào bộ nhớ.Một hàm nhập có thể được lập danh sách theo tên hoặc theo số thứ tự. Thứtự thể hiện vị trí của nó trong Bảng địa chỉ xuất khẩu DDL. Nếu lập danhsách bằng tên, bộ nạp thực hiện cuộc tìm kiếm nhị phân trong Bảng con trỏtên xuất khẩu của DDL tương ứng để tra tìm chỉ mục của ký tự đã biết. Sauđó nó dùng chỉ mục này như là chỉ mục trong Bảng thứ tự xuất khẩu để lấyra thứ tự. Sau đó thứ tự này trả ra giá trị được dùng như chỉ mục trong Bảngđịa chỉ xuất khẩu. Việc thêm RVA của ký tự tìm thấy trong bảng EAT thànhđịa chỉ nạp của DDL tương ứng tạo ra điạ chỉ tuyệt đối mà bộ nạp ghi trongmục tương ứng của bảng IA ...

Tài liệu được xem nhiều: