2009-12-12 34 views
11

Có thể chạy các tệp thi hành COFF trên UNIX hoặc các tệp thi hành ELF trên Windows không? Và những gì sẽ là các bước để có thể chạy một trong hai loại tập tin trên Windows và UNIX. Tôi chỉ tò mò thôi.COFF trên Linux hoặc ELF trên Windows

+0

[Hệ thống con cho Tổng quan về ứng dụng dựa trên UNIX] (http://technet.microsoft.com/en-us/library/cc771672.aspx#BKMK_PortAppsSUA) [http://en.wikipedia.org/wiki/Microsoft_Windows_Services_for_UNIX] (http://en.wikipedia.org/wiki/Microsoft_Windows_Services_for_UNIX) – abmv

+0

SFA/SUA chỉ chạy các tệp thi hành PE được biên soạn cho NT. – ephemient

Trả lời

7

Để thực sự chạy tệp thực thi và yêu cầu chúng thực hiện các công cụ hữu ích, bạn cần phải lo lắng về API chứ không chỉ định dạng tệp thi hành. Trên máy Linux được cài đặt WINE, bạn có thể chạy các tệp Windows .EXE từ dòng lệnh và chúng thực hiện tương tự như trên Windows. Tuy nhiên, nếu bạn cài đặt CYGWIN trên máy Windows, và sau đó xây dựng lại ứng dụng từ nguồn với trình biên dịch CYGWIN, bạn sẽ nhận được một tệp thực thi chạy trên Windows và thực hiện tương tự như vậy Linux thực thi trên Linux. Rất nhiều công cụ Linux tiêu chuẩn đã được chuyển và trong kho lưu trữ CYGWIN bao gồm các công cụ như X-Windows và GIMP.

+0

Như tôi đã nhận xét trong một câu trả lời khác, http://sf.net/projects/line/ đã cố gắng làm đảo ngược của WINE, chạy các tệp nhị phân Linux chưa sửa đổi trên Windows. Dự án đã bị bỏ hoang trong nhiều năm nay, nhưng nó chắc chắn cho thấy rằng khái niệm này là có thể. Nếu tôi nhớ chính xác, nó có thể chạy một vài chương trình giao diện điều khiển liên kết tĩnh và IPC đang hoạt động. – ephemient

1

COFF ban đầu được giới thiệu bởi UNIX (xung quanh hệ thống V hoặc vùng lân cận) để có, một số UNIX có lẽ vẫn hỗ trợ định dạng COFF. Nó không được sử dụng bởi Linux ít nhất một thời gian, và có lẽ hầu hết các Unices khác cũng đã không được hỗ trợ hoặc hoàn toàn bỏ hỗ trợ.

Hỗ trợ ELF của Windows hơi yếu hơn một chút - gần như chắc chắn không có mà không có một số mẹo nhỏ. Bạn nên cụ thể hơn về những gì bạn đang cố gắng làm ở đây ...

+1

http://sf.net/projects/line/ đã quản lý để tải các tệp thi hành ELF trên Windows - đó có thể là điểm khởi đầu tốt cho ai đó có động lực. – ephemient

3

http://lbw.sourceforge.net/ hoạt động tốt hơn so với dòng. thấp là một dự án khác để làm điều tương tự, nhưng đó là ít làm việc.

CHỈNH SỬA: http://atratus.org/ dường như cũng làm tương tự, mà không cần phải có Interix/SFU.

2

Để trả lời câu hỏi của bạn đúng cách, có liên quan để xem lại ELF, COFF và PE là gì. Các định dạng nhị phân này về cơ bản chỉ là các thùng chứa cung cấp hướng dẫn cho hệ điều hành về cách thực thi các lệnh CPU nguyên chứa trong tệp. Chúng rất giống các bộ chứa âm thanh/video như MKV, WMV và OGG. Hỗ trợ cho các định dạng thực thi được hoặc là trong hệ điều hành hay không. Microsoft Windows đã liên tục không đưa ra bất kỳ sự hỗ trợ nào cho COFF hoặc ELF, cho đến gần đây. Với Windows 10, Microsoft đã cung cấp hỗ trợ gián tiếp cho ELF bằng cách xây dựng thành các thói quen hệ thống tương thích với UserMode-Linux của Windows kernel. Một hạt nhân Linux UserMode chạy trên đỉnh hạt nhân Windows và chạy tất cả các định dạng nhị phân ELF gần như thể nó đang chạy độc lập với MS Windows.

Cách thay thế bằng cách sử dụng UserMode-Linux (hạt nhân) để Microsoft ghi lại phần lớn API Linux theo định dạng tương thích hoàn toàn, lựa chọn của họ giải quyết một vấn đề tương thích khác: API. "A" là viết tắt của Ứng dụng và "Tôi" cho Giao diện, tuy nhiên API làm giao diện chủ yếu chỉ là một tập hợp các thói quen thực thi và các giả định môi trường. Việc truy cập vào hệ thống tập tin và các thói quen hệ thống cơ bản nhất được cung cấp bởi nhân Windows, trong khi mọi thứ khác được cung cấp trong hạt nhân UserMode Linux. Bằng cách này, không chỉ Windows có thể chạy các tệp thi hành được định dạng ELF mà còn có thể chạy các tệp thi hành ELF phổ biến nhất đã được thực hiện để chạy trên API Linux.

Ngược lại, nửa còn lại của câu hỏi, chạy PE (hầu hết các tệp thực thi Microsoft Windows) trên Linux cũng có thể. Có hai thư viện gói thời gian chạy có thể chạy MSIL (ứng dụng máy ảo) và Win32 (ứng dụng CPU bình thường). Vì hạt nhân Linux có thể mở rộng để nhận dạng một định dạng byte nhất định, sau đó chạy chương trình trình bao bọc phù hợp, có hiệu lực, hạt nhân hỗ trợ PE và các định dạng vùng chứa có khả năng thực thi hơn. Do đó, Linux có thể chạy một số chương trình PE trong thời gian chạy đơn (.NET/C# applications) hoặc trong thời gian chạy WINE (Win32 C/C++).

Để cài đặt môi trường UserMode-Linux, bạn có thể làm theo hướng dẫn được cung cấp trên Microsoft's Development Network. Để tóm tắt:

  1. Bật Chế độ nhà phát triển: Cài đặt | Cập nhật & Bảo mật | Dành cho nhà phát triển | Kiểm tra nút radio Chế độ nhà phát triển
  2. Từ menu Start, mở “Turn Windows Features hoặc tắt”
  3. Cuộn xuống và đánh dấu vào “Windows Subsystem cho Linux (Beta)” tính năng
  4. Nhấn ổn và khởi động lại (bắt buộc Bước
  5. Sau khi khởi động lại, mở một dấu nhắc lệnh/PowerShell và chạy "Bash" và làm theo lời nhắc đơn giản để chấp nhận giấy phép của Canonical và khởi động tải xuống hình ảnh Ubuntu
  6. Sau khi tải xuống hoàn tất, bạn sẽ có thể bắt đầu “Bash trên Ubuntu trên Windows” từ trình đơn Start

Hãy nhận biết phương pháp này chỉ hoạt động trên Windows 10 và vẫn bị giới hạn ở chế độ điều khiển chế độ văn bản và cổng Win32 của Xorg như vcXsrv cho bất kỳ đồ họa nào. Các hệ thống Cygwin hoặc MSYS2 không thể chạy các tệp nhị phân ELF, nhưng có thể chuyển và chạy các ứng dụng giống như các tệp nhị phân ELF thông thường trên một hệ thống Linux.

+0

Tôi nên trả lời một nửa câu hỏi khác. Có nhiều cách khác nhau để chạy PE (windows executable) trên Linux, bởi vì hạt nhân Linux có thể mở rộng để nhận ra một định dạng byte nào đó, sau đó chạy một chương trình bao bọc thích hợp. Do đó, Linux có thể chạy một số chương trình PE trong thời gian chạy đơn (.NET/C# applications) hoặc trong thời gian chạy WINE (Win32 C/C++). –

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