Поиск:

Ответ в темуСоздание новой темы Создание опроса
> asm-прерывания на vc++, программа аварийно закрывается 
:(
    Опции темы
ParaPik
Дата 21.7.2009, 20:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



GoldFinch, почитай-ка книгу "Внутреннее устройство Windows". Cheloveck, по-моему, Винда все-таки использует и другие кольца, кроме 0 и 3. Во-первых, уровни привилегий для того и были придуманы, чтобы обезопасить системный код от пользовательского. Программа на уровне 3 не может обращать и использовать сегменты кода и данных, которые более привилегированные. Таким программам запрещается на прямую работать с оборудованием(т.е. использовать команды in, out, ins, outs). Для этого служать драйвера, к функциям которых осуществляется через команду sysenter. Также осуществляется вызов и функций Винды. Те функции, которые находятся в библиотеках типа kernel.dll, и служат для обращения к привилегированным функциям. Так, например, функции GDI(GetDC, Rectangle и т.д.) работают в режиме ядра. И для того, чтобы к ним обратиться, мы и используем функции из dll-библиотек. Чтобы в этом убедиться проследите все действия через отладчик. Но есть функции, которые работают в режиме пользователя. Например, GetCurrentThread. Она возвращает псевдоуказатель на поток. И прерывания DOS тоже доступны. Только, чтобы их вызвать, надо иметь нулевой уровень привилегий, который имеют все программы под DOS, запускаемые под Виндой. Система, просто, эмулирует родную среду для приложения.
PM MAIL   Вверх
Cheloveck
Дата 21.7.2009, 21:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1578
Регистрация: 26.7.2008
Где: Тула

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



Цитата

Однако, большинство UNIX-систем используют только 2 кольца, даже если аппаратные средства поддерживают больше режимов центрального процессора.

Многие современные архитектуры центральных процессоров (включая популярную архитектуру x86) включают некоторые формы защиты. Но несмотря на это, операционная система Windows NT, также как и UNIX, полностью не используют эти возможности.

цы здесь


--------------------
user posted image
PM Jabber   Вверх
GoldFinch
Дата 21.7.2009, 21:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата



****


Профиль
Группа: Завсегдатай
Сообщений: 2141
Регистрация: 30.11.2008

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



ParaPik, 
1) в винде колец 2: 0е и 3е
2) АПИ винды - в длл, это юзермод. GetProcAddress - функция апи винды, живет в kernel32.dll, не использует обращения к коду ядра
3) ВЕСЬ GDI - это юзермод.  
Код

Windows via C/C++, Fifth Edition, Jeffrey Richter 
Part I: Required Reading | Chapter 3: Kernel Objects | What Is a Kernel Object?

In addition to using kernel objects, your application might use other types of objects, such as menus, windows, mouse cursors, brushes, and fonts. These objects are User objects or Graphical Device Interface (GDI) objects, not kernel objects. 

да, управляется GDI ядром, но само GDI живет в юзермоде
PM MAIL ICQ   Вверх
ParaPik
Дата 22.7.2009, 10:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



GoldFinch,
1) В dll-библиотеках, как я уже писал, есть функции, которые работают в пользовательском режиме.
2) Во-первых, в книге "Внутреннее устройство Windows" дана хорошая схема, которая показывает расположение все частей системы. Сам центр GDI, который работает с оборудованием, если есть драйвер, то через него, расположен на уровне ядра. А как ты себе представляешь на 3-ей уровне обратиться к оборудованию, не использую команды in, out. Еще раз повторяю. Dll-библиотеки - это user mode, а они, большая часть из них, обращаются к функциям kernel mode.
3) Что такое kernel objects. Это самые "простые" объекты, которые инкапсюлируют в себе элементарные(меньчайшие) компоненты системы. Например, таймеры, мьютексы, cобытия, потоки ядра. Их главная особенность в том, что, чтобы к ним обратиться, не нужны описатели(handles). При этом время зря не тратится.
User objects. Это объекты, на которые уже нужны описатели, чтобы с ними могла работать посторонняя программа(следовательно, появляются некоторые задержки при работе). Эти объекты инкапсюлируют в себе несколько kernel objects. Но их саморучно, как бы ты ни хотел, изменить никто не даст, потому что сами объекты находятся на 0-ом уровне(для этого есть WinAPI). 
4) Cheloveck, сейчас прочту.
PM MAIL   Вверх
GoldFinch
Дата 22.7.2009, 13:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата



****


Профиль
Группа: Завсегдатай
Сообщений: 2141
Регистрация: 30.11.2008

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



ParaPik, юзермодные дллки винды могут обращаться к чему угодно, хоть к серверу с линуксом по сети через RPC
только апи винды - это функции которые экспортируют эти юзермодные дллки, и тот пост на 80% - бред
Цитата(ParaPik @  20.7.2009,  16:05 Найти цитируемый пост)
(...) 0-ой по другому называют режимом ядра, т.к. на этом уровне работает Windows. А программы, которые компилирует Visual C++ имеют уровень привилегий 3(самый низший). (...) WinAPI функции находятся на более привилегированном уровне. И для их вызова используется команда sysenter. (...)


