2008-10-29 26 views
5

Xin lỗi nếu bất kỳ điều gì tôi sắp nói không có ý nghĩa hay nhìn thấy một cái gì đó hiển nhiên - kiến ​​thức của tôi về nội bộ CLR là điểm yếu.x64 .NET compilation/Process Explorer oddity

Nếu tôi hiểu chính xác, thì nếu tôi chỉ xây dựng giải pháp cho 'AnyCPU' trong VS2K5 (hoặc điểm MSBuild tại tệp .sln đó với các cài đặt đó) thì các tệp nhị phân chỉ biên dịch theo MSIL. Sau đó, họ nhận được JITted đến 32 bit nếu được thực thi trên nền tảng 32 bit hoặc mã 64 bit nếu được thực thi trên x64 ... phải không?

Các tệp DLL được sử dụng cho ứng dụng web và được lưu trữ trong quy trình W3WP.exe. Process Explorer cho tôi biết W3WP là một quá trình 64-bit.

Nhưng khi tôi sử dụng Trình khám phá quy trình để kiểm tra các thuộc tính trên một trong các tệp DLL này trong chế độ xem DLL, nó cho biết: 'Hình ảnh: 32-bit'. Đưa cái gì?

Nếu tôi chạy corflags đối với dll được đề cập, nó cho tôi biết: ILONLY 1, 32BIT 0 nhưng PE PE32. Sự hiểu biết của tôi là điều này có nghĩa là có nó được biên dịch chỉ xa như IL, không có nó không giới hạn hoặc 32 bit hoặc 64 bit, nhưng tôi không hoàn toàn rõ ràng. PE32 có gắn cờ với bất kỳ thứ gì để hiển thị dưới dạng 32 bit như trên không?

Trả lời

5

Câu hỏi của bạn có liên quan đến this question. Những gì bạn đang nhìn thấy trong quá trình thám hiểm là loại hình ảnh, đó là khác nhau của loại "tương thích thời gian chạy" quy định trong lắp ráp của corflags.

Điểm thiết lập "Bất kỳ CPU" là bắt mẫu số chung nhất trong cả hình ảnh gốc và lắp ráp, sao cho nó cho phép khởi động Windows cho .NET. Chọn loại Thời gian chạy nào sẽ phù hợp nhất cho nền tảng hiện tại. Vì vậy, ví dụ của bạn, bạn có một hình ảnh 32 bit (như được chỉ định bởi PE Header), có chứa một "bất kỳ CPU" lắp ráp (theo quy định của các CorFlags cho lắp ráp). Ví dụ:

2

Sau đó, họ nhận được JITted đến 32 bit nếu được thực hiện trên nền tảng 32 bit hoặc mã 64 bit nếu được thực hiện trên x64 ... phải không?

Đúng vậy, bạn có thể kiểm tra bằng cách thực hiện exe cùng biên soạn cho AnyCPU:

sizeof (IntPtr) == 4 // true trên 32bit

sizeof (IntPtr) == 8 // true trên 64bit

Tuy nhiên, nếu hội đồng của bạn được tham chiếu trong quá trình được biên dịch cho nền tảng 32 bit, nó sẽ được trích dẫn đến 32 bit (chạy trong WOW cho Windows 64 bit).

+0

cảm ơn :) bất kỳ ý tưởng nào tại sao Process Explorer đang tinh nghịch? –

Các vấn đề liên quan