#c #c
#c #c
Вопрос:
Возможно ли преобразовать разделяемую библиотеку (someLib.so ) в статическую библиотеку? (someLib.a)
Комментарии:
1. Зачем это делать в первую очередь? Просто чтобы воспользоваться преимуществами статической библиотеки по сравнению с разделяемой библиотекой?
2. @мягко говоря, проблема с разделяемыми библиотеками заключается в том, что они более подвержены проблемам безопасности, либо из-за замены разделяемой библиотеки вредоносной версией, которая затем загружается в ваше приложение во время выполнения, либо из-за того, что два приложения используют один и тот же код, и если одному каким-то образом удастся изменить код, это повлияет на другое.
3. @RobGilliam вы также можете сказать с точностью до наоборот — наличие общей библиотеки означает, что ее можно заменить, если вы обнаружите проблему с безопасностью, и если она была статически связана, вы застряли с этой проблемой безопасности.
4. iOS не допускает вложенных зависимостей, поэтому преобразование общей библиотеки в статическую (если бы это было возможно) могло бы быть выгодным для разработчиков библиотек, чтобы упростить использование их библиотеки (вместо того, чтобы включать
mylib.framework
Иdependency.framework
, вы просто включаетеmylib.framework
, и зависимость является ее частью)
Ответ №1:
Нет. (По крайней мере, для разделяемой библиотеки ELF). Разделяемая библиотека — это простой объект (так расшифровывается разделяемый объект). Статическая библиотека — это коллекция объектов. В процессе создания разделяемой библиотеки вы объединяете несколько объектов и теряете часть информации, которая была бы необходима для их извлечения.
Комментарии:
1. Просто для интереса — какая необходимая информация теряется? Эти «внутренние объекты» по-прежнему «могут вызываться» — и с учетом соответствующих сведений о вызове, чего не хватает?
2. Имя объединенных объектов является наиболее очевидным кандидатом. Возможно, что при наличии отладочной информации у вас будет достаточно информации, чтобы решить головоломку и реконструировать все, но наверняка это не было целью формата.
3. Хорошо, это кажется интересным. Но знаете ли вы, что есть инструменты, которые говорят, что они могут конвертировать из динамического в статический? (Без исходного кода)
4. Поскольку я не могу отредактировать свой последний комментарий — что было бы, если бы у кого-то были .dll,.lib и .exp (для случая Windows) — возможно ли это тогда?
5. @AProgrammer Было бы возможно, если бы мне не нужны имена объектов? Например, теоретически должно быть возможно извлечь
puts
функцию изlibc.so.6
asputs.o
, поскольку известны точный адрес точки входа в функцию и путь к коду (т. Е. последовательность инструкций). Если нет, то что является препятствием?
Ответ №2:
ДА, если у вас есть исходный код разделяемой библиотеки.
НЕТ, если у вас нет исходного кода разделяемой библиотеки.
Комментарии:
1. Не могли бы вы объяснить, почему, хотя бы схематично?
2. У меня есть исходный код для разделяемой библиотеки. Я хочу использовать для разработки мобильных приложений iOS. Не могли бы вы, пожалуйста, рассказать мне о шагах по преобразованию разделяемой библиотеки в статическую библиотеку (.a).
3. Зачем вам вообще нужна разделяемая библиотека, если у вас есть исходный код?
4. Вау, какой отличный и информативный ответ. Невероятно