Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
Форум программистов > C/C++: Программирование под Unix/Linux > Подмена функций |
Автор: andrew_121 8.8.2009, 13:18 |
Здравствуйте. Нужно подменить вызов таких функций как open(), lstat[64](), stat[64](), read(), write(), mkdir(), chdir(), getcwd() для определенного процесса. Интересует мнение других. Как бы вы реализовали эту задачу. Спасибо! |
Автор: andrew_121 8.8.2009, 18:44 |
Вот что нашел. http://www.insidepro.com/kk/043/043r.shtml http://gazette.linux.ru.net/lg81/sandeep.html http://gazette.linux.ru.net/lg83/sandeep.html http://gazette.linux.ru.net/lg85/sandeep.html По идее то что нужно. Может есть еще какие-то варианты? Не считая модулей ядра. |
Автор: bsa 9.8.2009, 10:39 |
кажется есть переменная среды LD_PRELOAD_LIBRARY (или что-то вроде того), которая заставляет ld.linux.so сначала загрузить указанную библиотеку перед той, которую требует программа. Так как линковка осуществляется последовательно, то можно создав библиотеку с нужными функциями, подменить на них стандартные вызовы у необходимых процессов. |
Автор: andrew_121 9.8.2009, 10:55 |
bsa, Да, я так понял, это самый правильный вариант. Пробую. |
Автор: andrew_121 9.8.2009, 11:43 | ||
Нет. Процесс я сам запускаю. В этом методе есть недостатки? Какой метод предпочитаемый?
...не понял. Добавлено через 4 минуты и 24 секунды Что почитать порекомендуете? |
Автор: MAKCim 10.8.2009, 12:36 | ||
ну все вышеперечисленные тобой функции соответствуют системным вызовам а если, к примеру, тебе нужно подменить функцию gethostbyname, то ptrace ты не сможешь заюзать, т. к gethostbyname - обычная функция libc
первый просто реализуется, но не полностью надежный второй труднее в реализации + ограничение, которое я озвучил |
Автор: andrew_121 15.8.2009, 15:54 |
А можно микропримерчик ![]() к примеру, как для команды cd подменить вызов chdir? |
Автор: andrew_121 19.8.2009, 09:25 |
Ну хоть ссылку на что-то подобное дайте ![]() |
Автор: bsa 29.8.2009, 17:25 |
cd может быть внутренней командой оболочки. Поэтому нужно подменять именно у оболочки. |
Автор: andrew_121 29.8.2009, 18:11 | ||
т.е. в Линуксе? |
Автор: MAKCim 29.8.2009, 20:35 | ||
cd реализуется через chdir |
Автор: Loki 30.8.2009, 13:12 |
а зачем подменивать? что-бы спрятать что-то? или это система лицензирования такая?) |
Автор: andrew_121 31.8.2009, 07:23 |
Loki, Есть бинарник, но нет сорцов. Нужно заставить его использовать другие имена файлов/каталогов. Добавлено через 38 секунд Нужно было. Вопрос решен. |