2009-12-12 15 views
11

COFF 실행 파일을 UNIX에서 실행하거나 ELF 실행 파일을 Windows에서 실행할 수 있습니까? Windows 및 UNIX에서 파일 형식을 실행할 수있는 단계는 무엇입니까? 나는 단지 궁금하다.Linux의 COFF 또는 Windows의 ELF

+0

[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는 NT 용으로 컴파일 된 PE 실행 파일 만 실행합니다. – ephemient

답변

7

실제로 실행 파일을 실행하고 유용한 기능을 수행하려면 실행 파일 형식뿐만 아니라 API에 대해 걱정할 필요가 있습니다. WINE이 설치된 Linux 컴퓨터에서는 명령 줄에서 Windows .EXE 파일을 실행할 수 있으며 Windows에서와 동일한 작업을 수행합니다.

그러나 CYGWIN을 Windows 컴퓨터에 설치 한 다음 CYGWIN 컴파일러를 사용하여 응용 프로그램을 원본에서 다시 빌드하면 Windows에서 실행되는 실행 파일이 만들어지고 동일한 작업이 수행됩니다 Linux 실행 파일은 Linux에서 실행됩니다. 많은 표준 Linux 도구가 이미 X-Windows 및 김프와 같은 CYGWIN 저장소에 포팅되어 있습니다.

+0

또 다른 답변으로 http://sf.net/projects/line/에서 WINE의 반대가되고 Windows에서 수정되지 않은 Linux 바이너리를 실행하려고 시도했습니다. 이 프로젝트는 수년 동안 버려졌지만 개념이 가능하다는 것을 분명히 보여줍니다. 올바르게 회상하면 몇 가지 정적으로 연결된 콘솔 프로그램이 실행될 수 있으며 IPC가 작동했습니다. – ephemient

1

COFF는 원래 UNIX (System V 또는 그 주변)에서 소개되었으므로 일부 UNIX는 여전히 COFF 형식을 지원할 수 있습니다. 적어도 잠시 동안은 리눅스에 의해 사용되지 않을 것이고 아마도 다른 대부분의 유닉스 역시 지원을 중단하거나 철저하게 지원을 중단했을 것입니다.

Windows ELF 지원은 좀 더 iffy입니다 - 거의 확실한 것은 약간의 속임수가없는 것입니다. 여기에 무엇을 하려는지 구체적으로 설명해야합니다 ...

+1

http://sf.net/projects/line/ Windows에서 ELF 실행 파일을로드 할 수있었습니다. 이는 동기 부여가 된 사람에게 좋은 출발점이 될 수 있습니다. – ephemient

2

질문에 올바르게 대답하려면 ELF, COFF 및 PE가 무엇인지 검토하는 것이 적절합니다. 이러한 바이너리 형식은 본질적으로 파일에 포함 된 원시 CPU 명령어를 실행하는 방법에 대해 운영 체제에 지시하는 컨테이너입니다. 그들은 MKV, WMV 및 OGG와 같은 오디오/비디오 컨테이너와 매우 비슷합니다. 실행 가능 형식에 대한 지원은 운영 체제에서 지원됩니다. Microsoft Windows는 최근까지 COFF 또는 ELF에 대한 지원을 지속적으로 제공하지 않았습니다. Windows 10에서 Microsoft는 Windows 커널 UserMode-Linux 호환 시스템 루틴을 구축하여 ELF에 대한 간접 지원을 제공합니다. UserMode Linux 커널은 Windows 커널과 달리 ELF 바이너리 형식을 MS Windows와 독립적으로 실행되는 것처럼 실행합니다.

대부분의 Linux API를 Microsoft가 호환 가능한 형식으로 다시 작성하는 UserMode-Linux (하위 커널)를 사용하는 대신에 다른 호환성 문제를 해결할 수 있습니다. API. "A"는 Application을 의미하고 "I"는 인터페이스를 의미하지만 API는 인터페이스로서 주로 실행 루틴 및 환경 가정의 집합입니다. 파일 시스템과 가장 기본적인 시스템 루틴에 대한 액세스는 Windows 커널에 의해 제공되는 반면 다른 모든 것은 UserMode Linux 커널에 제공됩니다. 이렇게하면 Windows에서 ELF 형식의 실행 파일을 실행할 수있을뿐만 아니라 이미 Linux API에서 실행되도록 가장 많이 사용되는 ELF 실행 파일을 실행할 수 있습니다.

질문의 나머지 반은 Linux에서 PE (대부분의 Microsoft Windows 실행 파일)를 실행할 수 있습니다. MSIL (가상 컴퓨터 응용 프로그램)과 Win32 (일반 CPU 응용 프로그램)를 실행할 수있는 런타임 래핑 라이브러리는 두 가지가 있습니다. Linux 커널은 특정 바이트 형식을 인식 할 수 있도록 확장 가능하므로 적절한 래퍼 프로그램을 실행하면 실제로 커널이 PE 및 잠재적으로보다 실행 가능한 컨테이너 형식을 지원합니다. 따라서 Linux는 모노 런타임 (.NET/C# 응용 프로그램) 또는 WINE 런타임 (Win32 C/C++)에서 일부 PE 프로그램을 실행할 수 있습니다.

UserMode-Linux 환경을 설치하려면 Microsoft's Development Network에 제공된 지침을 따르십시오. 요약하려면 :

  1. 개발자 모드 : 설정 | 업데이트 & 보안 | 개발자 용 |
  2. 이 좋아하고 재부팅 (필수을 치고 기능 "리눅스 (베타) 용 Windows 하위 시스템의"를 열고 "Windows 기능 설정 또는 해제"아래
  3. 스크롤 및 확인, 개발자 모드 라디오 버튼 시작 메뉴에서
  4. 확인 단계)
  5. 다시 부팅하면 PowerShell/명령 프롬프트를 열고 "Bash"를 실행하고 간단한 지시에 따라 Canonical의 라이센스를 수락하고 우분투 이미지 다운로드를 시작하십시오.
  6. 다운로드가 완료되면 시작 메뉴에서 "윈도우 우분투에서 배쉬"를 시작할 수 있습니다.

이 방법은 Windows 10에서만 작동하며 그래픽 모드의 경우 vcXsrv와 같은 Xorg의 Win32 포트와 텍스트 모드 콘솔로 제한됩니다. Cygwin 또는 MSYS2 시스템은 ELF 바이너리를 실행할 수 없지만 일반적으로 Linux 시스템에서 ELF 바이너리와 동일한 응용 프로그램을 이식하고 실행할 수 있습니다.

+0

나는 질문의 나머지 절반에 대답 했어야했다. Linux에서 PE (Windows 실행 파일)를 실행하는 방법은 다양합니다. Linux 커널을 확장하여 특정 바이트 형식을 인식 한 다음 적합한 래퍼 프로그램을 실행하기 때문입니다. 따라서 Linux는 모노 런타임 (.NET/C# 응용 프로그램) 또는 WINE 런타임 (Win32 C/C++)에서 일부 PE 프로그램을 실행할 수 있습니다. –