我正在尝试执行一个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版本,如何从终端下载必要的软件包?
答案 0 :(得分:0)
这意味着已编译的二进制文件包含一条指令(可能不止一条指令),该指令在运行它的体系结构上无效。
您可以在gdb
下运行二进制文件以查找特定指令:
gdb ./precompiled
(gdb) run
(gdb) bt
(gdb) disassemble
然后键入run
,然后在失败时运行bt
(回溯)以查看失败之处。使用disassemble
查看导致失败的特定指令。
您无法做很多修复。您可以通过分解二进制文件并编辑程序集,然后再次将其编译为二进制文件来编辑二进制文件。有了源代码,在目标计算机上重新编译就更容易了。
通过使用基于目标体系结构的编译器开关,您也许可以避免特定的说明(在另一台计算机上进行编译时,在其中编译precompiled
二进制文件时)。