![]() |
|
Модераторы: xvr |
![]()
|
|
| flagist0 |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 24 Регистрация: 29.10.2007 Репутация: нет Всего: нет |
Хелп плиз!
Есть программа, использующая inotify (его поддержка появилась в glibc 2.4). На целевой системе будет запускаться уже собранный под glibc 2.5 бинарник . Если в системе более старая версия, где упадет прога - при проверке загрузчиком символов из таблицы импорта или при первом вызове функции, которой нет в библиотеке? Если первое, то есть ли возможность как-нибудь все-таки предотвратить выпад в кору и передать управление дальше? Проблема в том, что у меня нет полного доступа к опциям сборки - я делаю только с++овый класс-оболочку над inotify. То есть мой максимум - сделать проверку версий в конструкторе и корректный выход. К сожалению, у меня нет возможности ставить старую версию glibc - на системе еще работать и работать |
|||
|
||||
| JackYF |
|
|||
![]() полуавантюрист ![]() ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 5814 Регистрация: 28.8.2004 Где: страна тысячи озё р Репутация: 3 Всего: 162 |
она просто не загрузится. На этапе проверки ld выдаст ошибку, мол, не найдена разделяемая библиотека. итого |
|||
|
||||
| MAKCim |
|
||||||||||
![]() Воін дZэна ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 5644 Регистрация: 10.12.2005 Где: Менск, РБ Репутация: 84 Всего: 207 |
JackYF,
ты не прав LD по-умолчанию использует lazy-стратегию разрешения ссылок на внешние символы т. е LD не парсит .rela.plt секцию исполняемого файла, чтобы поставить во взаимно-однозначное соответствие элементы секций .plt и .got.plt при первом вызове функции, определенной во внешней библиотеке, управление переходит на соответствующий этой функции элемент .plt этот элемент содержит код, первая инструкция которого - косвенный переход на адрес, записанный в соответствующем данной функции элементе .got.plt при первом вызове этот адрес - адрес второй инструкции элемента .plt далее в стек записывается дополнительная информация для того, чтобы LD мог произвести раскрутку стека и определить, к какой функции было обращение далее идет переход по адресу, записанному во 2-ом элементе .got.plt при передаче управления на _start, LD записывает туда адрес своей функции, которая при передаче управления на нее (через 2-ой элемент .got.plt исполняемого файла) записывает в элемент .got.plt исполняемого файла (который соответствует нужной функции) реальный линейный адрес этой функции к чему это я никакой ошибки не будет если не задана переменная среды LD_BIND_NOW которая отменяет lazy-стратегию и парсинг .rela.plt происходит до первого вызова функции пример
далее изменяем shared.c таким образом
запускаем main и...все работает Это сообщение отредактировал(а) MAKCim - 29.10.2007, 19:10 -------------------- Ах, у елі, ах, у ёлкі, ах, у елі злыя волкі © |
||||||||||
|
|||||||||||
| JackYF |
|
||||
![]() полуавантюрист ![]() ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 5814 Регистрация: 28.8.2004 Где: страна тысячи озё р Репутация: 3 Всего: 162 |
почему
выводит
? В таком случае - конечно, типа всё есть... Добавлено через 1 минуту и 23 секунды Кроме того... получается, что если одна из редко используемых разделяемых библиотек отсутствует, то программа может даже выполнить какую-то работу, прежде чем упасть? |
||||
|
|||||
| MAKCim |
|
|||
![]() Воін дZэна ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 5644 Регистрация: 10.12.2005 Где: Менск, РБ Репутация: 84 Всего: 207 |
угу поэтому и есть LD_BIND_NOW Добавлено через 56 секунд что такое main.e? собранная по моей схеме программа? -------------------- Ах, у елі, ах, у ёлкі, ах, у елі злыя волкі © |
|||
|
||||
| JackYF |
|
|||
![]() полуавантюрист ![]() ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 5814 Регистрация: 28.8.2004 Где: страна тысячи озё р Репутация: 3 Всего: 162 |
да ты же можешь у себя проверить спасибо, буду знать. Надо же... |
|||
|
||||
| MAKCim |
|
|||
![]() Воін дZэна ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 5644 Регистрация: 10.12.2005 Где: Менск, РБ Репутация: 84 Всего: 207 |
у меня с зависимостями все в порядке -------------------- Ах, у елі, ах, у ёлкі, ах, у елі злыя волкі © |
|||
|
||||
| Бонифаций |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 827 Регистрация: 15.9.2005 Где: Brisbane Репутация: 1 Всего: 40 |
может проще статически собрать с нужным glibc?
-------------------- Бонифаций. |
|||
|
||||
| JackYF |
|
|||
![]() полуавантюрист ![]() ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 5814 Регистрация: 28.8.2004 Где: страна тысячи озё р Репутация: 3 Всего: 162 |
в смысле, что у тебя shared.so указывается в выводе ldd? |
|||
|
||||
| GrayCardinal |
|
|||
|
Фигасе ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 3039 Регистрация: 9.11.2003 Репутация: 8 Всего: 58 |
flagist0,
Может стоит dlopen(3) заюзать ? |
|||
|
||||
| MAKCim |
|
|||
![]() Воін дZэна ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 5644 Регистрация: 10.12.2005 Где: Менск, РБ Репутация: 84 Всего: 207 |
GrayCardinal,
дело говорит
-------------------- Ах, у елі, ах, у ёлкі, ах, у елі злыя волкі © |
|||
|
||||
![]()
|
| Правила форума "С/С++: Программирование под Unix/Linux" | |
|
|
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, xvr. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | C/C++: Программирование под Unix/Linux | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |