Модераторы: xvr
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Подмена функций 
V
    Опции темы
andrew_121
Дата 8.8.2009, 13:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Кодофей
****


Профиль
Группа: Завсегдатай
Сообщений: 3448
Регистрация: 3.1.2008

Репутация: 3
Всего: 33



Здравствуйте.

Нужно подменить вызов таких функций как open(), lstat[64](), stat[64](), read(), write(), mkdir(), chdir(), getcwd() для определенного процесса.
Интересует мнение других. Как бы вы реализовали эту задачу.

Спасибо!

Это сообщение отредактировал(а) andrew_121 - 8.8.2009, 13:19


--------------------
Удалил аккаунт. Прощайте!
PM MAIL   Вверх
andrew_121
Дата 8.8.2009, 18:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Кодофей
****


Профиль
Группа: Завсегдатай
Сообщений: 3448
Регистрация: 3.1.2008

Репутация: 3
Всего: 33



Вот что нашел.
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

По идее то что нужно.
Может есть еще какие-то варианты? Не считая модулей ядра.



--------------------
Удалил аккаунт. Прощайте!
PM MAIL   Вверх
bsa
Дата 9.8.2009, 10:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Модератор
Сообщений: 9185
Регистрация: 6.4.2006
Где: Москва, Россия

Репутация: 16
Всего: 196



кажется есть переменная среды LD_PRELOAD_LIBRARY (или что-то вроде того), которая заставляет ld.linux.so сначала загрузить указанную библиотеку перед той, которую требует программа. Так как линковка осуществляется последовательно, то можно создав библиотеку с нужными функциями, подменить на них стандартные вызовы у необходимых процессов.
PM   Вверх
andrew_121
Дата 9.8.2009, 10:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Кодофей
****


Профиль
Группа: Завсегдатай
Сообщений: 3448
Регистрация: 3.1.2008

Репутация: 3
Всего: 33



bsa, Да, я так понял, это самый правильный вариант.
Пробую.


--------------------
Удалил аккаунт. Прощайте!
PM MAIL   Вверх
MAKCim
Дата 9.8.2009, 11:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Воін дZэна
****


Профиль
Группа: Экс. модератор
Сообщений: 5644
Регистрация: 10.12.2005
Где: Менск, РБ

Репутация: 84
Всего: 207



Цитата(bsa @  9.8.2009,  10:39 Найти цитируемый пост)
то можно создав библиотеку с нужными функциями, подменить на них стандартные вызовы у необходимых процессов. 

не прокатит, если нужно работать с существующим процессом
тут можно заюзать ptrace + PTRACE_SYSCALL (если функции, которые нужно подменить, соответсвуют системным вызовам)


--------------------
Ах, у елі, ах, у ёлкі, ах, у елі злыя волкі ©

PM MAIL   Вверх
andrew_121
Дата 9.8.2009, 11:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Кодофей
****


Профиль
Группа: Завсегдатай
Сообщений: 3448
Регистрация: 3.1.2008

Репутация: 3
Всего: 33



Цитата(MAKCim @  9.8.2009,  11:02 Найти цитируемый пост)
не прокатит, если нужно работать с существующим процессом

Нет. Процесс я сам запускаю. В этом методе есть недостатки? Какой метод предпочитаемый?

Цитата(MAKCim @  9.8.2009,  11:02 Найти цитируемый пост)
(если функции, которые нужно подменить, соответсвуют системным вызовам) 

...не понял.

Добавлено через 4 минуты и 24 секунды
Что почитать порекомендуете?


--------------------
Удалил аккаунт. Прощайте!
PM MAIL   Вверх
MAKCim
Дата 10.8.2009, 12:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Воін дZэна
****


Профиль
Группа: Экс. модератор
Сообщений: 5644
Регистрация: 10.12.2005
Где: Менск, РБ

Репутация: 84
Всего: 207



Цитата(andrew_121 @  9.8.2009,  11:43 Найти цитируемый пост)
...не понял.

ну все вышеперечисленные тобой функции соответствуют системным вызовам
а если, к примеру, тебе нужно подменить функцию gethostbyname, то ptrace ты не сможешь заюзать, т. к gethostbyname - обычная функция libc


