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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> блокировки в ядре 
:(
    Опции темы
FRIZS
Дата 6.4.2010, 13:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Добрый день!! У меня возникла така проблема необходимо в ядре перезаписать блок кода обработчика system_call! 
Блокировка lock_kernel не помогат! Операционка постоянно уходит в кернел паник и все!


Что я делаю не праильно!?
PM MAIL   Вверх
JackYF
Дата 6.4.2010, 22:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


полуавантюрист
****


Профиль
Группа: Участник
Сообщений: 5814
Регистрация: 28.8.2004
Где: страна тысячи озё р

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



Цитата(FRIZS @  6.4.2010,  12:11 Найти цитируемый пост)
Что я делаю не праильно!? 

А теперь внимательно прочитай то, что ты написал и подумай, можно ли что-либо ответить на такой неконкретный вопрос.


--------------------
Пожаловаться на меня как модератора можно здесь.
PM MAIL Jabber   Вверх
FRIZS
Дата 8.4.2010, 09:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 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;
}

PM MAIL   Вверх
xvr
Дата 8.4.2010, 09:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 7046
Регистрация: 28.8.2007
Где: Дублин, Ирландия

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



Загадочный код  smile 
Вот это
Код

  *((unsigned char *)dire_call +1) = 0x90;
  *((unsigned char *)dire_call +2) = 0x90;
должно было изуродовать бедный call, как бог черепаху. Неудивительно, что все повисло  smile 
PM MAIL   Вверх
MAKCim
Дата 8.4.2010, 10:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


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


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

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



Цитата(xvr @  8.4.2010,  09:52 Найти цитируемый пост)
должно было изуродовать бедный call, как бог черепаху. Неудивительно, что все повисло
ну ну не факт ;)

FRIZS, 
очень много тонкостей в том, что вы хотите сделать
ваш же код ужасен, абсолютно не безопасен и не учитывает эти тонкости
вообще задача достаточно нетривиальная


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

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


Новичок



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

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



Ну вот задали такую задачку! smile 

У самого не получилось разобраться!
Поэтому решил спросить.

Ну так что кто подскажет в какую сторону копать?

Это сообщение отредактировал(а) FRIZS - 8.4.2010, 11:10
PM MAIL   Вверх
xvr
Дата 8.4.2010, 14:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 7046
Регистрация: 28.8.2007
Где: Дублин, Ирландия

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



Цитата(FRIZS @  8.4.2010,  11:04 Найти цитируемый пост)
Ну так что кто подскажет в какую сторону копать?
Вглубь. Копать лучше всего лопатой.  smile 
Если скажете, чего вы хотели добится этим кодом, может что и подскажем. Пока похоже, что пытались повесить Linux - это вам удалось  smile 

PM MAIL   Вверх
MAKCim
Дата 8.4.2010, 14:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


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


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

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



FRIZS, 
во-первых никто так код не подменяет
сначала его желательно дизассемблировать runtime-дизассемблером (например udis86)
во-вторых, желательно удостоверится, что мы имеем права записи на страницу, где располагается нужный код
и если нет, изменить права (например, через ioremap)
в-третьих, если у нас SMP система, то обязательно нужно удостовериться, что остальные процессоры не выполняют этот код
здесь можно посоветовать заюзать функцию on_each_cpu
в качестве callback'а передать адрес функции, в которой процессор лочится
(хотя и тут много тонкостей)


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

PM MAIL   Вверх
FRIZS
Дата 8.4.2010, 21:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



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

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

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


 




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


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

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