История изменений
Исправление KivApple, (текущая версия) :
Нельзя загрузить из библиотеки только нужные функции, потому что не известно, как у неё внутри код устроен. Он может использовать явно или не очень другие части библиотеки, которые тоже необходимо загрузить. К тому же позиционнонезависимый код, как и релокации работают только в рамках секций. То есть ни в PE, ни в ELF недостаточно информации для того, чтобы вырезать кусок из секции. Секции можно перемещать только целиком.
def-файлы нужны, потому что в Windows каждая функция грузится из конкретной библиотеки. В Linux же есть только список библиотек, которые надо подгрузить, а пространство имён общее на все библиотеки. Это позволяет делать вкусные штуки типа подмены системных функций штатными средствами (используется всякими отладчиками) без костылей.
Есть альтернатива def-файлам. Например, в Pascal имеется синтаксическая конструкция, позволяющая указать, из какой библиотеки надо взять функцию, при описании прототипа.
Исходная версия KivApple, :
Нельзя загрузить из библиотеки только нужные функции, потому что не известно, как у неё внутри код устроен. Он может использовать явно или не очень другие части библиотеки, которые тоже необходимо загрузить. К тому же позиционнонезависимый код, как и релокации работают только в рамках секций. То есть ни в PE, ни в ELF недостаточно информации для того, чтобы вырезать кусок из секции. Секции можно перемещать только целиком.
def-файлы нужны, потому что в Windows каждая функция грузится из конкретной библиотеки. В Linux же есть только список библиотек, которые надо подгрузить, а пространство имён общее на все библиотеки. Это позволяет делать вкусные штуки типа подмены системных функций штатными средствами (используется всякими отладчиками) без костылей.
Есть альтернатива def-файлам. Например, в Pascal имеется синтаксическая конструкция, позволяющая указать, из какой библиотеки надо взять функцию, при описании протитипа.