Здравствуйте, подскажите пожалуйста каким образом можно подключить свою библиотеку в уже скомпилированное statically-linked приложение, либо внедрить ее в уже запущенный экземпляр этого приложения?
Заранее спасибо.
Statically-linked приложение
Модератор: Модераторы разделов
-
Hvzh
- Сообщения: 711
- Статус: Gone with Linux
- ОС: Linux Mint 18.1
Re: Statically-linked приложение
А можно пояснить смысл такого подключения? Если приложение слинковалось, то в нем уже имеются необходимые библиотеки имне невполне понятно, кто будет использовать функции из Вашей библиотеки
HP 255 G4 A6-6310 + Linux Mint 18.1 + Windoze7 under VmWare + OS X Mavericks under VmWare
-
Tsar
- Сообщения: 4
Re: Statically-linked приложение
Задача заключается в том, чтобы подключенная библиотека производила подмену некоторых функций на свои аналоги для расширения функционала приложения.
На самом деле, задача решабельна, если функции патчить с помощью механизма ptrace после запуска приложения, но при этом теряется возможность реализовывать эти самые функции на языке c/c++, придется использовать ассемблер, что будет крайне не удобно, т.к. размер этих функций будет велик, а их логика и семантика весьма сложна. Библиотека будет представлять из себя целый модуль, при этом инициализируя свои внутренние глобальные классы и переменные.
-
serzh-z
- Бывший модератор
- Сообщения: 8259
- Статус: Маньяк
- ОС: Arch, Fedora, Ubuntu
Re: Statically-linked приложение
Думается, что никак. LD_PRELOAD мог бы помочь с подменой функций в динамически-связываемых библиотеках.
-
Tsar
- Сообщения: 4
Re: Statically-linked приложение
Насчет LD_PRELOAD Вы правы, но может быть, есть как-то способ внедрить библиотеку в уже запущенный экземпляр приложения, используя механизм ptrace, например, вызвав внутреннюю функцию _libc_dlopen_mode, которая входит в состав libc и уже находится в приложении. На самом деле были попытки организовать такой вызов, но функция при любых параметрах возвращает ошибку с текстом "cannot open shared object file". Но, может, все же есть какие-то шансы. Еще есть идея изменить программу, переписав весь машинный код в заранее подготовленную dynamically-linked программу. А уже потом подгружать библиотеку с помощью стандартных средств типа переменной окружения LD_PRELOAD. Может быть, это окажется реальным?
-
serzh-z
- Бывший модератор
- Сообщения: 8259
- Статус: Маньяк
- ОС: Arch, Fedora, Ubuntu
-
Tsar
- Сообщения: 4
Re: Statically-linked приложение
Вы хотите сказать, что методы, описанные по Вашей ссылке также применимы и для статисечски слинкованного приложения?
-
serzh-z
- Бывший модератор
- Сообщения: 8259
- Статус: Маньяк
- ОС: Arch, Fedora, Ubuntu
Re: Statically-linked приложение
Ну то что я там увидел - так там без разницы к чему применять. Просто загружается объектный файл и производится подстройка нужных адресов функций.
Можно свой загрузчик написать, который будет делать почти то же самое, что и стандартный ld-linux.so, но + будет ещё подкгружать кастомную библиотеку и заменять нужные адреса. Не знают только - стоят ли такие сложности поставленной задачи.
Можно свой загрузчик написать, который будет делать почти то же самое, что и стандартный ld-linux.so, но + будет ещё подкгружать кастомную библиотеку и заменять нужные адреса. Не знают только - стоят ли такие сложности поставленной задачи.