Поиск:

Ответ в темуСоздание новой темы Создание опроса
> ljmp в ядре, general protection error 
:(
    Опции темы
Friackazoid
  Дата 22.2.2010, 01:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Доброго времени суток.

Пытаюсь провернуть такую операцию в ядре: сделать ljmp на свой сегмент и выполнить в этом сегменте функцию.  smile 

Код

__asm__ __volatile__ (
                "\tljmp $"STR(__MY_CS)", $1f\n"
                "\t1:\n"
                "\tnop\n"
                ::: "eax", "memory");


__MY_CS загружен в gdt по всем правилам. Но на это получаю general protection fault с кодом e8.

Пробую делать lcall
Код

__asm__ __volatile__ (
                "\tlcall *(%0)\n"
                ::"r"(virt_to_phys(addr)): "eax", "memory");


и тоже получаю сбой защиты но уже с кодом 3cb8

Кто нибудь пробовал сделать что нибудь в этом духе или знает что значат эти коды ошибок? 
--------------------
Даже если тебя съели, то все равно есть два выхода.42Team блог
PM MAIL WWW ICQ GTalk   Вверх
MAKCim
Дата 22.2.2010, 14:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


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


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

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



что после nop'а идет?
смотрели в мануале, что означают эти коды ошибок?


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

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


Шустрый
*


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

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



После nop'a только выход из функции. И сли верть ману этот код ошибки и есть селектор сегмента.
--------------------
Даже если тебя съели, то все равно есть два выхода.42Team блог
PM MAIL WWW ICQ GTalk   Вверх
Friackazoid
Дата 22.2.2010, 21:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



После экспериментов выяснилось что если своему сегменту зменит CPL на совпадающий с текущим, в данном слуае на 00 то джамп проходит нормально. В то же время интеовский ман говорит что такие джампы единственный способ понизить привилегии кода.  smile 
--------------------
Даже если тебя съели, то все равно есть два выхода.42Team блог
PM MAIL WWW ICQ GTalk   Вверх
MAKCim
Дата 23.2.2010, 09:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


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


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

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



тот сегмент, на который осуществляется переход, conforming или nonconforming?


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

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


Шустрый
*


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

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



Да сегмент non-conforming. Если сделать его conforming то выполнить прыжок получается только если сменить DPL сегменту на 0 и код в сегменте начинает выполнятся с CPL 0.  :dash0 
--------------------
Даже если тебя съели, то все равно есть два выхода.42Team блог
PM MAIL WWW ICQ GTalk   Вверх
MAKCim
Дата 24.2.2010, 09:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


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


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

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



в общем посмотрел я мануал
в принципе где вы нашли, что cpl можно понизить?


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

PM MAIL   Вверх
Friackazoid
Дата 24.2.2010, 16:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Все разобралась, изменить CPL таким способом действительно нельзя. Просто показалось что если можно перепрыгнуть на другой сегмент то почему бы не перепрыгнуть на сегмент с меньшими привилегиями (по аналогии с сегментом данных), ан нет для сегментов кода правила более строгие. Меняю сегмент с помошью iret

Код

__asm__ __volatile__ (
                "\tpushl $"STR(__MY_DS)"\n"
                "\tpushl %%esp\n"
                "\tpushl %1\n"
                "\tpushl $STR(__MY_CS)"\n"
                "\tpushl %0\n"
                "\tiret\n"
                ::"r"(addr), "r"(flags): "eax", "memory");


Мне просто надо сменить контекст что называется на лету, чтобы один раз выполнить функция. Использовать механизм смены процеса ядра использовать во-первых не хочу ибо неоправданно для такого случая много накладных расходов, во вторых не могу потому что механизм использует то что еще не инициализованно на момент запуска функции.
--------------------
Даже если тебя съели, то все равно есть два выхода.42Team блог
PM MAIL WWW ICQ GTalk   Вверх
MAKCim
Дата 25.2.2010, 00:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


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


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

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



Friackazoid
чем вы занимаетесь если не секрет? ;)


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

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


Шустрый
*


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

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



Разработкой защитных средств для ядра) И никакого криминала  smile 
--------------------
Даже если тебя съели, то все равно есть два выхода.42Team блог
PM MAIL WWW ICQ GTalk   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Asm для Linux/Unix"
MAKCim
  • Проставьте несколько ключевых слов темы, чтобы её можно было легче найти.
  • Не забывайте пользоваться кнопкой КОД.
  • Телепатов на форуме нет! Задавайте чёткий, конкретный и полный вопрос. Указывайте полностью ошибки компилятора и компоновщика.
  • Новое сообщение должно иметь прямое отношение к разделу форума. Флуд, флейм, оффтопик запрещены.
  • Категорически запрещается обсуждение вареза, "кряков", взлома программ и т.д.

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

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


 




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


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

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