Thứ Ba, 26 tháng 3, 2013

Cấu trúc cơ bản của PE

Hình trên là cấu trúc của một PE file. Ở mức tối thiểu nhất thì PE file sẽ có 2 sections: 1 cho phần đoạn mã (code) và 1 cho phần dữ liệu (data). Một chương trình ứng dụng chạy trên nền tảng Windows NT có 9 sections được xác định trước có tên là : .text, .bss, .rdata, .data, .edata, .idata, .pdata, .debug  và .rsrc. Một số chương trình ứng dụng khác lại không cần tất cả sections này, trong khi cũng có một số chương trình lại định nghĩa nhiều sections riêng biệt để phù hợp với chúng.

 Những sections mà hiện giờ đang tồn tại và xuất hiện thông dụng nhất trong một file thực thi là :
1. Excutable Code Section, có tên là .text (Microsoft) hoặc là CODE (Borland).
2. Data Section, có những tên như .rdata, .data hoặc .bss (Microsoft) hoặc DATA (Borland).
3. Resources Section có tên là .rsrc (MicroSoft)
4. Export Data Section, có tên là .edata
5. Import Data Section, có tên là .idata.
6. Debug Information Section, có tên là .debug.

Những cái tên này thực sự là không thích hợp khi chúng bị lờ đi bởi HĐH và chúng ta tài liệu phục vụ cho lợi ích của các lập trình viên. Một điểm quan trọng nữa là cấu trúc của một PE file trên đĩa là hoàn toàn chính xác, đúng đắn giống hệt khi nó được nạp vào trong bộ nhớ nghĩa là ta có thể xác định chính xác thông tin file trên đĩa của một PE file nào đó mà sau đó ta phải kiếm tìm nó sau khi được nạp vào bộ nhớ.

Tuy nhiên nó không được sao chép lại một cách chính xác trong bộ nhớ. Các Windows loader sẽ quyết định phần nào được ánh xạ lên bộ nhớ, phần nào được bỏ qua. Phần dữ liệu mà không được ánh xạ lên sẽ được đặt phía cuối file, sau bất cứ phần nào sẽ được ánh xạ lên bộ nhớ, ví dụ Debug Information.

Cũng vì vậy vị trí của một mục trong file trên đĩa sẽ luôn khác biệt so với vị trí của nó khi được nạp vào bộ nhớ bởi sự quản lý bộ nhớ ảo dựa trên các trang mà Windows sử dụng. Khi các Sections được nạp vào RAM chúng được căn sao cho ăn khớp với 4KB memory Pages. Mỗi Sections sẽ bắt đầu trên một page mới. Một trường trong PE header sẽ thông báo cho hệ thống biết bao nhiêu bộ nhớ cần để riêng ra cho việc ánh xạ file

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

Đăng nhận xét