Linuxでは、dlopenがsigfpeを発する原因は何ですか?
質問
私は、によって識別される疑わしい起源のライブラリを持っています file
32ビット実行可能として。しかし、私がしようとするとき dlopen
32ビットCentos 4.4マシンで、Dlopenはで終了します SIGFPE
. 。確かにバイナリの形式に何か問題があった場合、 dlopen
エラーを処理する必要がありますか?
質問は、どのような問題がDlopenがSigfpeを発する原因となる可能性があるということです。
解決
いくつかの考えられる理由は次のとおりです。
- ゼロによる分割(GDBでこれを支配する)
- アーキテクチャの不一致(同じアーキテクチャでDSOを自分でコンパイルしましたか?それとも事前に構築されていますか?)
- ABI互換性の問題(別のLinuxディストリビューション用に構築されたDSOのロード)。
ここ GNUシステムのELF形式でのハッシュ生成に関する興味深い議論です。ABIの不一致により、そのディストリビューション/システムに基づいて構築されていないDSOを混合およびマッチングすると、システムにSIGFPEが発生する可能性があります。
次のように実行可能ファイルに対してGDBを実行します
]$ gdb ./my_executable
(gdb) run
プログラムがクラッシュしたら、バックトレースを取得します
(gdb) bt
スタックがで終了する場合 do_lookup_x ()
その後、あなたはおそらく同じ問題を抱えており、あなたのDSOがそれをロードしようとしているシステムに対して正しいことを確認する必要があります...しかし、あなたはそれが持っていると言います 疑わしい起源 したがって、問題はおそらく説明されているものと同様のABI問題です。
不信のライブラリ /実行可能なものを入手してください! ;)
幸運を
所属していません StackOverflow