Statically-linked приложение

Модератор: Модераторы разделов

Tsar
Сообщения: 4

Statically-linked приложение

Сообщение Tsar »

Здравствуйте, подскажите пожалуйста каким образом можно подключить свою библиотеку в уже скомпилированное statically-linked приложение, либо внедрить ее в уже запущенный экземпляр этого приложения?

Заранее спасибо.
Спасибо сказали:
Аватара пользователя
Hvzh
Сообщения: 711
Статус: Gone with Linux
ОС: Linux Mint 18.1

Re: Statically-linked приложение

Сообщение Hvzh »

Tsar писал(а):
10.01.2011 12:43
Здравствуйте, подскажите пожалуйста каким образом можно подключить свою библиотеку в уже скомпилированное statically-linked приложение, либо внедрить ее в уже запущенный экземпляр этого приложения?

Заранее спасибо.

А можно пояснить смысл такого подключения? Если приложение слинковалось, то в нем уже имеются необходимые библиотеки имне невполне понятно, кто будет использовать функции из Вашей библиотеки
HP 255 G4 A6-6310 + Linux Mint 18.1 + Windoze7 under VmWare + OS X Mavericks under VmWare
Спасибо сказали:
Tsar
Сообщения: 4

Re: Statically-linked приложение

Сообщение Tsar »

Hvzh писал(а):
10.01.2011 12:51
Tsar писал(а):
10.01.2011 12:43
Здравствуйте, подскажите пожалуйста каким образом можно подключить свою библиотеку в уже скомпилированное statically-linked приложение, либо внедрить ее в уже запущенный экземпляр этого приложения?

Заранее спасибо.

А можно пояснить смысл такого подключения? Если приложение слинковалось, то в нем уже имеются необходимые библиотеки имне невполне понятно, кто будет использовать функции из Вашей библиотеки

Задача заключается в том, чтобы подключенная библиотека производила подмену некоторых функций на свои аналоги для расширения функционала приложения.
На самом деле, задача решабельна, если функции патчить с помощью механизма ptrace после запуска приложения, но при этом теряется возможность реализовывать эти самые функции на языке c/c++, придется использовать ассемблер, что будет крайне не удобно, т.к. размер этих функций будет велик, а их логика и семантика весьма сложна. Библиотека будет представлять из себя целый модуль, при этом инициализируя свои внутренние глобальные классы и переменные.
Спасибо сказали:
Аватара пользователя
serzh-z
Бывший модератор
Сообщения: 8259
Статус: Маньяк
ОС: Arch, Fedora, Ubuntu

Re: Statically-linked приложение

Сообщение serzh-z »

Думается, что никак. LD_PRELOAD мог бы помочь с подменой функций в динамически-связываемых библиотеках.
Спасибо сказали:
Tsar
Сообщения: 4

Re: Statically-linked приложение

Сообщение Tsar »

serzh-z писал(а):
10.01.2011 13:34
Думается, что никак. LD_PRELOAD мог бы помочь с подменой функций в динамически-связываемых библиотеках.

Насчет LD_PRELOAD Вы правы, но может быть, есть как-то способ внедрить библиотеку в уже запущенный экземпляр приложения, используя механизм ptrace, например, вызвав внутреннюю функцию _libc_dlopen_mode, которая входит в состав libc и уже находится в приложении. На самом деле были попытки организовать такой вызов, но функция при любых параметрах возвращает ошибку с текстом "cannot open shared object file". Но, может, все же есть какие-то шансы. Еще есть идея изменить программу, переписав весь машинный код в заранее подготовленную dynamically-linked программу. А уже потом подгружать библиотеку с помощью стандартных средств типа переменной окружения LD_PRELOAD. Может быть, это окажется реальным?
Спасибо сказали:
Аватара пользователя
serzh-z
Бывший модератор
Сообщения: 8259
Статус: Маньяк
ОС: Arch, Fedora, Ubuntu

Re: Statically-linked приложение

Сообщение serzh-z »

Tsar писал(а):
10.01.2011 13:41
Может быть, это окажется реальным?
http://www.codeproject.com/KB/DLL/code_injection.aspx
Спасибо сказали:
Tsar
Сообщения: 4

Re: Statically-linked приложение

Сообщение Tsar »

serzh-z писал(а):
10.01.2011 13:51
Tsar писал(а):
10.01.2011 13:41
Может быть, это окажется реальным?
http://www.codeproject.com/KB/DLL/code_injection.aspx

Вы хотите сказать, что методы, описанные по Вашей ссылке также применимы и для статисечски слинкованного приложения?
Спасибо сказали:
Аватара пользователя
serzh-z
Бывший модератор
Сообщения: 8259
Статус: Маньяк
ОС: Arch, Fedora, Ubuntu

Re: Statically-linked приложение

Сообщение serzh-z »

Ну то что я там увидел - так там без разницы к чему применять. Просто загружается объектный файл и производится подстройка нужных адресов функций.

Можно свой загрузчик написать, который будет делать почти то же самое, что и стандартный ld-linux.so, но + будет ещё подкгружать кастомную библиотеку и заменять нужные адреса. Не знают только - стоят ли такие сложности поставленной задачи.
Спасибо сказали: