![]() |
|
Модераторы: xvr |
![]()
|
|
| FRIZS |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 7 Регистрация: 19.3.2010 Репутация: нет Всего: нет |
Добрый день!! У меня возникла така проблема необходимо в ядре перезаписать блок кода обработчика system_call!
Блокировка lock_kernel не помогат! Операционка постоянно уходит в кернел паник и все! Что я делаю не праильно!? |
|||
|
||||
| JackYF |
|
|||
![]() полуавантюрист ![]() ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 5814 Регистрация: 28.8.2004 Где: страна тысячи озё р Репутация: 3 Всего: 162 |
А теперь внимательно прочитай то, что ты написал и подумай, можно ли что-либо ответить на такой неконкретный вопрос. |
|||
|
||||
| FRIZS |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 7 Регистрация: 19.3.2010 Репутация: нет Всего: нет |
Да забыл вставить код!
dire_call - адрес команды call sys_call_table(,%eax,4) в обработчике функции system_call int init_module(void) { int i; lock_kernel(); adress_system_call = get_sc_addr(); printk("dire_call: %p\n", dire_call); printk("system_call address: %p\n", adress_system_call); *((unsigned char *)dire_call +1) = 0x90; *((unsigned char *)dire_call +2) = 0x90; for (i = 0; i < sizeof(long); i++) { unsigned long mask = ((unsigned long)0xff << (8 * i)); printk("Mask: %p\n", mask); *((unsigned char *)dire_call+3 + i) = ((unsigned long) new_idt & mask) >> (8 * i); printk("Insert mode good!!!!!!!\n"); } unlock_kernel(); return 0; } |
|||
|
||||
| xvr |
|
|||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 7046 Регистрация: 28.8.2007 Где: Дублин, Ирландия Репутация: 20 Всего: 223 |
Загадочный код
Вот это
|
|||
|
||||
| MAKCim |
|
|||
![]() Воін дZэна ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 5644 Регистрация: 10.12.2005 Где: Менск, РБ Репутация: 84 Всего: 207 |
FRIZS, очень много тонкостей в том, что вы хотите сделать ваш же код ужасен, абсолютно не безопасен и не учитывает эти тонкости вообще задача достаточно нетривиальная -------------------- Ах, у елі, ах, у ёлкі, ах, у елі злыя волкі © |
|||
|
||||
| FRIZS |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 7 Регистрация: 19.3.2010 Репутация: нет Всего: нет |
Ну вот задали такую задачку!
У самого не получилось разобраться! Поэтому решил спросить. Ну так что кто подскажет в какую сторону копать? Это сообщение отредактировал(а) FRIZS - 8.4.2010, 11:10 |
|||
|
||||
| xvr |
|
|||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 7046 Регистрация: 28.8.2007 Где: Дублин, Ирландия Репутация: 20 Всего: 223 |
||||
|
||||
| MAKCim |
|
|||
![]() Воін дZэна ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 5644 Регистрация: 10.12.2005 Где: Менск, РБ Репутация: 84 Всего: 207 |
FRIZS,
во-первых никто так код не подменяет сначала его желательно дизассемблировать runtime-дизассемблером (например udis86) во-вторых, желательно удостоверится, что мы имеем права записи на страницу, где располагается нужный код и если нет, изменить права (например, через ioremap) в-третьих, если у нас SMP система, то обязательно нужно удостовериться, что остальные процессоры не выполняют этот код здесь можно посоветовать заюзать функцию on_each_cpu в качестве callback'а передать адрес функции, в которой процессор лочится (хотя и тут много тонкостей) -------------------- Ах, у елі, ах, у ёлкі, ах, у елі злыя волкі © |
|||
|
||||
| FRIZS |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 7 Регистрация: 19.3.2010 Репутация: нет Всего: нет |
Спасибо. Будем пробовать!
|
|||
|
||||
![]()
|
| Правила форума "С/С++: Программирование под Unix/Linux" | |
|
|
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, xvr. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | C/C++: Программирование под Unix/Linux | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |