尝试执行elf文件时出现非法指令(内核已转储)

时间:2019-02-14 20:45:49

标签: linux gnu elf

我正在尝试执行一个elf文件(称为预编译文件),它给出了:

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 :(得分:0)

这意味着已编译的二进制文件包含一条指令(可能不止一条指令),该指令在运行它的体系结构上无效。

您可以在gdb下运行二进制文件以查找特定指令:

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

然后键入run,然后在失败时运行bt(回溯)以查看失败之处。使用disassemble查看导致失败的特定指令。

您无法做很多修复。您可以通过分解二进制文件并编辑程序集,然后再次将其编译为二进制文件来编辑二进制文件。有了源代码,在目标计算机上重新编译就更容易了。

通过使用基于目标体系结构的编译器开关,您也许可以避免特定的说明(在另一台计算机上进行编译时,在其中编译precompiled二进制文件时)。