2009-12-22 20 views

Trả lời

5

Chạy công cụ PEVerify chống lại lắp ráp của bạn.

PEVerify.exe được cài đặt cùng với Visual Studio, ví dụ:cái này đi kèm với Visual Studio 2012:

C:\Program Files (x86)\Microsoft SDKs\Windows\v8.0A\bin\NETFX 4.0 Tools\PEVerify.exe

+0

Khi bạn chạy tiện ích này, làm cách nào để biết liệu đó có phải là mã được quản lý hoàn toàn không? Tôi chỉ nhận được: "Tất cả các lớp học và phương pháp trong đã được xác minh". –

+1

@DanW: thì tất cả đều tốt. Bạn sẽ nhận được lỗi khác. Nếu được gọi từ một tập lệnh hoặc một chương trình khác, bạn có thể kiểm tra mã thoát khác không cho biết lỗi. Bạn có thể kiểm tra điều này bằng cách sử dụng từ khóa "không an toàn" trong C#. –

0

Tôi sẽ phải kiểm tra kỹ điều này nhưng tôi khá chắc chắn bạn có thể tìm thấy điều đó với Reflector bằng redgate.

+1

có vẻ không phải là một ý tưởng tốt - đó là rất nhiều công việc để đào tất cả các phương pháp của một assembly – ironic

+0

Làm thế nào tôi có thể không tìm thấy bất cứ điều gì trong Reflector 5.1.6.0 liên quan đến điều này –

0

ILMerge chỉ hợp nhất các cụm được quản lý, here, để trích dẫn từ trang tải xuống của chúng, 'ILMerge là một tiện ích để hợp nhất nhiều hội đồng .NET thành một assembly .NET'.

Tôi chưa thấy một hội đồng được quản lý được hợp nhất với một tệp nhị phân gốc. Về mặt kỹ thuật, bạn có thể kết hợp chúng với nhau, bằng cách bao gồm nhị phân không được quản lý như một tài nguyên nhúng, nhưng việc tải tài nguyên nhúng vào bộ nhớ dưới dạng mã nhị phân - tôi chưa từng thấy điều này trước đây. Tôi đã thử kỹ thuật đó bằng bản đồ bộ nhớ nhưng không thành công.

Cách kiểm tra khác là tìm trong chính tệp nhị phân, nếu nó có mục nhập thứ 15 trong thư mục dữ liệu và khác 0 thì đó là tệp nhị phân .NET, nhị phân gốc không có. Xem here nơi tôi đã đăng câu trả lời này cho một câu hỏi tương tự.

Hy vọng điều này sẽ giúp, Trân trọng, Tom.

0

Tôi nghĩ bạn nên sử dụng .NET reflection để xem xét tất cả các loại và phương pháp trong assembly.

3

Run ildasm từ một Visual Studio Prompt Command như sau:

ildasm file.exe/tiêu đề/vụn/văn bản

Đến cuối đầu ra bạn sẽ thấy như sau:

// ----- CLR Tiêu đề:
kích thước // Tiêu đề: ...
// Major runtime versi trên: ...
// phiên bản runtime nhỏ: ...
// ...
// Flags: 0x00000000

Nếu Flags có tập bit thấp nhất (ví dụ 0x00000001) sau đó lắp ráp là CLR tinh khiết; nếu không (ví dụ: 0x00000000) thì lắp ráp là chế độ hỗn hợp. Lưu ý rằng các cờ khác có thể có mặt, do đó, nó chỉ là bit thấp nhất mà bạn quan tâm (vì vậy nếu chữ số cuối cùng là 1, 3, 5, 7, 9, b, d hoặc f thì đó là CLR thuần túy).

(Edit: Bạn cũng có thể chạy ildasm đồ họa, mở tập tin thực thi trong câu hỏi, và chọn Headers từ menu View để xem thông tin tương tự.)

+3

Không phải là một slam-dunk afaik, C++/CLI compil er/linker không đặt bit này đúng, ngay cả khi bạn biên dịch với/clr: pure. Corflags.exe cũng cho thấy điều này. –

9

Theo đề nghị của nobugz, một cách dễ dàng hơn để xem Flags CLR được sử dụng tiện ích corflags, là một phần của SDK .NET 2.0.

Nếu không có tùy chọn được quy định, những lá cờ cho hình ảnh nhất định được hiển thị:

C:\>corflags Foo.dll 
Version : v2.0.50727 
CLR Header: 2.5 
PE  : PE32 
CorFlags : 9 
ILONLY : 1 
32BIT  : 0 
Signed : 1 

Các "ILONLY" chút cho biết đây là một assemby quản lý thuần túy, hoặc một hội đồng hỗn hợp.

Lưu ý rằng nhận xét từ người dùng 'nobugz' cho thấy những lá cờ này không được bảo đảm là chính xác, vì vậy phương pháp này có thể không dễ dàng.

0

Để có được lá cờ PE từ C#, sử dụng API System.Reflection: http://www.example8.com/category/view/id/6027

...

Assembly a = Assembly.GetExecutingAssembly(); 
Module m = a.ManifestModule; 

PortableExecutableKinds peKinds; 
ImageFileMachine imageFileMachine; 
m.GetPEKind(out peKinds, out imageFileMachine); 

if ((peKinds & PortableExecutableKinds.ILOnly) != 0) 

...

1

Cải thiện về câu trả lời cung cấp ở trên Wim .. .

  1. Định vị "PEVerify.exe" của bạn - bạn có nó nếu bạn đã cài đặt VS. CO PY ĐẦY ĐỦ PATH TO THE PEVerify.exe tập tin, con đường của bạn sẽ khác nhau - - Đây là một ví dụ: C: \ Program Files (x86) \ Microsoft SDK \ Windows \ v8.0A \ bin \ NETFX 4.0 Tools \ PEVerify.exe

  2. mở Visual Studio Cửa sổ nhắc lệnh (không "Run as Administrator")

  3. Gõ vào: cd C:\Program Files (x86)\Microsoft SDKs\Windows\v8.0A\bin\NETFX 4.0 Tools

  4. dấu nhắc lệnh của bạn bây giờ phải là văn bản dài này thay vì chỉ C: \ hoặc một cái gì đó .... nó sẽ trỏ đến đường dẫn của vị trí PEVerify.exe.

  5. Bây giờ gõ vào: peverify "your full path to your dll you want to check - sau đó nhấn Enter - Dưới đây là ví dụ của tôi: peverify "G: \ TestFolder \ My_Managed_OR_Unmanaged.dll"

  6. Sau khi bạn nhấn Enter và bạn nhận được một thông điệp như dưới đây, 100 của mình % được quản lý dll -. Tất cả các lớp học và phương pháp trong My_Managed_OR_Unmanaged.dll Đã xác minh"