例としてFirefoxを使用して、MicrosoftリンカーのマイナーバグがLinuxでどのように発生するかについて

画像

ご存知のように 、しばらく前に、MozillaチームはMicrosoftリンカーのバグを見つけました-xul.dllは非常にリッチであることが判明したため、リンカーがそれに陥りました。 そして、プラットフォームナンバーワン(Windows 32ビット)用のバージョンをアセンブルすることはできませんでした。



一時的に、明確化する前に、「未使用の」APIはFirefoxから破棄されました。 それは5番目と7番目のバージョンの間で起こりました。



リンカの戦いが続いたのは驚くことではありません。これについて説明します。





「それは何ですか、バリモア?」



そもそも、割礼は私にとって最も「おいしい」セクションである埋め込みを授与されました。 モジリアンは電動鎌で強力に歩き、アンドロイドだけにデマを残しました。 悲しいが本当。 そして、インキュベーターの「新しい」APIがインキュベーターに残っていました。



しかし、JavaXPCOMの深byは光栄でしたが、今ではこれが私の実験に大きな打撃を与えました。



それで、Linux firefoxの実装(そしてMicrosoftリンカーはどこにあるのでしょうか?)コンサバトリーで場所を空けて何かをしなければならなかったのはAles Kaputでした。



-バンティング、先生!



対応策として、「廃止された」gtkmozembedが(サポート用によりコンパクトなものとして)選択され、パッチとして7日から14日のバージョンにプルします。 そして今、私は原材料からogelisを収集しています 。これは、 Microsoftの 「一時的な」ソリューションに対するMozillovites 曲がった手によるおかげです



無料のボーナスとして、Firefox APIの急激な変更、ログイン(プロンプトサービス)の新しいインターフェイス、プリンシパルURLの奇妙さ、PRBoolの名前をboolに変更し、10番目のバージョンではスペースリザーブが再び使い果たされました。



-テムズ、先生!



それからタンバリンとフレアでダンスを始めました。 コードの一部(およびまったく予期しないもの)がxul.dllからfirefox.exeに移動しました。 たとえば、jemalloc。



そのため、libsqlite3で発生する奇妙な火災に遭遇したとき、私はこれについて非常に「幸せ」でした。 デバッグで再構築すると、素晴らしいダンプが生成されました-呼び出しでクラッシュが発生しました

size_t je_malloc_usable_size_in_advance(size_t size);
      
      





これがどうなるか疑問に思って、私は上記の行を書きました

 printf("strange crash below: je_malloc_usable_size_in_advance(%p) (%d)\n", je_malloc_usable_size_in_advance, size);
      
      





関数のアドレスとしてゼロの長いシリーズを賞賛しました。



-岬を正確に突き出してください、すごい!



第10バージョンのoghelis原料の研究では、Mozillovites自身が使用するハックが報告されました。

 LIBS+=-Wl,--whole-archive libmozglue.a -Wl,--no-whole-archive -rdynamic
      
      





そしてもちろん、これと同じlibmozglue.aはfirefox_devパッケージには入りませんでした-それは甘かったです。



firefoxの11番目のバージョンでは、秘密のlibmozglue.aはlibmozutil.aに名前が変更され、13番目のバージョンでは完全な名前が返されました。



同じ第13バージョンでは、小さく目立たないmbftディレクトリがlibmozglueに移動しました。 HashBytes-それは勇気と何もありませんでした。 それなしでは長い間困惑することがあります-なぜlibcに陥るのですか? それが、HashKey(nsCID&)がHashBytesを呼び出すことになる理由です。 また、HashStringsとは異なり、HashBytesは.cppにあります。 そして、プレーンなC table-> op- > hash(key)へのnullポインターがあります-HashBytesは安定しています。



14番目のバージョンでは、JavascriptのAPIが変更され、JS_GC(コンテキスト)のバナリティさえもJS_GC(JS_GetRuntime(コンテキスト))に変わりました。 とても良いので、javascriptから1.5個の関数が必要です!



今、Firefox 14.0.1にパッチを適用し、イベントの開発をフォローしています。 続行するには?



All Articles