Điều này khiến tôi băn khoăn về cách tính năng "AnyCPU" trong .NET hoạt động: Nó tải tệp thực thi là 32 -bit nếu hệ thống là 32-bit, và là 64-bit nếu hệ thống là 64-bit (mà bạn có thể dễ dàng xác nhận với Task Manager). Vì vậy, rõ ràng, điều này là không thể.Viết chương trình Cross-Platform (tương thích 32-bit và 64-bit) cho Windows (như AnyCPU in .NET)
Câu hỏi đặt ra là, chính xác Microsoft đã làm như thế nào? Windows ban đầu không biết về khung công tác .NET, vì vậy Windows PE Loader không thể tìm kiếm bất kỳ tính năng bổ sung nào trong các tiêu đề PE cho tiêu đề CLR; tính năng này phải được thêm vào bởi một số loại mở rộng chế độ hạt nhân. Nhưng khung công tác .NET dường như không cài đặt được thứ gì ... Tôi hoàn toàn mất đi cách thực thi tương tự có thể là bản địa 32-bit và 64-bit cùng một lúc, đặc biệt là do việc tháo gỡ mscoree.dll không thậm chí không hiển thị các tham chiếu đến các hàm gốc không có giấy tờ.
Có ai có kiến thức và/hoặc dự đoán hợp lý về cách thực hiện điều này không? Đó rõ ràng là có thể (vì vậy không nói những điều như "đó là không thể"), và nó làm cho tôi muốn thử viết một mẹ đẻ cross-platform EXE ...
Edit:
Như một lưu ý phụ, hãy xem xét cách bạn không thể chạy thực thi 32 bit trong môi trường Windows PE 64 bit ... có có là một số cách để mở rộng hoặc sửa đổi trình tải PE với một số loại "plugin", đúng ?
Có một số chương trình (ví dụ: Process Explores) thực hiện việc này để phân phối tệp thực thi 32 bit * khởi chạy * hình ảnh 64 bit nếu có thể. Ví dụ. là một "AnyCPU" thực thi bao giờ hết, nhưng một PE 32-bit? –
@pst: Tôi hoàn toàn nhận thức được những điều đó, nhưng không, chúng khác nhau. Các thực thi AnyCPU là 64-bit từ thời điểm chúng bắt đầu trên hệ điều hành 64 bit - không có giải nén và không có gì giống như "Hãy JIT mã bytecode này vào 64-bit và sau đó khởi động lại quá trình 64-bit." Đó là điều khiến tôi bối rối. – Mehrdad