Các bước nào được thực hiện bởi trình liên kết trong khi giải quyết việc di chuyển trong một tệp đối tượng trước khi tạo hình ảnh cuối cùng? Cụ thể hơn, trình liên kết xử lý giá trị đã được lưu trữ tại vị trí di chuyển như thế nào? Liệu nó có luôn thêm nó vào VA/RVA cuối cùng hay đôi khi nó bị bỏ qua (ví dụ: một số loại di dời nhất định)?Làm cách nào để di chuyển hoạt động trong các tệp COFF đối tượng (không phải hình ảnh)
tôi không thể tìm thấy một lời giải thích rõ ràng trong MS PE/COFF Specfication, và sau khi googling và thử nghiệm một thời gian, tất cả tôi có thể tìm hiểu được điều này:
- Trong spec MS COFF, chương 5.6.2 " Các kiểu tái định vị cơ sở ", người ta nói rằng" Việc di dời cơ sở áp dụng tất cả 32 bit của sự khác biệt cho trường 32 bit ở mức bù ", mà tôi đoán có nghĩa là việc di dời phải tính đến bất kỳ địa chỉ nào đã được lưu trữ . Tuy nhiên, chương 5.6 (phần .reloc) chỉ liên quan đến các tệp hình ảnh chứ không phải tệp đối tượng.
- Tiện ích dumpbin thêm cột có tên "Áp dụng cho" khi in bảng di chuyển, dường như luôn luôn (không có vấn đề loại di dời) chứa giá trị được lưu trữ tại vị trí di dời.
- Relocation Directives chapter in the DJGPP COFF Specification tuyên bố rõ ràng rằng giá trị hiện được lưu trữ tại vị trí phải được thêm vào địa chỉ của biểu tượng được chỉ định bởi mục nhập bảng di chuyển.
Bạn có thể chỉ cho tôi bất kỳ tài liệu nào (có liên quan) giải thích cách liên kết được xử lý bởi trình liên kết không?
Không phải là phần thích hợp cho tệp đối tượng 4.2 "Chuyển vị trí COFF" và không phải phần 5.6.2 chỉ dành cho tệp hình ảnh? – legalize
Phải, nhưng phần 4.2 không giải thích phải làm gì nếu trang web di dời có giá trị khác 0 được lưu trữ trong đó, điều này thực sự khá phổ biến và có thể dễ dàng nhìn thấy bằng cách sử dụng dumpbin. – user2625389