Gần đây tôi đã phát hiện ra rằng Mac OS X thực sự CÓ THỂ chạy các ứng dụng 64 bit (x64) ngay cả khi hạt nhân x86 được tải. Điều đó đã gây sốc cho tôi lần đầu tiên.
Nhưng sau đó tôi đã nhận ra rằng điều đó thực sự kỳ lạ nếu hệ thống hoạt động và chạy dưới CPU tương thích x64 không thể chạy các ứng dụng x64, bất kể kernel nào quản lý các tiến trình. Có thực sự khó khăn như vậy? Chỉ cần tải ứng dụng chết tiệt vào bộ nhớ và thiết lập con trỏ hoạt động CPU đến byte đầu tiên, dễ như ăn bánh!
Rào cản duy nhất và duy nhất để làm điều đó, như tôi có thể tưởng tượng, là một loại "tiêu đề thực thi". Thật không may, tôi không thoải mái lắm với kiến trúc Windows và cấu trúc nhị phân, vì vậy tôi cần giải thích thêm ở đây.
Trên thực tế, ELF64 tiêu chuẩn nhị phân hệ điều hành giống như UNIX có ELF64, mà (như tài liệu ở đây mô tả) không có nhiều khác biệt với ELF32, nhưng ngay cả khi các hạt nhân 32 bit không thể chạy mã x64. Có, chương trình này có khả năng được liên kết với các thư viện x64 và hãy tưởng tượng chúng ta vừa sao chép và dán chúng vào thư mục / usr / lib64. Nhưng tôi khá chắc chắn rằng điều đó không có ích, tại sao?
Và cuối cùng, nhân Mac OS X có gì đặc biệt để nó không lo lắng về tập lệnh của chương trình được sử dụng? Mac OS X có một số phổ biến và phù hợp cho cả hai tiêu đề thực thi của hạt nhân, vì vậy nó chỉ có thể tải ứng dụng vào bộ nhớ và nói với CPU "thực thi ngay từ đây, tôi không bận tâm điều gì"?
PS: Tôi thực sự đã suy nghĩ nhiều về việc đặt câu hỏi này ở đâu: trên stackoverflow.com hoặc superuser.com, và quyết định đặt ở đây, bởi vì chủ đề có thể là vấn đề cụ thể hơn về hệ điều hành.
uname -a
dưới x86 có thể giống như thế:Darwin MacMini.local 11.1.0 Darwin Kernel Version 11.1.0: Tue Jul 26 16:07:11 PDT 2011; root:xnu-1699.22.81~1/RELEASE_i386 i386