To Olexa

Основной форум пользователей GPS (Global Positioning System)
Правила форума
Для предотврашения спама первые сообщения вновь зарегистрированных пользователей проходят ручную премодерацию.
kg_vista
Сообщения: 2585
Зарегистрирован: 31 июл 2002, 17:07

Re: OFF

Сообщение kg_vista » 01 май 2005, 14:38

> В дельфи вызов любой функции (ну не любой, а большинства) и из ядра и из ГДИ и пр. идет не напрямую

Еще немного ликбеза... Когда я писал про ядро системы, я имел в виду именно код ядра системы, исполняющийся в защищенном режиме, а не код kernel32.dll (API-интерфейс ядра для user mode приложений).

Дело в том, что приложения не могут обращаться к защищенному коду ядра напрямую, им нужен "посредник", живущий на прикладном уровне. Эту задачу и решает Kernel32.dll - DLL, подгружаемая прямо в адресное пространство приложения, то есть в user mode.

Итак, небольшая поправка: приложения на Delphi, как и любые другие приложения, в принципе не могут обращаться к кода ядра напрямую. Напрямую можно вызывать API-функции, в том числе, являющиеся посредниками для кода ядра.

> А подобные выкрутасы с управлением памятью (это уже kernel) давали раза два синее окно смерти.

Вот это действительно сильно! Причем сразу по двум причинам:
1. Управление памятью через функции типа HeapAlloc, хоть формально и экспортируются из Kernel32.dll, реально почти на 100% исполняются непосредственно в user mode, поскольку они управляют адресным пространством самого приложения. "Ныряние" в защищенный код ядра при этом происходит крайне редко - только ради выделения физических страниц памяти на виртуальные адреса, что делается крупными блоками "про запас". Но, видимо, удалось хорошенько попортить содержимое памяти хипа.
2. Эта подсистема ядра ОС из наиболее "древних" и, следовательно, хорошо отлаженная. Уронить ее некорректными параметрами вызова не так-то просто... Хотя и возможно - в сети можно найти различные примеры кода для целенаправленного получения блюскринов.

На Си++ у меня таких прецедентов не было :-). И слава Богу...


MichaelUS
Сообщения: 362
Зарегистрирован: 22 янв 2003, 03:43

Re: OFF

Сообщение MichaelUS » 01 май 2005, 15:01

> На Си++ у меня таких прецедентов не было :-). И слава Богу...

Вообще-то должна была возникнуть GPF, а не синий экран. Синий экран возможно возник при полном исчерпании ресурсов GDI. Когда их становится мало первым делом "сыпятся" шрифты, превращаясь в шрифт System. Далее система сообщает о малом количестве доступных ресурсов GDI. Здесь она, видимо, среагировать уже не успела...


Olexa
Сообщения: 5738
Зарегистрирован: 31 авг 2001, 13:07

Re: OFF

Сообщение Olexa » 01 май 2005, 15:37

Кстати, в Windows Task Manager'е можно вывести колонку GDI Objects по процессам, чтобы видеть, кто лопает ресурсы GDI, и в лопаньи ли ресурсов GDI проблема.


CYBER
Сообщения: 418
Зарегистрирован: 05 апр 2002, 08:24

Re: OFF

Сообщение CYBER » 01 май 2005, 15:50

Ну теперь я совсем запутался...
Разве каждое приложение создает подгружаемую в виртуальное пространство копию kernel.dll? Мне всегда казалось, что существует только одна копия с разными областями данных. А переключение идет только на уровне изменения дескрипторов памяти...
Доктор! Больному становится лучше... Может мне почитать чего? я то я до сих пор питаюсь данными по 386-му процессору, почерпнутыми из Центрпрограмсистемных (Тверь) книжек.


kg_vista
Сообщения: 2585
Зарегистрирован: 31 июл 2002, 17:07

Re: OFF

Сообщение kg_vista » 01 май 2005, 18:17

