2012-04-08 26 views
10

Tôi đã đọc CLR với C# 3.0 và tôi đã phản ánh trên Assemblies, Modules and Headers tuy nhiên mọi thứ trở nên phức tạp. Đây là những gì tôi hiểu nhưng nếu tuyệt vời nếu ai đó có thể làm rõ thêm một chút:Modules, Assemblies, Headers trong CLR

  1. Mô-đun là kết quả của csc.exe chứa mã IL và bảng siêu dữ liệu. bảng siêu dữ liệu chứa ba bảng khác nhau đó là: "TypeRef, ModuleRef, MemberRef, vv"

    • Definition Bàn chẳng hạn như "ModuleDef, typedef, PropertyDef, MethodDef, EventDef, FieldDef"
    • tham khảo bảng như
    • Bàn Manifest **
  2. Assemblies là container có chứa nhiều module cũng như các nguồn như hình ảnh, tài liệu, pdf vv

  3. file PE mà đứng cho Portable Executable là các tập tin có thể .EXE hoặc .DLL. Các tệp này có tiêu đề PE32 hoặc PE32 +, Tiêu đề CLR, Siêu dữ liệu, Mã IL.

Những cuốn sách nói hội là một container bao gồm module và nó cũng nói Mô-đun Quản lý là

Mô-đun quản lý:

Một quản lý mô-đun là một 32-bit Microsoft Windows di động tiêu chuẩn tệp thực thi (PE32) hoặc tệp Windowsthực thi chuẩn (PE32 +) Windows yêu cầu CLR thực thi.

Richter, Jeffrey (2010-02-05). CLR qua C# (Kindle Địa điểm 696-697). Truyền thông OReilly - A. Kindle Edition.

Định nghĩa của hội:

Một assembly là một nhóm logic của một hoặc nhiều module hoặc tài nguyên tập tin.

Richter, Jeffrey (2010-02-05). CLR qua C# (Kindle Địa điểm 766-767). Truyền thông OReilly - A. Kindle Edition.

enter image description here

Vì vậy, có vẻ như Mô-đun quản lý thực sự là một phần của hội trong hình ảnh lấy từ cuốn sách cùng.

tiêu đề PE32 thuộc về Assemblies, tuy nhiên tác giả cũng nói rằng nó thuộc về Quản lý Modules cũng vv

sự tách biệt ở đây là gì? Tại sao ông sử dụng Module và Assemblies hoán đổi cho nhau ngay cả khi nghĩ rằng họ nhìn riêng biệt đủ.

Tệp PE được quản lý có bốn phần chính: tiêu đề PE32 (+), tiêu đề CLR , siêu dữ liệu và IL.Tiêu đề PE32 (+) là thông tin tiêu chuẩn mà Windows mong đợi. Tiêu đề CLR là một khối nhỏ gồm thông tin dành riêng cho các mô-đun yêu cầu CLR (các mô-đun được quản lý).

Richter, Jeffrey (2010-02-05). CLR qua C# (Kindle Locations 1628-1629). OReilly Media - A. Kindle Edition.

Ngoài ra hình ảnh hiển thị rõ ràng rằng Mô-đun chỉ có Siêu dữ liệu không phải PE32 (+), tiêu đề CLR, v.v. Bạn có nghĩ rằng Tệp kê khai và Siêu dữ liệu có thể được sử dụng thay thế cho nhau không?

Và bạn cũng có thể giải thích ** Bảng kê khai trong Mô-đun không?

Trả lời

6

Những gì bạn đăng là một chút nhút nhát về chính xác cách một hội đồng được quản lý được nhúng trong một tệp PE32. Đây là một định dạng rất linh hoạt, ban đầu được dự định để lưu trữ mã nguồn và mã thực thi gốc nhưng đủ linh hoạt để lưu trữ dữ liệu. Mà thực sự là những gì một hội đồng là từ quan điểm của Windows. Chỉ CLR mới có thể biến dữ liệu đó thành một cái gì đó có thể thực thi được.

Tệp PE32 chứa nhiều hơn chỉ là hội đồng. Có thực sự là mã nguồn gốc trong nó là tốt. 5 byte của nó cho hội đồng quản lý tinh khiết. Nó có một hướng dẫn nhảy vào mscoree.dll, bootstrapper cho mã được quản lý. Một EXE chứa một bước nhảy tới _CorExeMain, một DLL chứa một bước nhảy tới _CorDllMain. Điều này được mở rộng hơn nữa cho các chế độ hỗn hợp, System.Data.dll và PresentationCore.dll là các ví dụ về chúng. Chúng có nhiều đoạn mã gốc trong chúng, mã được bao bọc bởi các lớp được quản lý. Trình biên dịch và liên kết C++/CLI là cách để tạo các assembly như thế. Phần .text chứa mã, phần .reloc chứa thông tin di chuyển giúp một DLL được tải tại một địa chỉ tùy ý trong bộ nhớ.

Hầu hết các tệp PE32 cũng chứa tài nguyên không được quản lý. Một định dạng mà Windows hiểu được. Nó được lưu trữ trong phần .rsrc. Trình biên dịch C# ví dụ tự động tạo tài nguyên ở đó, một cái gì đó bạn có thể ghi đè bằng tùy chọn/win32res. Bạn có thể thấy điều này với File + Open + File và chọn một assembly. Có ba điều quan trọng:

  • RT_MANIFEST, chứa tệp kê khai có ID tài nguyên 1. Đó là những gì Windows cần hiểu rằng chương trình C# tương thích với UAC. Bạn tạo tệp kê khai của riêng bạn bằng cách thêm Tệp kê khai ứng dụng vào dự án.
  • ICON, chứa một biểu tượng được chọn làm biểu tượng mặc định cho lối tắt trên màn hình
  • Phiên bản, chứa tài nguyên phiên bản không được quản lý. Hiển thị trong trang thuộc tính chi tiết Explorer, được tổng hợp bởi trình biên dịch từ các thuộc tính assembly trong AssemblyInfo.cs

Dumpbin.exe là một công cụ để xem trước nội bộ của tệp PE32. Thật không may nó biết về hội đồng quản lý, do đó bạn không thể nhìn thấy tất cả mọi thứ.

7

Sách của Richter là tuyệt vời, nhưng "sự thật" được xác định trong ECMA CLI standard.
Vui lòng kiểm tra chương 5 "Thuật ngữ và định nghĩa" để biết định nghĩa theo tiêu chuẩn chính thức.
Tôi nghĩ bạn sẽ hiểu được những điểm chung và khác biệt giữa các thuật ngữ khác nhau tốt nhất khi chỉ xem các định nghĩa ở đó.

+0

Liên kết đẹp. Cảm ơn. – Tarik