LINUX.ORG.RU

перехват функций


0

0

Мне необходимо програмно реализовать даный подход: ----------------------------------------------------------------------- Популярный прием, называемый методом "подмены библиотеки": * создаем "обертку" (wrapper) вокруг интересующей нас библиотеки, экспортирующей те же самые функции, что и она; * оригинальную библиотеку переименовываем или размещаем в другом месте; * функции-обертки определяют идентификатор вызывающего их процесса, и, если это действительно "их" процесс, совершают заранее запланированные действия (пишут вызов в log, подменяют аргументы или код возврата и т.д). Как определить id процесса? Это легко, ведь функции-обертки вызываются из контекста процесса, который их использует, и решение задачи сводится к выяснению идентификатора текущего процесса, возвращаемого функцией getpid(); * функция-обертка передает управление оригинальной функции основной библиотеки или своей собственной подложной функции; ------------------------------------------------------------------------ 1)Возможно, уже есть программы, которые это делают? Подскажите, кто что знает, пожалуйста... 2)Нахожусь на финальном этапе разработки кодогенератора для оберток... Не могу понять, что необходимо делать с определенным идентификатором процесса. С чем его сравнивать?

Ответ на: комментарий от Pi

> 1) LD_PRELOAD

совет в равной степени как хороший так и бесполезный, бо не отвечает ни на один вопрос вопрошающего :)

ps: впрочем, на заданные им вопросы ответить сможет лишь он сам :)

// wbr

klalafuda ★☆☆
()

> Не могу понять, что необходимо делать с определенным идентификатором 
> процесса. С чем его сравнивать?

с идентификатором нужного тебе процесса (для которого осуществляется перехват вызова функций)
можешь написать _init() функцию, определяющую PID (а лучше TID) процесса и сохраняешь его, если он совпадает с требуемым
в функциях-обертках проверяешь, совпадает ли значение, возвращенное getpid() с сохраненным

rei3er
()

>если это действительно "их" процесс, совершают заранее запланированные действия

Какая-то непонятная ситуация - с одной стороны если это все легально то своего можно узнать элементарно создав из СВОЕГО /var/run/*.pid, если это попытки проприетарщины или злонамеренного алгоритма - странно спрашивать помощи здесь - есть множество сайтов подобных хакер.хх.

koTuk
()
Ответ на: комментарий от koTuk

Спасибо. С помощью LD_PRELOAD все работает как нужно! Помогите, пожалуйста еще с одним вопросом. Нужно написать программу(скорее всего демон), которая будет постоянно висеть в памяти и отлавливать вызовы програм. Как только какая-то программа будет запущена - запуститься скрипт, который будет сначала задавать LD_PRELOAD, а также запускать мою программу

Wareznik
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.