1

Я имею в виду нестатические глобальные переменные, которые определены в модуле, а не снаружи.Почему нестатические глобальные переменные, определенные в общих объектах, на которые ссылаются с помощью GOT?

Зачем это нужно с помощью GOT? Почему нет использования относительного адреса? (Так как расстояние между глобальной переменной в разделе .data и ссылкой в ​​секции .text является константой, оно также не зависит от положения)

+0

У вас есть динамическая библиотека, и она содержит глобальные переменные, на которые ссылаются через GOT, но вы хотите получить к ней доступ каким-либо другим способом. Это верно? – jweyrich

+0

Нет. Я читаю о том, как работают динамические компоновщики и в соответствии с тем, что я читаю, глобальные переменные ссылаются таким образом, но я не понимаю, почему. – Haiyang

ответ

1

Поскольку ваша переменная не является static, на ELF может быть вставлен (подумайте о LD_PRELOAD).

0

У меня также такое же замешательство. Если есть одна глобальная переменная с тем же именем, которая определена в обоих двух DSO, и они динамически связаны в один исполняемый файл, обе библиотеки получат доступ к одной и той же копии переменной? И какая библиотека (раздел данных библиотеки) находится в зависимости от порядка загрузки библиотек?

+0

Я сам проверил. Ответ - да. В двух библиотеках используется одна и та же копия переменной с тем же именем. – xingchong