1

モジュール内で定義されている非静的なグローバル変数を意味し、外部ではありません。GOTを使用して参照される共有オブジェクトで定義された非静的グローバル変数はなぜですか?

なぜGOTで参照する必要がありますか?なぜだめ相対アドレスない?(.dataセクションや.textセクション内の基準のグローバル変数間の距離が一定であるため、それはまた、位置に依存します)

+0

ダイナミックライブラリがあり、GOTで参照されるグローバル変数が含まれていますが、それ以外の方法でアクセスする必要があります。あれは正しいですか? – jweyrich

+0

いいえダイナミックリンカーの仕組みや、読んだことによると、グローバル変数はこのように参照されていますが、その理由はわかりません。 – Haiyang

答えて

1

あなたの変数はstaticではないので、上のELFは介在することができます(LD_PRELOADと考える)。

0

私も同じ混乱があります。 2つのDSOの両方に同じ名前のグローバル変数が定義されており、1つの実行可能ファイルに動的にリンクされている場合、両方のライブラリは同じ変数のコピーにアクセスしますか? 変数がどのライブラリ(ライブラリのデータセクション)に配置されるかは、ライブラリのロード順序によって異なります。

+0

私は自分でテストしました。答えは「はい」です。 2つのライブラリは同じ名前の同じ変数のコピーを使用します。 – xingchong

関連する問題