パスワードを忘れた? アカウント作成
281507 journal

Jadawinの日記: うーん、firefoxがねぇ。 4

日記 by Jadawin

環境:
 FreeBSD 8.2-PRERELEASE/amd64、firefox 3.6.13,1

現象:
 firefoxがIllegal instructionで落ちる。例えば、メニューでQuitを選択したとき、ポップアップメニューでCopy Link Locationを選んだとき、Most Visitedから「Jadawinの友達」を選んだとき、、、エトセトラ。

疑い:
 Adobeのflashプレイヤー、IPV6、プロセスのリソース。

どうにもわからんです。ヒント下さい。

この議論は賞味期限が切れたので、アーカイブ化されています。 新たにコメントを付けることはできません。
  • CPU命令としてありえないバイト列を実行しようとしたってことで。
    ということはどこかの段階でジャンプ先がオカシイってことだよねぇ。
    しかもそのページ、Executable フラグは立っているってことだから、プログラム本体か、.so ファイルか、どっちか。

    多分スタック自体は「おかしいところにジャンプする前」のアドレスも知っているだろうから、とりあえず core ファイルを吐かせてみたら?

    で、デバッガでスタックを追いかければ、どのライブラリからどのライブラリへと飛んだのか判るはず。
    最後にスタックに積んであるアドレスが「おかしいところ」なので、その一歩手前(上から勘定して2つ目)の関数がおかしい奴。そいつがなんというライブラリに所属しているのかを見る。

    で、とりあえず、そいつを使わずにいられるかどうか、チェック。

    --
    fjの教祖様
    • ありがとうございます。
      言われた通りやってみようとしたのですが、、、

      (1) makeのオプションでデバッグを選んでも、デバッグシンボル付きのバイナリを作れない。
      (2) コアを吐かせてからgdbを起動すると、No stackと言われる。
      (3) gdb内で走らせると、メニュー選択した所でフォーカスをつかんだままだんまり。gdbごと叩き殺すことに。

      てな状況で、ダルマさんな感じです。

      #まだだ。まだ終わらんぞ。

      親コメント
      • まずは、(2)からでしょうか。
        core ファイルが「本当は何の core ファイルなのか」から追跡してはどうでしょう?

        fork/exec を繰り広げるプログラムの場合(Firefoxもその一つですが)、coreを吐いてもそれが「何の」coreなのかを間違えると何がなんだか判らなくなります。

        strings <そのコアファイル>

        とやると文字列がずらずらと出てくるかと思いますが、その中に ARGV[0] がいるはずです。つまり実行プログラムの本体を示す文字列がどこかにあるはず。gdb は「本当のバイナリ」相手でなくてはちゃんと動けませんから(そして実行バイナリの方を優先して解釈しますから)、ここが間違っていると No stack と言われることもあります。

        --
        fjの教祖様
        親コメント
        • どうやら正体はdbus-launchでした。で、firefoxがdbusを要求しているのに、
          dbusサービスが動いていない(/etc/rc.confにdbus_enable="YES"が
          なかったので)という状況でした。

          サービスを起動したら、現象は治まったのでこれで解決とします。おおまぬけにお
          つきあいありがとうございました。

          #今までよく他で問題がでなかったもんだ。

          親コメント
typodupeerror

日々是ハック也 -- あるハードコアバイナリアン

読み込み中...