Цитата(andrew_121 @  9.8.2009,  11:43 Найти цитируемый пост)
Нет. Процесс я сам запускаю. В этом методе есть недостатки? Какой метод предпочитаемый?

первый просто реализуется, но не полностью надежный
второй труднее в реализации + ограничение, которое я озвучил


--------------------
Ах, у елі, ах, у ёлкі, ах, у елі злыя волкі ©

PM MAIL   Вверх
andrew_121
Дата 15.8.2009, 15:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Кодофей
****


Профиль
Группа: Завсегдатай
Сообщений: 3448
Регистрация: 3.1.2008

Репутация: 3
Всего: 33



Цитата(MAKCim @  9.8.2009,  11:02 Найти цитируемый пост)
тут можно заюзать ptrace + PTRACE_SYSCALL

А можно микропримерчик smile 
к примеру, как для команды cd подменить вызов chdir?

Это сообщение отредактировал(а) andrew_121 - 15.8.2009, 16:07


--------------------
Удалил аккаунт. Прощайте!
PM MAIL   Вверх
andrew_121
Дата 19.8.2009, 09:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Кодофей
****


Профиль
Группа: Завсегдатай
Сообщений: 3448
Регистрация: 3.1.2008

Репутация: 3
Всего: 33



Ну хоть ссылку на что-то подобное дайте smile Буду дико признателен.


--------------------
Удалил аккаунт. Прощайте!
PM MAIL   Вверх
bsa
Дата 29.8.2009, 17:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Модератор
Сообщений: 9185
Регистрация: 6.4.2006
Где: Москва, Россия

Репутация: 16
Всего: 196



cd может быть внутренней командой оболочки. Поэтому нужно подменять именно у оболочки.
PM   Вверх
andrew_121
Дата 29.8.2009, 18:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Кодофей
****


Профиль
Группа: Завсегдатай
Сообщений: 3448
Регистрация: 3.1.2008

Репутация: 3
Всего: 33



Цитата(bsa @  29.8.2009,  17:25 Найти цитируемый пост)
cd может быть внутренней командой оболочки. Поэтому нужно подменять именно у оболочки. 

т.е. в Линуксе?


--------------------
Удалил аккаунт. Прощайте!
PM MAIL   Вверх
MAKCim
Дата 29.8.2009, 20:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Воін дZэна
****


Профиль
Группа: Экс. модератор
Сообщений: 5644
Регистрация: 10.12.2005
Где: Менск, РБ

Репутация: 84
Всего: 207



Цитата(bsa @  29.8.2009,  17:25 Найти цитируемый пост)
cd может быть внутренней командой оболочки. Поэтому нужно подменять именно у оболочки. 

cd реализуется через chdir


--------------------
Ах, у елі, ах, у ёлкі, ах, у елі злыя волкі ©

PM MAIL   Вверх
Loki
Дата 30.8.2009, 13:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 244
Регистрация: 9.7.2006

Репутация: нет
Всего: нет



а зачем подменивать? что-бы спрятать что-то? или это система лицензирования такая?)
PM MAIL   Вверх
andrew_121
Дата 31.8.2009, 07:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Кодофей
****


Профиль
Группа: Завсегдатай
Сообщений: 3448
Регистрация: 3.1.2008

Репутация: 3
Всего: 33



Loki, Есть бинарник, но нет сорцов. Нужно заставить его использовать другие имена файлов/каталогов.

Добавлено через 38 секунд
Нужно было.
Вопрос решен.


--------------------
Удалил аккаунт. Прощайте!
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С/С++: Программирование под Unix/Linux"
xvr
  • Проставьте несколько ключевых слов темы, чтобы её можно было легче найти.
  • Не забывайте пользоваться кнопкой "Код".
  • Вопросы мобильной разработки тут
  • Телепатов на форуме нет! Задавайте чёткий, конкретный и полный вопрос. Указывайте полностью ошибки компилятора и компоновщика.
  • Новое сообщение должно иметь прямое отношение к разделу форума. Флуд, флейм, оффтопик запрещены.
  • Категорически запрещается обсуждение вареза, "кряков", взлома программ и т.д.

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, xvr.

 
 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Программирование под Unix/Linux | Следующая тема »


 




[ Время генерации скрипта: 0.1607 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.