2013-09-25 105 views

Trả lời

26
  • .rdata là dành cho dữ liệu const. Đây là phiên bản chỉ đọc của phân đoạn .data.

  • .idata giữ thư mục nhập (.edata cho xuất). Nó được sử dụng bởi EXE và DLL để chỉ định các chức năng được nhập và xuất. Xem thông số định dạng PE (http://msdn.microsoft.com/library/windows/hardware/gg463125) để biết chi tiết.

Tóm tắt tên phân khúc tiêu biểu:

.text: Code 
.data: Initialized data 
.bss: Uninitialized data 
.rdata: Const/read-only (and initialized) data 
.edata: Export descriptors 
.idata: Import descriptors 
.reloc: Relocation table (for code instructions with absolute addressing when 
      the module could not be loaded at its preferred base address) 
.rsrc: Resources (icon, bitmap, dialog, ...) 
.tls: __declspec(thread) data (Fails with dynamically loaded DLLs -> hard to find bugs) 

Như Martin Rosenau đề cập, tên phân khúc chỉ điển hình. Loại phân đoạn thực được chỉ định trong tiêu đề phân đoạn hoặc được xác định bằng cách sử dụng dữ liệu được lưu trữ trong phân đoạn.

4

Thực tế, tên của các phân đoạn bị Windows bỏ qua.

Có các trình liên kết sử dụng các tên phân đoạn khác nhau và thậm chí có thể lưu trữ Trình mô tả nhập, Xuất mô tả, Tài nguyên, v.v. trong phân đoạn ".text" thay vì sử dụng các phân đoạn riêng biệt.

Tuy nhiên, dường như đơn giản hơn để tạo các phần riêng biệt cho siêu dữ liệu như vậy, vì vậy hầu hết người liên kết sẽ sử dụng các phần riêng biệt.

Điều này có nghĩa là: ".idata", ".rdata", ".rsrc", ... do không chứa dữ liệu chương trình (mặc dù tên của chúng kết thúc bằng "dữ liệu") nhưng chúng chứa thông tin meta được sử dụng bởi hệ điều hành. Ví dụ, phần ".rsrc" chứa thông tin về biểu tượng được hiển thị khi xem tệp thi hành trong Explorer.

".idata" chứa thông tin về tất cả các tệp DLL theo yêu cầu của chương trình.