0

私の質問は、ELF のシンボルに関連しています。私たちが知っているように、ELF の Symbol テーブルには、プログラムのシンボリック定義と参照を見つけて再配置するために必要な情報が保持されています。

私の質問は、b/wa ライブラリ シンボルとユーザー定義シンボル (両方がグローバルである場合) を区別できるかということです。ソース コードがなく、ELF しかないシナリオを考えてみましょう。

4

1 に答える 1

0

スタティック ライブラリは、リンクされていないオブジェクト ファイル ( .o) の単なるアーカイブです (リンカーによるシンボルの検索を高速化するためのインデックス付き)。そのようなライブラリに対してリンクすると、リンカーは未解決の各シンボルを受け取り、そこで見つけようとします。見つかった場合は、対応するオブジェクトを抽出し、コレクションに追加してリンクします。いいえ、シンボルが静的ライブラリに由来するかどうかはわかりません

実行可能ファイルがリンクされたものに十分近いライブラリの別のインスタンスがある場合は、それが定義するシンボルを調べて、それらすべてのシンボルとそれらが依存するすべてのシンボルがライブラリから来ていると仮定することができます。

もちろん、共有ライブラリで定義されているシンボルは別のファイルのままなので、それを伝えることは可能です。

しかし、別のポイントがあります。libc に対して静的にリンクされたソースなしで Linux バイナリを提供することは、おそらく違法です。つまり、その libc が GNU Libc である場合、それは LGPL の条件の下で配布されており、LGPL は動的にリンクされているコードを除くすべての派生コードのソースを (要求に応じて) 提供する必要があるため、明らかに違法です。sourceware newlibや bionic libc (Android)などの別の libc を使用している場合(他には見つかりません)。しかし、そのようなコードが GNU libc ベースのシステムでどの程度うまく機能するかはわかりません。

于 2011-10-07T06:49:43.500 に答える