![]() |
|
![]() ![]() ![]() |
|
fullnull |
|
|||
Новичок Профиль Группа: Участник Сообщений: 10 Регистрация: 23.7.2007 Репутация: нет Всего: нет |
Здравствуйте. Простой вопрос не отнимет у Вас много времени.
Простейшая программа, скомпилированная с помошью Visual C++ Toolkit 2003,
не работает, завершается при выполнении int 21h. Вообще, не терпит команды int. Это особенность vc++ или еще что? Надеюсь на Вашу помощь. |
|||
|
||||
GoldFinch |
|
|||
![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2141 Регистрация: 30.11.2008 Репутация: нет Всего: 26 |
Это особенность windows. в windows прерывания DOS не работают.
|
|||
|
||||
Lazin |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 3820 Регистрация: 11.12.2006 Где: paranoid oil empi re Репутация: 2 Всего: 154 |
а инструкцию процессора int, вообще нельзя в обычных программах использовать |
|||
|
||||
GoldFinch |
|
|||
![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2141 Регистрация: 30.11.2008 Репутация: нет Всего: 26 |
Lazin, можно написать
_emit 0xCD _emit 0x21 |
|||
|
||||
W4FhLF |
|
|||
![]() found myself ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 2831 Регистрация: 2.12.2006 Репутация: нет Всего: 121 |
Для отладочных прерываний(int 1 / int 3) можно. -------------------- "Бог умер" © Ницше "Ницше умер" © Бог |
|||
|
||||
ParaPik |
|
|||
Шустрый ![]() Профиль Группа: Участник Сообщений: 132 Регистрация: 8.1.2009 Репутация: нет Всего: нет |
Дело в том, что в защищенном режиме работы микропроцессора имеются так называемые кольца привилегий. Их всего 4(0, 1, 2, 3).
0-ой по другому называют режимом ядра, т.к. на этом уровне работает Windows. А программы, которые компилирует Visual C++ имеют уровень привилегий 3(самый низший). 3-ий также называют режимом пользователя. На этом уровне нельзя выполнять след. и некоторые другие команды(а точнее их разновидности): int, iret, out, in, lmsw, smsw, lgdt, lldt. WinAPI функции находятся на более привилегированном уровне. И для их вызова используется команда sysenter. Когда микропроцессор встречает одну из следующих команд, то сравнивает поле RPL в сегментном регистре cs. Если это поле равно 3, то выбрасывается исключение(вид прерывания), на которое должна отреагировать OS. |
|||
|
||||
dumb |
|
|||
![]() sceloglauxalbifacies ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 2929 Регистрация: 16.6.2006 Репутация: нет Всего: 158 |
ParaPik, почитай еще литературу. а пока не пиши о внутреннем устройстве windows - не вводи людей в "ступор".
|
|||
|
||||
GoldFinch |
|
|||
![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2141 Регистрация: 30.11.2008 Репутация: нет Всего: 26 |
ParaPik, ты написал чушь
|
|||
|
||||
ParaPik |
|
|||
Шустрый ![]() Профиль Группа: Участник Сообщений: 132 Регистрация: 8.1.2009 Репутация: нет Всего: нет |
Во-первых, я пишу то, о чем читал, GoldFinch. А, во-вторых, если бы можно было использовать все команды для пользовательских приложений, то я мог бы сам установить привилегию, которая мне нужна с помощью команд call far, retf.(Но и это только половина работы)
Это сообщение отредактировал(а) ParaPik - 21.7.2009, 15:52 |
|||
|
||||
GoldFinch |
|
|||
![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2141 Регистрация: 30.11.2008 Репутация: нет Всего: 26 |
ParaPik, и то что ты читал - чушь.
Добавлено через 29 секунд или то что ты читал - не чушь, но ты не так понял то что прочитал. |
|||
|
||||
ParaPik |
|
|||
Шустрый ![]() Профиль Группа: Участник Сообщений: 132 Регистрация: 8.1.2009 Репутация: нет Всего: нет |
1) Я описался. Микропроцессор должен анализировать CPL(как я понял, он берется из DPL дескриптора).
2) Я читал Юрова и Пирогова. Если это чушь, то я не знаю тогда, что читать. |
|||
|
||||
GoldFinch |
|
|||
![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2141 Регистрация: 30.11.2008 Репутация: нет Всего: 26 |
ParaPik, ты плохо их читал, они такого не пишут
|
|||
|
||||
ParaPik |
|
|||
Шустрый ![]() Профиль Группа: Участник Сообщений: 132 Регистрация: 8.1.2009 Репутация: нет Всего: нет |
Правильно. Они пишут только основу(Хотя как основу. Они совсем немного не добирают до полноты изложения. А эти нюансы можно прочитать в отдельных статьях). Что конкретно тебя смущает? То, что я написал какие команды не доступны на 3-ем уровне. Так это другие профессионалы написали. А потом все подтвердилось на практике. А про анализ микропроцессора тоже у известных лиц прочитал. Правда, в своем сообщении я несколько отошел от прерываний. Вернее было бы сказать, что команда-то разрешается. Но при вызове прерывания происходит сравнение CPL с полем DPL в дескрипторе таблицы прерываний. Это поле и определяет, кто может вызывать это прерывание,а кто нет. Ну, вроде уже все конкретизировал.
Это сообщение отредактировал(а) ParaPik - 21.7.2009, 17:58 |
|||
|
||||
GoldFinch |
|
|||
![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2141 Регистрация: 30.11.2008 Репутация: нет Всего: 26 |
вкратце, код в Windows может выполняться на уровне ядра или на пользовательском уровне. Ядро винды по определению выполняется на ядерном уровне*; драйвера, винды или пользовательские тоже работают в кернелмоде. Юзермодный код винды и пользовательские процессы работают в юзермоде. Что характерно, код винды, ядерный или юзермодный ничем не отличается от пользовательского. WinAPI функции - это юзермодные функции. *kernel.dll тоже называется "ядро", а работает в юзермоде. |
|||
|
||||
Cheloveck |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1578 Регистрация: 26.7.2008 Где: Тула Репутация: нет Всего: 32 |
Я слышал о какой-то ОС, которая использует первый и второй уровень, но это не винда. Винда, как и большинство ОСей, используют только 0 и 3 -------------------- ![]() |
|||
|
||||
![]() ![]() ![]() |
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | Visual C++/MFC/WTL | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |