Поддержка QEMU и binfmt освещает путь :)
https://github.com/microsoft/wsl/issues/2468#issuecomment-374904520
Прочитав, что WSLInterop между процессами WSL и Windows использует binfmt, я возился с QEMU, чтобы попробовать некоторые разработки ARM, и случайно обнаружил, как заставить работать 32-битную поддержку.
Изменить: требуется "Fall Creators Update", 1709, сборка 16299 или новее.
Установите конфигурацию qemu и binfmt:
sudo apt install qemu-user-static
sudo update-binfmts --install i386 /usr/bin/qemu-i386-static --magic '\x7fELF\x01\x01\x01\x03\x00\x00\x00\x00\x00\x00\x00\x00\x03\x00\x03\x00\x01\x00\x00\x00' --mask '\xff\xff\xff\xff\xff\xff\xff\xfc\xff\xff\xff\xff\xff\xff\xff\xff\xf8\xff\xff\xff\xff\xff\xff\xff'
Вам нужно будет повторно активировать поддержку binfmt каждый раз, когда вы запускаете WSL:
sudo service binfmt-support start
Включите пакеты архитектуры i386:
sudo dpkg --add-architecture i386
sudo apt update
sudo apt install gcc:i386
Попробуйте:
$ file /usr/bin/gcc-5
/usr/bin/gcc-5: ELF 32-bit LSB executable, Intel 80386, version 1 (SYSV), dynamically linked, interpreter /lib/ld-linux.so.2, for GNU/Linux 2.6.32, BuildID[sha1]=2637bb7cb85f8f12b40f03cd015d404930c3c790, stripped
$ /usr/bin/gcc-5 --version
gcc-5 (Ubuntu 5.4.0-6ubuntu1~16.04.9) 5.4.0 20160609
Copyright (C) 2015 Free Software Foundation, Inc.
This is free software; see the source for copying conditions. There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
$ gcc helloworld.c -o helloworld
$ ./helloworld
Hello, world!
$ file helloworld
helloworld: ELF 32-bit LSB executable, Intel 80386, version 1 (SYSV), dynamically linked, interpreter /lib/ld-linux.so.2, for GNU/Linux 2.6.32, BuildID[sha1]=3a0c7be5c6a8d45613e4ef2b7b3474df6224a5da, not stripped
И чтобы доказать, что это действительно работает, отключите поддержку i386 и попробуйте еще раз:
$ sudo service binfmt-support stop
* Disabling additional executable binary formats binfmt-support [ OK ]
$ ./helloworld
-bash: ./helloworld: cannot execute binary file: Exec format error
person
Froosh
schedule
21.03.2018
.c
и.s
- файлы исходного кода. Они не могут быть выполнены напрямую и обычно не являются результатом работы компилятора C или программы на ассемблере. - person too honest for this site   schedule 08.02.2017int 0x80
системные вызовы в 64-битных исполняемых файлах, поэтому сборка asm как 64-битной не поможет, если вы также не используете правильныйsyscall
системный вызов ABI. Что произойдет, если вы используете 32-битный int 0x80 Linux ABI в 64-битном коде? - person Peter Cordes   schedule 04.02.2021