Daily Archive for May 5th, 2008

Safariの文字列検索を追う

Safariで、ページ内検索がどのように行われているかを、ちょっと追ってみました。以下かんたんなメモ。

準備

Safari.appはリリースビルドなので、WebKit をつかいます。 Debugging WebKit の手順どおりやると、デバッグシンボルのついたWebKitでSafariがつかえるようになります。

set breakpoint

search というキーワードで、WebKit の中を検索してみたところ、いくつかひっかかります。 WebView:searchFor というのが怪しいんじゃないか、と勘であたりをつけ、ブレークポイントを張り、デバッグ実行 (Cmd-Y)。

実際に、Cmd-F してページ内検索を実行し、ブレークポイントにひっかかったところ: break

まんまとひっかかりましたね。

最終的には、WebCore::CircularSearchBuffer::isMatch という関数内で文字列の比較がmemcmpで行われています。

まとめ

ソースを静的に解析してブレークポイントにあたりをつけ、実行時の挙動を見てハックするポイントをさがす、という例でした。 次は、じっさいにこのあたりに手を入れてみます。