gdb无法运行“文件格式无法识别”的ELF 64位程序

时间:2008-11-09 01:24:19

标签: c gcc debugging gdb

我正在尝试使用GDB进行调试(以找到恼人的段错误)。我跑的时候:

gdb ./filename

从命令行,我收到以下错误:

This GDB was configured as "i686-pc-linux-
gnu"..."/path/exec": not in executable 
format: File format not recognized

执行时:

file /path/executable/

我收到以下信息:

 ELF 64-bit LSB executable, AMD x86-64,
 version 1 (SYSV), for GNU/Linux 2.4.0, 
 dynamically linked (uses shared libs), not stripped

我正在使用GDB 6.1,可执行文件是使用gcc版本3.4.6编译的。

在使用gdb方面,我有点失水,但据我所知,它应该在这个实例中工作。任何想法出了什么问题?

5 个答案:

答案 0 :(得分:21)

可执行文件是64位(x86-64),调试器是32位(i686-pc-linux)版本。您可能需要安装64位(x86-64)版本的调试器。

答案 1 :(得分:5)

我不确定这是不是你的问题,但我经常遇到这种情况。构建树中的可执行文件,由make / automake构建,不是二进制文件,而是脚本,因此您不能使用gdb。尝试安装应用程序并更改目录,因为否则gdb会尝试调试脚本。

答案 2 :(得分:4)

问题是“./filename”和“/ path / executable”。这些文件是一样的吗?

如果您正在进行事后分析,您可以运行:

gdb executable-file core-file

如果您要忽略核心文件,则运行:

gdb executable-file

在这两种情况下,“executable-file”表示要调试的二进制文件的路径名。大多数情况下,这实际上是当前目录中的一个简单文件名,因为你有调试版本的源代码。

在Solaris上,64位版本的GDB应该能够调试32位和64位可执行文件(尽管我最近的GDB版本存在一些问题)。我不确定是否相反 - 32位GDB必须调试64位可执行文件。

答案 3 :(得分:2)

您需要检查的内容,实际上是bfd库。 binary file descriptor库是binutils / gdb用来实际解析和处理二进制文件(ELF / a.out等...)的原因。

您可以通过objdump查看当前支持的平台;

# objdump -H

objdump: supported targets: elf32-powerpc aixcoff-rs6000 elf32-powerpcle ppcboot elf64-powerpc elf64-powerpcle elf64-little elf64-big elf32-little elf32-big srec symbolsrec tekhex binary ihex
objdump: supported architectures: rs6000:6000 rs6000:rs1 rs6000:rsc rs6000:rs2 powerpc:common powerpc:common64 powerpc:603 powerpc:EC603e powerpc:604 powerpc:403 powerpc:601 powerpc:620 powerpc:630 powerpc:a35 powerpc:rs64ii powerpc:rs64iii powerpc:7400 powerpc:e500 powerpc:MPC8XX powerpc:750

The following PPC specific disassembler options are supported for use with
the -M switch:
  booke|booke32|booke64    Disassemble the BookE instructions
  e300                     Disassemble the e300 instructions
  e500|e500x2              Disassemble the e500 instructions
  efs                      Disassemble the EFS instructions
  power4                   Disassemble the Power4 instructions
  power5                   Disassemble the Power5 instructions
  power6                   Disassemble the Power6 instructions
  32                       Do not disassemble 64-bit instructions
  64                       Allow disassembly of 64-bit instructions

答案 4 :(得分:1)

您的GNU调试器(gdb)似乎不支持x86_64架构。

请尝试LLDB Debuggerlldb),以取代它。它支持i386,x86-64和ARM指令集。

默认情况下,它在BSD / OS X上可用,在Linux上安装:sudo apt-get install lldb(或使用yum)。

有关详细信息,请参阅:gdb to lldb command map页面。

相关问题