EDIT : Linux 용 Windows 서브 시스템이 32 비트를 처리 할 수 없다는 것이 문제인 것처럼 보입니다.Windows의 64 비트 Ubuntu에서 32 비트 어셈블리 컴파일
어셈블리 및 리눅스 초보자가 Windows의 64 비트 우분투에서 32 비트 어셈블리 (AT & T 구문)를 컴파일하려고합니다. 내 상황은 실제적으로 this other stackoverflow question의 정확한 복제본이지만 솔루션 (여러 게시물에서 반복되는 것을 볼 수 있음)이 나에게 어떤 이유로 작용하지 않습니다. 나는 Programming with the Ground Up을 사용하여 x86 어셈블리를 배우고 있으며 Windows에서 Ubuntu의 Bash에서 컴파일 할 프로그램을 얻을 수 없습니다.
내 명령에 여러 가지 옵션 조합을 시도했지만 일부는 분명히 컴파일 할 수 있지만 바이너리 파일 (형식 오류)을 실행할 수 없거나 할 수는 있지만 movl 8(%ebp), %eax
에 도착하면 조각화 오류가 발생합니다. 내 소스 파일에서 (아마도 64 비트 환경에서 32 비트 스택을 설정했기 때문에 읽음). without .32code and with --32 (내 게시물 아직 너무 대신 링크를 넣어 이미지를 포함 할 수 없습니다) : 내 프로그램의 첫 번째 줄과 같은 및 as
에 대한 --32
옵션을 .32code
없이
는 ld
아무 시도는 도움이 아무것도 생산하지 않습니다. .32code
없이 여전히
지금 --x32
(without .32code and with --x32)와 함께 난 당신이 내 소스 파일에 포함 그래서 여기에 .32code
을 포함하지 않는 경우 등 푸시, 팝,에 문제가 발견 : with .32code and with --x32.
다음, 거기에 내가 대신 as
및 ld
의 gcc
로 만들 수 있습니다 유사한 시도가 있지만 그것은 실패의 모든 다른 조합을 포함하고 우리가 들어가 있기 때문에 벌레의 깡통을 열어 의미가 있는지 확실하지 않습니다 gcc가 필요한 라이브러리를 가지고 있는지 여부 (?). 예를 들어, gcc -m32 -nostdlib factorial.s -o factorial
을 사용하면 .32code
의 유무에 관계없이 "이진 파일을 실행할 수 없습니다 : EXEC 형식 오류"메시지가 나타납니다. sudo apt-get install lib32gcc-4.8-dev
및 다른 시도와 같은 것을 시도해도 아무 것도 작동하지 않는 것으로 보입니다. 많은 시간 동안 qemu-user-static
과 관련된 문제가 발생할 수 있습니다. 한 번에 설치했기 때문에 지금은 모두 f %^#! d입니다.
하나의 대답은 32 비트 gcc를 설치하는 것이 좋지만 나에게 아무런 성과가없는 것 같습니다. 또 다른 해결책은 수동으로 책의 모든 예제를 64 비트로 변환하고이 모든 것을 잊어 버리는 것입니다. 4 (예 : 4(%esp)
같은 것들이 8(%esp)
이 될 것입니다)하지만 8 월 8 일을 포함하는 스택을 다시 상상 함을 의미하지만, 을 movq
또는 일부 %eax
에서 %rax
등으로 변경할 수도 있습니다. 이에 대한 해결책이 있어야합니다. 특히 how the poster in 2013에 정확한 문제가 해결 된 것 같습니다. 아마도 -march=CPU[+EXTENSION...]
또는 -mtune=CPU
과 같은 것들로 다시 시도해야합니까? 어쩌면 아키텍처 나 리눅스, 또는/gcc에 대한 기본적인 지식이 부족한 것일까?
'ld -melf_i386'은 사용할 올바른 에뮬레이션입니다. – Jester
팁에 대한 @Jester 감사하지만 그 에뮬레이션을 염두에두고 필자는 .s 파일에서'.32code '를 시도했으며'- as'나'as -x32 '도 제대로 작동하지 않는 것으로 보인다. 그런 다음'.32code '를 꺼내고 두 개의'as'옵션을 다시 시도해도 작동하지 않습니다 : [see here] (https://i.imgur.com/4RuTXRX.png) –
올바른 32 비트 바이너리 산출. 이제 우분투가 실행되지 않는 이유를 알아 내십시오. WSL을 사용하고 있습니까? 분명히 [32 비트를 지원하지 않습니다] (https://wpdev.uservoice.com/forums/266908-command-prompt-console-bash-on-ubuntu-on-windo/suggestions/13377507-please-add- 32-bit-elf-support-to-the-kernel)을 지원합니다. – Jester