1

C++ プログラムでnmユーティリティを使用したことがある場合は、多くのシンボルが 'V' または 'W' として識別されることに気付いたでしょう。どちらも異なる種類の弱いシンボルです。

実行時に動的リンカーがそれらすべてを解決しようとするため、実行可能ファイルに大量の弱いシンボルがあるのは良くありません。実行可能ファイルをリンクするときに単純な規則を適用することで、多くの時間を節約できると考えていました。

  • 実行可能ファイルで弱いシンボルが作成されるときはいつでも、そのようなシンボルにデフォルト値がある場合は、それを通常のシンボルに昇格させます。

次の理由から、このハックは安全だと思われます。

  • いずれかのライブラリが同じ名前のウィーク シンボルを定義している場合、それは昇格されたものによってオーバーライドされます。
  • ライブラリが実際にそのようなシンボルを定義していない場合...特別なことは何も起こりません
  • ライブラリが実行可能ファイルで定義されていない弱いシンボルを定義している場合、すべてが通常どおり機能します。

これについて binutils 開発者と話し合う前に、私が見逃している大きな間違いはありますか?

4

1 に答える 1

0

あなたが説明したことが機能するのを妨げるものは何もありません。

しかし、これを行う価値があるかどうかは疑問です。そして、あなたの "binutils 開発者" も同様に疑問に思うだろうと確信しています。

したがって、いくつかのことを確認することをお勧めします: 典型的なケースでは、実行可能ファイルと動的ライブラリで同じシンボルが定義されている頻度はどれくらいですか?

実行可能ファイルに定義されていない脆弱なシンボルがまだ多数残っている可能性が高いため、実際にどれくらいの時間を節約できますか?

改善された既存のプログラムのいくつかの例、または少なくとも「アプリケーション X の場合、弱いシンボルを検索するのに平均してこれだけの時間が費やされ、これが潜在的な利益になりますか?」に対する答えです。

それは、binutils 開発者として私が探しているものです [私はその 1 人ではありませんが、もしそうなら]。

于 2013-03-04T00:15:23.213 に答える