현재 정답

현재 정답

아키텍처가 동일하다면 Windows .exe 파일이 Linux 시스템에서 실행될 수 있다는 것은 놀라운 일이 아닙니다(RAM에 올바르게 로드된 경우). 그러나 Linux와 Windows의 시스템 호출은 완전히 다릅니다. 따라서 .exe 파일이 Linux에서 시스템 호출을 호출하면 결과는 우리가 기대하는 것과 다릅니다.

Wine이 Windows 시스템 호출을 Linux 시스템 호출로 변환한다고 생각하지만 어떻게 될지는 상상이 되지 않습니다. 어쩌면 시스템 호출은 int, syscall, systenter 등을 통해 구현될 수도 있습니다. Wine은 어떤 방식으로든 그러한 작업을 직접 연결합니까?

답변1

현재 정답

시스템 호출은 번역되지 않습니다.

시스템 호출은 일반적으로 Windows 자체의 소프트웨어에 의해 이루어지지 않고 공유 시스템 라이브러리에 대한 일반적인 호출을 통해 이루어집니다. 소프트웨어에서 사용하는 Windows API는 시스템 호출(대부분 개인용으로 간주되며 Windows의 일부가 아닌 소프트웨어에서는 전혀 사용되지 않음)에 중점을 두기보다는 대부분 일반 라이브러리 API이므로 Windows에서 상당히 인상적인 장기 구현을 구현할 수 있습니다. 호환성.

따라서 wine은 API를 구현하지만 Windows 시스템 호출은 구현하지 않습니다. 심지어 그렇게 할 수도 없습니다. 사용자 영역 소프트웨어이므로 소프트웨어 인터럽트를 포착할 수 없습니다.

그런데,

아키텍처가 동일하다면 Windows .exe 파일이 Linux 시스템에서 실행될 수 있다는 것은 놀라운 일이 아닙니다.

호출 규칙, 파일 추상화, 개체 파일 형식 및 기타 여러 측면의 차이점을 과소평가합니다. 다른 운영 체제에서 사용되는 인터페이스용으로 작성된 소프트웨어를 성공적으로 실행하고, 호출하고, 기본 시스템과 메모리를 교환하는 것은 그리 쉬운 일이 아닙니다.


read1 이는 일반적으로 POSIX/libc 및 Linux API를 구현하고 자체적으로 시스템 호출을 거의 수행하지 않는 C 함수(예:)를 사용할 때와 매우 유사합니다 . syscall(SYS_READ, …)libc를 작성하려는 사람은 거의 찾아볼 수 없습니다 .

더 나은 답변이 될 것 같아요

와인은 여전히 ​​그렇게 할 수 없으며, 앞으로도 그럴지는 확실하지 않습니다. 올바른 패치를 활성화하면 와인 준비가 (실험적으로) 가능합니다.

위의 내용은 WINE으로 시뮬레이션한 대부분의 경우에 해당되지만 @mbrig가논평, 시작2019년경,wine-staging 하다Windows 시스템 호출을 캡처하는 기능. Linux를 사용하여 이 작업을 수행합니다.보안 컴퓨팅기능.

Seccomp는 프로세스가 커널에 다음과 같은 정보를 전달할 수 있도록 고안되었습니다.

안녕하세요 커널님, 저는 서버이고 모든 청취 소켓을 설정했습니다. 웹 사이트를 제공하는 데 필요한 것 외에는 시스템 호출을 할 이유가 없으므로, exit, read, 및 write이외의 시스템 호출을 수행하면 sigreturn바이너리가 바닥납니다.

prctl이는 매개변수를 사용하여 시스템 호출을 실행하여 이를 수행합니다 PR_SET_SECCOMP.

이것은 약간 유연하지 않았기 때문에 시스템 호출과 해당 인수가 올바른지 확인하는 프로그램을 실제로 정의하는 프로세스 기능이 나중에 추가되었습니다. 그러나 이러한 필터는 시스템 호출 시 BPF 프로그램으로 정의되어야 합니다 prctl(PR_SET_SECCOMP,…). 생성된 신호 처리기가 실행해야 하는 기능을 지정할 수도 있습니다.

이제 WINE은 이 작업을 수행할 수 있으며 기본적으로 WINE 프로세스 내에서 수행된 시스템 호출이 Linux 시스템 호출에 사용되는 범위를 벗어나는지 확인하는 것 외에는 아무것도 수행하지 않습니다. 그렇지 않은 경우 시스템 호출이 정상적으로 진행되도록 허용됩니다. 그렇다면 SIGSYS가 발생하고 단일 Windows 시스템 호출에 대한 스케줄러가 실행됩니다.

작은 문제: 최선을 다해 보세요찾다공식 메인라인 wine저장소에서는 패치가 아직 "최종 사용자" 와인에 출시되지 않았습니다. 패치에 3년은 약간 긴 시간입니다. 이 접근 방식에 문제(성능에 미치는 영향, 보안 메커니즘과 결합 시 문제)가 있고 메인라인 와인에 포함될 수도 있고 포함되지 않을 수도 있기 때문인 것 같습니다. 메커니즘은 소프트웨어라고 부르는 것입니다. wine.

관련 정보