2013-08-05 7 views
6

Wikipediaのページには、Unixライクなシステムでコアダンプは単独で実行可能ですか? <a href="http://en.wikipedia.org/wiki/Core_dump">Core dump</a>上

言い、コアは、一般的にダンプを標準の実行可能 画像の形式を使用します。

a.out in older versions of Unix, 
ELF in modern Linux, System V, Solaris, and BSD systems, 
Mach-O in OS X, etc. 

これは、コア・ダンプがで実行可能であることを意味しません自体?そうでない場合は、どうしてですか?

編集:@ WumpusQ.Wumbleyコメントにcoredump_filterに言及しているので、おそらく上記の質問は次のようになります。コアダンプが、それはそれ自体で実行可能であるようなを製造することができますか?

+0

コアダンプを実行すると、どのような結果が期待されますか? – icedwater

+0

コアダンプにはプロセスのメモリイメージの一部であるため、オリジナルの実行可能ファイルからのマシン命令も含まれていると思いますが、わかりません。もしそうなら、私はそれらの命令を実行することを期待するでしょう。私はこれが起こるかどうか、それが起こるかどうかについては完全にはっきりしていません。もしそうならば、それが新たに始まるか、記憶された状態(そしておそらくは再びクラッシュ)からの実行を続けようとします。 – sundar

+5

undump:http://code.google.com/p/undump/ –

答えて

6

は、コアダンプにテキストだけでなく、データが含まれるようにデフォルトだったバリアントが、それはまたに与えられましたELFではなくa.out形式です。今日のデフォルトの動作(Linuxでは、BSD変種、Solarisなどについて100%確実ではない)は、テキストセクションなしでELF形式のコアダンプを持つことですが、動作を変更することができます。
しかし、何らかの助けなしにコアダンプを直接実行することはできません。その理由は、シンプルなコアファイルには2つの欠けていることがあるからです。 1つはエントリポイントで、もう1つはダンプが発生したときまたはその直前の状態にCPU状態を復元するコードです(デフォルトではテキストセクションもありません)。
AIXにはundumpというユーティリティがありましたが、何が起こったのか分かりません。私が知っている標準的なLinuxディストリビューションには存在しません。上記(@WumpusQ)のように、上記のコメントで言及したLinux向けの同様のプロジェクトも試行されていますが、このプロジェクトは完全ではなく、CPU状態を元の状態に復元しません。しかし、特定のデバッグの場合にはまだ十分です。
コアファイルではない他のELF形式のファイルも実行できないことにも言及する価値があります。オブジェクトファイル(コンパイラ出力)や.so(共有オブジェクト)ファイルなど。それらは外部アドレスを解決するために実行される前にリンク段階を必要とします。

+0

明確な説明をいただきありがとうございます。.oと.soファイルについてのポイントは、私が考えなかった有効なものです。 「undump」ユーティリティの作成者からのエントリーポイントなどについても同様の答えが得られました。ここでは完全性のために別の答えとして投稿します。私はあなたの答えを受け入れていますが、念のために現金を残しておきます。 – sundar

+0

"undump"概念のもう一つの大きな問題は、クラッシュ時に開いていたファイル記述子に関連するすべての状態を失うことです。 –

+0

@ WumpusQ.Wumbleyはい、「undump」の作成者は、このことについて彼の電子メールでそれを言いました、私はこの質問を別の答えとして投稿しました。 – sundar

1

コアダンプには、システムコアダンプとプロセスコアダンプの2種類があります。それらは、作成方法や解析方法など、多くの面で異なります。

ほとんどの場合、アプリケーションのクラッシュにつながるシグナルは、SIGSEGV(セグメンテーション違反)またはSIGBUSです。シグナルの

同様の種類が多分それを呼び出す...コアダンプをトリガ..古いUNIXで

1

私はこの質問に彼の専門知識のためのundumpユーティリティの作成者を電子メールで送信し、次の返事だ:そこの答えの一部で述べたように

を、設定することにより、 コードセクションを含めることが可能ですcoredump_filterですが、Linuxの場合は のデフォルトではありません(BSDの亜種については完全にはわかりませんが、Solarisの場合は )。さまざまなコードセクションが元の コアダンプに保存されている場合は、新しい 実行ファイルを作成するために実際には何もありません。ただし、元の コアファイル(エントリポイントを含み、そのエントリを指して がCPUレジスタを復元するコードを指すなど)にいくつかの変更が必要です。コアファイルが に変更された場合、実行可能ファイルになり、 を実行することができます。残念ながら、州の中には には行かないので、新しい実行ファイルを直接実行することはできません。オープン ファイル、ソケット、ピップなどはオープンされず、 を他のFDに指し示すことさえあります(これはあらゆる種類の奇妙なものを引き起こす可能性があります)。しかし、 ほとんどのデバッグ作業では、 gdbの小さな関数を実行するだけで十分でしょう( "実行しないでください" 実行可能ファイル)。

0

他の人によると、元のバイナリなしでコアダンプファイルを実行することはできません。

バイナリをデバッグするのに興味がある場合(デバッグシンボルが含まれている、言い換えれば、それが取り除かれていない場合)、gdb binary coreを実行できます。

gdb内では、アプリケーションがクラッシュしたときにスタックトレースを取得するためにbtコマンド(バックトレース)を使用できます。

関連する問題