PM MAIL ICQ   Вверх
ParaPik
Дата 22.7.2009, 13:45 (ссылка)    | (голосов:2) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Если Винда находит PE-заголовок в файле, то сразу отправляет программу на 3-й уровень. И все DLL загружаются на 3-й уровень.
ВСЕ!. А раз ты считаешь это бредом, тогда Соломон с Руссиновичем - ламеры. А все, что они написали в своей книге, - фуфло. А все, что там написано, они записали со слов таких людей, как Катлер(один из разработчиков системы). В их книге все подробно описано. Куда Винда пихает, зачем пихает.
P.S. Короче, прочитай их книгу. А то я смотрю, ты, GoldFinch, вообще не улавливаешь разницу между WinAPI DLL  и низкоуровневым WinAPI. И еще. Ты хоть одну WinAPI функцию прогнал через отладчик?
PM MAIL   Вверх
GoldFinch
Дата 22.7.2009, 16:27 (ссылка)    | (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата



****


Профиль
Группа: Завсегдатай
Сообщений: 2141
Регистрация: 30.11.2008

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



ParaPik, прочитай определение понятия API и WinAPI
http://en.wikipedia.org/wiki/Application_p...mming_interface
http://en.wikipedia.org/wiki/Windows_API
PM MAIL ICQ   Вверх
ParaPik
Дата 22.7.2009, 18:24 (ссылка)    | (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Знаешь, GoldFinch, я ничего нового не узнал. Эти статьи написаны в максимально абстрагированном варианте. Т.е. в них сказано, что есть специализированный интерфейс, который позволяет приложениям выполнять определенные действия. Например, WinAPI. Но. Если говорить о реализации этого интерфейса на низком уровне, то определение можно дать такое: "API - это набор библиотек, через которые приложение общается с OS. Т.е. вызывает ее функции." А раз OS находится на 0-ом кольце, то и эти функции располагаются там же. Если и этого недостаточно. То могу предложить схему строения Windows, принятой Microsoft.
PM MAIL   Вверх
GoldFinch
Дата 22.7.2009, 18:51 (ссылка)  | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата



****


Профиль
Группа: Завсегдатай
Сообщений: 2141
Регистрация: 30.11.2008

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



ParaPik, ОС не находится в 0м кольце. ядро - да. драйвера - да. но ОС находится и в 0 и в 3м кольцах.
АПИ - это интерфейс. сервисы ядра, к которым обращаются их юзермодные обертки - это реализация винды. это не интерфейс винды.
юзермодные приложения обращаются к юзермодному интерфейсу винды - АПИ.
драйвера обращаются к ядерному интерфейсу винды - это тоже АПИ, но АПИ для драйверов, приложения его не юзают.


Цитата(ParaPik @  22.7.2009,  19:24 Найти цитируемый пост)
Если говорить о реализации этого интерфейса на низком уровне,

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

PM MAIL ICQ   Вверх
ParaPik
Дата 22.7.2009, 21:51 (ссылка)    | (голосов:2) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



1) Конечно, приложения его использовать не могут, если код этих функций написан без использования sysenter.
2)  Под OS я имел в виду ее ядро(неточность). Еще имеются подсистемы, которые и работают в 3-ем кольце.
3) Сервисы ядра, конечно, - реализации OS. А я разве что-то не так написал. Я написал, что программа обращается к ее функциям, чтобы не вводить новую терминологию.
4) "Если говорить о реализации этого интерфейса на низком уровне". Так вообще-то говорят. Но только здесь речь идет о его реализации в мельчайших ячейках. Когда говорят о низком уровне, то подразумевают мельчайшее строение чего-либо. Если, например, говорить о программе, то имеется в виду машинные команды.
5) Сколько ни читал, везде мое определение о WinAPI и пишут.
PM MAIL   Вверх
rthsobakas
Дата 9.1.2010, 20:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Awaiting Authorisation
Сообщений: 562
Регистрация: 20.9.2007

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



Цитата

юзермодные приложения обращаются к юзермодному интерфейсу винды - АПИ.
драйвера обращаются к ядерному интерфейсу винды - это тоже АПИ, но АПИ для драйверов, приложения его не юзают.

позволю процитировать тему
http://www.cracklab.ru/f/index.php?action=...&topic=9645

Цитата

В основе высокоуровневых функций лежат низкоуровневые Nt* Zw* NativeAPI. Они выполняются в режиме ядра. Но вызвать их можно и из обычных программ. В этом случае будет переход в ядро, который выполняется с помощью SYSENTER. Справки по ним не густо, есть книжка-справочник. К сожалению где скачать не помню. Погугли.


там кстати и про sysenter писали. 

Цитата

АПИ для драйверов, приложения его не юзают.

ведь смотря что понимать под приложением. 

Вроде как драйвера тоже разные бывают(то есть выполнятся могут в ринг 3 и 0 или я чет перепутал опять). 


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

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


 




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


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

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