gdb が「ファイル形式が認識されません」というメッセージが表示されて ELF 64 ビット プログラムの実行に失敗する

StackOverflow https://stackoverflow.com/questions/275471

  •  07-07-2019
  •  | 
  •  

質問

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 の使用に関しては少し理解できていませんが、私の知る限り、このインスタンスでは機能するはずです。何が問題なのか何か考えはありますか?

役に立ちましたか?

解決

実行可能ファイルは64ビット(x86-64)で、デバッガーは32ビット(i686-pc-linux)ビルドです。デバッガーの64ビット(x86-64)バージョンをインストールする必要がある場合があります。

他のヒント

これがあなたの問題かどうかはわかりませんが、この状況に頻繁に直面しました。 make / automakeによってビルドされるビルドツリー内の実行可能ファイルはバイナリではなくスクリプトなので、gdbを使用することはできません。 gdbがスクリプトをデバッグしようとするため、アプリケーションをインストールしてディレクトリを変更してください。

質問は" ./ filename"を参照しています" / path / executable"へ。これらは同じファイルですか?

事後分析を行う場合、次を実行します:

gdb executable-file core-file

コアファイルを無視する場合は、次を実行します。

gdb executable-file

どちらの場合も、「 executable-file 」はデバッグするバイナリへのパス名を意味します。たいていの場合、デバッグビルドのソースコードがそこにあるので、実際には現在のディレクトリにある単純なファイル名です。

Solarisでは、GDBの64ビットビルドは、32ビットと64ビットの両方の実行可能ファイルをデバッグできるはずです(ただし、GDBの最近のバージョンではいくつかの問題がありました)。私はその逆については確信がありません-32ビットのGDBは64ビットの実行可能ファイルを必ずデバッグできるということです。

確認する必要があるのは、実際には bfd ライブラリです。の バイナリファイル記述子 library は、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

GNUデバッガー( gdb )はx86_64アーキテクチャをサポートしていないようです。

だから LLDBデバッガー lldb )を試してくださいそれを置き換えることを目指しています。 i386、x86-64、およびARM命令セットをサポートしています。

BSD / OS Xではデフォルトで、Linuxのインストールでは sudo apt-get install lldb (または yum を使用)で利用可能です。

詳細: gdbからlldbへのコマンドマップページを参照してください。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top