이름이 ? 로 끝나면 일반 Linux 바이너리를 실행할 수 없는 것 같습니다. .exe
이유가 무엇인가요?
$ cp /bin/pwd pwd
$ ./pwd
/home/premek
좋아요. 하지만...
$ cp /bin/pwd pwd.exe
$ ./pwd.exe
bash: ./pwd.exe: No such file or directory
$ ls -la pwd.exe
-rwxr-xr-x 1 premek premek 39616 May 3 20:27 pwd.exe
$ file pwd.exe
pwd.exe: ELF 64-bit LSB pie executable, x86-64, version 1 (SYSV), dynamically linked, interpreter /lib64/ld-linux-x86-64.so.2, for GNU/Linux 3.2.0, BuildID[sha1]=2447335f77d6d8c4245636475439df52a09d8f05, stripped
$ ls -la /lib64/ld-linux-x86-64.so.2
lrwxrwxrwx 1 root root 32 May 1 2019 /lib64/ld-linux-x86-64.so.2 -> /lib/x86_64-linux-gnu/ld-2.28.so
$ ls -la /lib/x86_64-linux-gnu/ld-2.28.so
-rwxr-xr-x 1 root root 165632 May 1 2019 /lib/x86_64-linux-gnu/ld-2.28.so
$ file /lib/x86_64-linux-gnu/ld-2.28.so
/lib/x86_64-linux-gnu/ld-2.28.so: ELF 64-bit LSB pie executable, x86-64, version 1 (SYSV), dynamically linked, BuildID[sha1]=f25dfd7b95be4ba386fd71080accae8c0732b711, stripped
답변1
나는 이 문제에 대해 하루를 보냈고 물론 이 질문을 게시한 후 1초 후에 와인용 .exe 파일을 등록하기 위해 다음과 같은 내용이 기억났습니다.
$ sudo cat /proc/sys/fs/binfmt_misc/wine
enabled
interpreter /usr/bin/wine
flags:
extension .exe
존재하지 않습니다 /usr/bin/wine
.
나는 다음을 사용하여 그것을 제거했습니다.
$ sudo update-binfmts --remove wine /usr/bin/wine
update-binfmts: warning: no executable /usr/bin/wine found, but continuing anyway as you request
이제 괜찮아
답변2
Linux를 포함한 대부분의 UN*Xes는 파일 시작 부분이나 그 근처에 나타나는 "매직 넘버"로 기본 실행 파일(Linux를 포함한 대부분의 최신 UN*Xes의 경우 ELF 파일)을 식별합니다.
Windows 바이너리는 다음 위치에 있습니다.이식 가능한 실행 파일 형식, 마법의 숫자도 있습니다 - 파일은 스텁 MS-DOS 실행 파일로 시작합니다.문자 "MZ"를 포함하는 매직 넘버로 시작합니다., 그리고 변수 오프셋이 있는 별도의 "PE" 매직 넘버도 있습니다.
~에 따르면binfmt_misc에 대한 kernel.org 문서, binfmt_misc 규칙은 파일 확장자보다는 파일 콘텐츠(예: 매직 넘버 찾기)를 기반으로 할 수 있습니다. 그들이 제공하는 와인 규칙의 예는 다음과 같습니다.
:DOSWin:M::MZ::/usr/local/bin/wine:
Wine이 설치되어 있지 않으므로 규칙을 완전히 제거하는 것이 올바른 수정입니다. Wine을 설치한 적이 있다면하다Linux 바이너리와 동일한 방식으로 Windows 바이너리를 실행하려면 커널에 .exe로 끝나는 모든 항목이 Windows 실행 파일이라고 가정하도록 지시하는 규칙 대신 예제 규칙과 유사한 규칙을 사용해야 합니다.