Недопустимая инструкция (ядро сброшено) при попытке выполнить файл elf - PullRequest
0 голосов
/ 14 февраля 2019

Я пытаюсь выполнить файл эльфа (назовите его предварительно скомпилированным), и он дает:

Illegal instruction (core dumped)

Компиляция из исходного кода работает нормально

gcc source.c
./a.out

Отладочная информация:

file precompiled
precompiled: ELF 64-bit LSB executable, x86-64, version 1 (SYSV), dynamically linked, interpreter /lib64/ld-linux-x86-64.so.2, for GNU/Linux 2.6.32, BuildID[sha1]=<BUILD ID HERE>, not stripped
file a
a: ELF 64-bit LSB shared object, x86-64, version 1 (SYSV), dynamically linked, interpreter /lib64/ld-linux-x86-64.so.2, for GNU/Linux 3.2.0, BuildID[sha1]=<BUILD ID HERE>, not stripped

Что может быть причиной этой ошибки?Если это другая версия GNU / Linux, как я могу загрузить с терминала необходимые пакеты?

1 Ответ

0 голосов
/ 15 февраля 2019

Это означает, что скомпилированный двоичный файл содержит инструкцию (возможно, более одной инструкции), которая недопустима в архитектуре, в которой вы ее выполняете.

Вы можете запустить свой двоичный файл под gdb, чтобы узнать конкретную инструкцию:

gdb ./precompiled
(gdb) run
(gdb) bt
(gdb) disassemble

Затем введите run, а затем, если он не работает, запустите bt (backtrace), чтобы увидетьгде это не удается.Используйте disassemble, чтобы увидеть конкретную инструкцию, которая вызывает сбой.

Не так много вы можете сделать, чтобы исправить это.Вы можете отредактировать двоичный файл, разобрав его, отредактировав сборку и снова скомпилировав ее в двоичный файл.Учитывая, что у вас есть исходный код, проще перекомпилировать на целевой машине.

Вы можете избежать определенных инструкций (при компиляции на другой машине - где вы скомпилировали precompiled двоичный файл)с помощью переключателей компилятора на основе вашей целевой архитектуры.

...