可执行段错误和 GDB 给出 "not in executable format: File truncated"

Executable Segfaults and GDB gives "not in executable format: File truncated"

我正在处理一个应用程序,做了一些更改,现在它甚至不再 运行。我恢复了更改,重建了整个应用程序,但仍然没有成功。我不明白这个错误是怎么产生的?我删除了 .o 文件并进行了全新构建,但它仍然无法正常工作。我没有更改构建设置,我只修改了一些.cpp 文件。

如何解决我的可执行文件不再可执行的问题?

ls -l
-rwx--x--x    1 root     root       6344081 Sep 16 23:35 z*

gdb 输出

[root@ipfrmk /]# gdb z
GNU gdb (GDB) 7.10
Copyright (C) 2015 Free Software Foundation, Inc.
License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>
This is free software: you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law.  Type "show copying"
and "show warranty" for details.
This GDB was configured as "arm-buildroot-linux-gnueabihf".
Type "show configuration" for configuration details.
For bug reporting instructions, please see:
<http://www.gnu.org/software/gdb/bugs/>.
Find the GDB manual and other documentation resources online at:
<http://www.gnu.org/software/gdb/documentation/>.
For help, type "help".
Type "apropos word" to search for commands related to "word"...
"/z": not in executable format: File truncated
(gdb) run z
Starting program:  z
No executable file specified.
Use the "file" or "exec-file" command.

This 与我的问题无关,因为我没有从任何类型的 32 位更改为 64 位,反之亦然

我看到的大多数问题都是针对“无法识别的文件格式”或某种 t运行 核心文件问题,我不相信这些不适用于我的问题...

文件输出

[root@ipfrmk /]# file z
z: ERROR: ELF 32-bit LSB executable, ARM, EABI5 version 1 (GNU/Linux), statically linked, interpreter lib/ld-linux-armhf.so.3 error reading (Invalid argument)

有足够的文件系统 space 可用(应用程序大约 63kb)

Filesystem                Size      Used Available Use% Mounted on
/dev/root               487.8M    189.9M    272.9M  41% /

我检查了构建机器和设备上的 md5sum 匹配

构建虚拟机

# md5sum /app/z
e901ef35e43d91545fb9d968c078dce2  /app/z

设备机器

[root@ipfrmk /]# md5sum z
e901ef35e43d91545fb9d968c078dce2  z

更新:

之前的嫌疑人已被排除:文件系统在构建主机和目标主机之间有足够的 space 和 md5sum 匹配。

这只剩下一种可能性:构建工具链已以某种方式损坏,并生成损坏的二进制文件。

特别是,我错过了这部分输出:

z: ERROR: ELF 32-bit LSB executable, ARM, EABI5 version 1 (GNU/Linux), \ statically linked, interpreter lib/ld-linux-armhf.so.3 error reading (Invalid argument)

二进制文件不能既是 statically linked 又具有 ld/ld-linux-armhf.so.3 解释器。而且解释器应该是绝对路径。


上一个回答:

Most of the issues I see are for "file format not recognized" or some sort of truncated core file issue and those don't apply to my issue I don't believe...

此错误的两个非常常见的原因:

  • 目标文件系统超出 space,因此从构建主机到目标主机的复制仅部分成功
  • 文件以 ASCII 模式通过 ftp 传输,导致文件损坏。

验证例如md5sum 构建主机和目标匹配将消除这两种可能性。