Форум русскоязычного сообщества Ubuntu


Следите за новостями русскоязычного сообщества Ubuntu в Twitter-ленте @ubuntu_ru_loco

Автор Тема: Перехват системных вызовов  (Прочитано 2222 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Оффлайн vitalas

  • Автор темы
  • Новичок
  • *
  • Сообщений: 11
  • Ubuntu 10.04
    • Просмотр профиля
Перехват системных вызовов
« : 28 Марта 2009, 23:28:01 »
Доброго времени суток.

Возникла проблема с заменой оригинального системного вызова на свой собственный. В ядрах версии 2.6 таблица системных вызовов не экспортируется, но порывшись в интернете наткнулся на решение этой проблемы в виде функции
(Нажмите, чтобы показать/скрыть)
Написав простенький модуль с её использованием  получаем:
pdk@pdk-laptop:~$ dmesg
[71379.874638] Hi
[71379.874662] Syscall table address c0326520
Сравниваю с
pdk@pdk-laptop:~$ cat /boot/System.map-2.6.24-23-generic | grep sys_call_table
c0326520 R sys_call_table
делаю вывод, что работает верно.

Дальше казалось бы всё просто, но не тут то было :)
При попытке заменить системный вызов, к примеру, mkdir путём:
(Нажмите, чтобы показать/скрыть)
загружаю модуль:
pdk@pdk-laptop:~$./insmod
Segmentation fault
pdk@pdk-laptop:~$dmesg
[72116.141979] Hi
[72116.142005] Syscall table address c0326520
[72116.142034] BUG: unable to handle kernel paging request at virtual address c03265bc
[72116.142038] printing eip: f8b59042 *pde = 1f956163 *pte = 00326161
[72116.142045] Oops: 0003 [#1] SMP
и так далее ...
Хотелось бы узнать как это дело заставить работать, у самого опыта в таких вещах нету  :(

P.S. Хотя можете мне подсказать другой способ мониторинга за обращениями к системным вызовам из модуля ядра - буду только рад (мне важно знать только сам факт запуска системного вызова)  :)
It is the forest beyond the horizon, the mountain waiting to be climbed, the new land across the endless sea.

 

Страница сгенерирована за 0.017 секунд. Запросов: 21.