>Разве каждое приложение создает подгружаемую в виртуальное пространство копию kernel.dll? Виртуально эта DLL присутствует в каждом процессе. Но поскольку сегменты кода получаются идентичными, ОС настраивает дескрипторы памяти так, что соответствующие области виртуальной памяти всех процессов ссылаются на одни и те же физические страницы. Данные хранятся отдельно для каждой "копии". Так что в этом плане все верно. Другое дело, что код этой DLL исполняется в user mode. Реальные же обращения к ядру выглядят как вызовы программных прерываний (через инструкцию int) - по ним процессор переключается в защищенный режим и исполняет код "настоящего" ядра (а это совсем другие DLL). Попытка напрямую перевести процессор в защищенный режим любым кодом, расположенным в младших 2 ГБ адресного пространства текущего процесса, аппаратно перехватывается ядром ОС (само оно отображается в старшие 2 ГБ для всех процессов) и приводит к останову подозрительного приложения. Так ядро ОС защищает слою целостность от любых посягательств: дозволены только определенные прерывания с правильно заданными контекстами. Иначе любое приложение сможет обвести системную security вокруг пальца :-). > Может мне почитать чего? Не помню, насколько раскрывается в этой книге данная тема, но все равно стоит почитать: Джеффри Рихтер, "Windows для профессионалов" (http://books.dore.ru/bs/f1bid436.html) Если интересно устройство ядра, то надо читать документацию к Windows DDK (она не входит в MSDN).

_sergey_
Сообщения: 267
Зарегистрирован: 13 июн 2002, 14:41

Мысли по поводу

Сообщение _sergey_ » 01 май 2005, 18:40

Привет!

1. USB <-> RS232 это очень глючная вещь. Я читал в интернете что часто глючит из-за того, что в драйверах не реализуют Overlapped IO, но они и без Overlapped регулярно падают с голубым экраном. Бери PCMCIA RS232 карточку и будет тебе счастье.

2. Может WinXP и новее Win2K, только у нее собственный удаленный доступ через раз com-порт открыть не может...

WBR,
Sergey.


CYBER
Сообщения: 418
Зарегистрирован: 05 апр 2002, 08:24

Re: Мысли по поводу

Сообщение CYBER » 01 май 2005, 19:08

hComm := CreateFile('COM1', // pointer to name of the file
GENERIC_READ+GENERIC_WRITE,// access (read-write) mode
0, // share mode
0, // pointer to security descriptor
OPEN_EXISTING, // how to create
0,// file attributes
0 // handle to file with attributes to copy
);
Какие, позвольте спросить оверлапы? Это (см выше железно работает)
Communications Resources

The CreateFile function can create a handle to a communications resource, such as the serial port COM1. For communications resources, the dwCreationDistribution parameter must be OPEN_EXISTING, and the hTemplate parameter must be NULL. Read, write, or read-write access can be specified, and the handle can be opened for overlapped I/O. For more information about communications, see Communications.
...
А это выдержка из руководства по ,так сказать , ОС от Билли.


CYBER
Сообщения: 418
Зарегистрирован: 05 апр 2002, 08:24

маленький P.S.

Сообщение CYBER » 01 май 2005, 19:24

Если вместо COM1 указать USB, то система возвращает положительный хандле, только сейчас ничего под рукой УСБишного нет, чтобы попробовать что-нить переслать.


Iguana
Сообщения: 320
Зарегистрирован: 13 ноя 2004, 08:02

Re: To Olexa

Сообщение Iguana » 01 май 2005, 19:41

Блин, не думал вызвать такую полемику! Приятно почитать умные мысли умных людей ;-)

С уважением, Жушев Сергей.
e-mail: sergei@zhushev.ru
+7 927 23 72864.
ICQ 230-007-338.

CYBER
Сообщения: 418
Зарегистрирован: 05 апр 2002, 08:24

Это не полемика

Сообщение CYBER » 01 май 2005, 20:00

Как говорил герой фильма 72 метра: Выброси его за борт, пусть в него бакланы ...
ЖПС мешает единению с природой. Все выше (и ниже) сказанное - концептуальная беседа о моем дилетанстве и возможностях MS Win


Ответить

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и 151 гость