gdb 错误 - 文件不是可执行格式:文件格式无法识别

Posted

技术标签:

【中文标题】gdb 错误 - 文件不是可执行格式:文件格式无法识别【英文标题】:gdb error- File not in executable format: File format not recognized 【发布时间】:2018-08-04 07:44:13 【问题描述】:

我正在尝试使用 gdb 调试名为 xdf 的某个程序,但是当我运行 gdb xdf 时,出现以下错误:

"/home/nealtitusthomas/X-ray_astronomy/heasoft-6.24/x86_64-pc-linux-gnu-libc2.27/bin/xdf": not in executable format: File format not recognized

程序是符号链接的,file /home/nealtitusthomas/X-ray_astronomy/heasoft-6.24/x86_64-pc-linux-gnu-libc2.27/bin/xdf 的输出是:

/home/nealtitusthomas/X-ray_astronomy/heasoft-6.24/x86_64-pc-linux-gnu-libc2.27/bin/xdf: symbolic link to ../../ftools/x86_64-pc-linux-gnu-libc2.27/bin/xdf

这里gdb error not in executable format: File format not recognized给出的解决方案说是因为安装的gdb是32位版本,程序是64位的。但是,我的 gdb 安装是 64 位的。这得到以下证实:

This GDB was configured as "x86_64-linux-gnu". 

【问题讨论】:

还有...../../ftools/x86_64-pc-linux-gnu-libc2.27/bin/xdf是什么格式? 这是一个 POSIX shell 脚本,ASCII 文本可执行文件 【参考方案1】:

file /home/nealti...的输出

一般来说,您几乎总是应该使用file -L /home/... 来代替——该命令将取消引用任何符号链接,并告诉您在解析所有符号链接后文件是什么。

POSIX shell script, ASCII text executable

您正在尝试调试 shell 脚本。 GDB 不知道该怎么做。

您需要查看内部该shell脚本(使用您选择的编辑器),找出它最终调用的实际二进制文件,并对其进行调试。

包装外壳脚本通常如下所示:

 #!/bin/sh
... some code to figure out installation directory (e.g. INSTALL_DIR)
export LD_LIBRARY_PATH="$INSTALL_DIR/lib64:..."

# Now invoke the binary:
exec "$INSTALL_DIR/bin/xdf.exe" "$@"

您要做的是将最后一行替换为:

exec /usr/bin/gdb --args "$INSTALL_DIR/bin/xdf.exe" "$@"

并正常运行您的xdf shell 脚本。它现在会神奇地自动调用 gdb。

【讨论】:

我发现原始脚本是一个 tcl 脚本,它位于 /home/nealtitusthomas/X-ray_astronomy/heasoft-6.24/ftools/BLD/x86_64-pc-linux-gnu- libc2.27/lib/xtcl/.xdfrc 但是,我无法让 gdb 运行它。我收到 not in executable format 错误。【参考方案2】:

您正在尝试在 shell 脚本上使用 GDB。就像它试图告诉你的那样,GDB 不知道如何处理它。

【讨论】:

以上是关于gdb 错误 - 文件不是可执行格式:文件格式无法识别的主要内容,如果未能解决你的问题,请参考以下文章

Qt Creator - 无法使用调试器:program.exe 不是可执行格式:文件格式无法识别

ELF核心文件格式

android上如何运行可执行文件(.exe格式)的

尝试将 /proc/kallsyms 添加到 gdb 以进行 vmlinux 调试:`/proc/kallsyms':无法读取符号:文件格式无法识别

gdb 不显示非剥离可执行文件的源代码

无法设置 gdb 断点