Невозможно выполнить двоичный файл: ошибка формата Exec: (Компиляция 32-битного кода на 64-битной машине)

Я хочу выполнить 32-битный ассемблерный код, и я использую gcc для связывания моего объектного файла (созданного NASM) с исполняемый файл.

Я уже пробовал методы, изложенные в сообщении Связывание программы на ассемблере: ошибка «неопределенная ссылка на` printf '».

Исполняемый файл создается, но всякий раз, когда я пытаюсь его запустить, я получаю следующую ошибку:

-bash: ./asmTest: cannot execute binary file: Exec format error

Я использовал следующие команды:

nasm -f elf -g asmTest.asm
gcc -m32 asmTest.o -o asmTest

Я установил версию gcc для Multilib, чтобы я мог запускать 32-разрядный код на 64-битной машине.

Я использую NASM версии 2.13.02 и приложение Ubuntu (доступно для Windows, Ubuntu 18.04.1 LTS).

Версия GCC: gcc (Ubuntu 7.5.0-3ubuntu1 ~ 18.04) 7.5.0

Пожалуйста, помогите.

РЕДАКТИРОВАТЬ

strace ./asmTest

дает следующий результат:

execve("./asmTest", ["./asmTest"],  0x7fffd49a5000 /* 19 vars */) = -1 ENOEXEC (Exec format error)
fstat(2, {st_mode=S_IFCHR|0660, st_rdev=makedev(4, 1), ...}) = 0
ioctl(2, TCGETS, {B38400 opost isig icanon echo ...}) = 0
write(2, "strace: exec: Exec format error\n", 32strace: exec: Exec format error
) = 32
getpid()                                = 1110
exit_group(1)                           = ?
+++ exited with 1 +++
0
задан 18 April 2020 в 18:57

1 ответ

У меня проблемы с запуском hello_world.c, скомпилированного для 32 машин, в 64-битной ОС Ubuntu 20.04. Никаких проблем при запуске нативно. Вот мой процесс создания исполняемого файла:

gcc -march=i386 -m32 hello_world.c -S -o hello_world.s as --32 hello_world.s

as вызывает компоновщик и генерирует 32 бит исполняемый образ.

jeffs@jeffs-desktop:~/VarsityTutors$ file a.out
a.out: ELF 32-bit LSB relocatable, Intel 80386, version 1 (SYSV), not stripped
jeffs@jeffs-desktop:~/VarsityTutors$ 
jeffs@jeffs-desktop:~/VarsityTutors$ ./a.out
bash: ./a.out: cannot execute binary file: Exec format error
jeffs@jeffs-desktop:~/VarsityTutors$ ls -l ./a.out
-rwxrwxrwx 1 jeffs jeffs 1476 Oct 28 15:24 ./a.out
jeffs@jeffs-desktop:~/VarsityTutors$ 

Я прочитал несколько статей, большинство из которых кажутся устаревшими. Итак, я попытался:

jeffs@jeffs-desktop:~/VarsityTutors$ arch
x86_64
jeffs@jeffs-desktop:~/VarsityTutors$ sudo apt-get install multiarch-support
Reading package lists... Done
Building dependency tree       
Reading state information... Done
Package multiarch-support is not available, but is referred to by another package.
This may mean that the package is missing, has been obsoleted, or
is only available from another source

E: Package 'multiarch-support' has no installation candidate
jeffs@jeffs-desktop:~/VarsityTutors$ 
jeffs@jeffs-desktop:~/VarsityTutors$ 

Я делаю этот проект для подруги, которая учится на ассемблере в рамках получения степени CS.

-1
ответ дан 28 October 2020 в 22:51

Другие вопросы по тегам:

Похожие вопросы: