Форум: "Система";
Текущий архив: 2003.07.31;
Скачать: [xml.tar.bz2];
ВнизПрерывания в Delphi Найти похожие ветки
← →
SDW_syscoder (2003-05-12 01:33) [0]Можно ли в Delphi, в ассемблерных вставках использовать прерывания (например, int 21) и где про это прочитать.
← →
Ihor Osov'yak (2003-05-12 01:54) [1]Нет, нельзя.
← →
NightAngel (2003-05-12 04:50) [2]Можно.
Рассмотрим некую Win32-программу. Как известно, программа эта вызывает Kernel, а Kernel уже вызывает ring0.
Под Win9X VMM/VWIN32 реализует специальные сервисы для Kernelа. Вызываются они так:
kernel@int21:
015F:BFF712B9 push ecx
push eax
push 002A0010 ; <-- service-number
call kernel@ord0
ret
kernel@ord0:
015F:BFF713D4 mov eax, [esp+4]
pop dword ptr [esp]
call far cs:[BFFC9734]
...
015F:BFF79734 dd 000003C8h ; offset
dw 003Bh ; selector
...
003B:03C8 int 30h
...
где service-number -- номер сервиса, например 0x002A0010 для INT 21, 0x002A0029 для INT 31, и так далее. С номерами VxD-callов эти сервисы не имеют ничего общего. Найти полный список соответствий всяких номеров именам сервисов можно в Питреке. Под WinNT ноль вызывается из кернела посредством INT 2E. В Win9x в VMMе существует NTKERN.VXD, который реализует NT-евые сервисы. Называются они что-то типа ntoskrnl!DbkBreakPoint и вызываются так же -- через INT 2E. И у этого Int-а DPL=3, то есть его можно вызывать прямо из PE файла. Более того, в обработчике нет никаких проверок - откуда пришел вызов. INT 2E активно используется при загрузке Win9x. Можно вызывать INT 2E из PE файлов одним из следующих способов:
1.
mov eax, service-number
lea edx, stk
int 2Eh
stk: dd param1
dd param2
dd param3
...
2.
...
push param3
push param2
push param1
mov edx, esp
mov eax, service-number
int 2Eh
add esp, 4*n
При вызове INT 2E в EAX должен быть номер сервиса, а в EDX указатель на кадр стэка. Перед тем как вызвать соответствующую функцию, обработчик Int-а копирует данные из EDX в свой стэк.
← →
Morfein (2003-05-12 10:53) [3]>>NightAngel:
А в каком кольце защиты работает KERNEL32.DLL?
← →
Digitman (2003-05-12 11:37) [4]
> Morfein
вопрос некорректен.
ф-ции этой библиотеки работают в том кольце привелегий, в котором работает процесс, вызывающий эти ф-ции
Но ! В моменты, когда внутри вызванных ф-ций производятся обращения к программным шлюзам (те самые IntXX), возможна смена тек.кольца защиты (как в случае с Int2E под NT). Обработчик шлюзового прерывания будет работать с тем уровнем привелений, который задан соответствующим дескриптором в IDT. А дескрипторы в IDT инициализируются на этапе старта ОС. И инициализируются они отнюдь не в ходе инициализации библ-ки kernel32. Последняя - лишь оболочка для использования прикладными задачами "внутренних" ф-ций ядра, в т.ч. и ф-ций, предусмотренных "телами" программных шлюзов.
На то и шлюзы существуют !
← →
Ihor Osov'yak (2003-05-12 13:08) [5]Мой столь категоричный ответ обьяснялся тем, что во первых, вызов IntXX есть платформо-зависимый. Во вторых, очень трудно придумать прикладную задачу на делфи, где эту технику действительно оправдано использовать. В третьих, по постановке вопроса я сделал предположение, что вопрошающему еще рано погружаться в такие дебри. Что ж, я возможно и был не прав. Прошу извинения.
Зы- очень подробно о технике работы с Int2E написано в Sven B. Schreiber, Undocumented Windows 2000 secrets (издан также русский перевод в 2002, Свен Шрайберг, Недоументированные возможности Windows 2000)
← →
Игорь Шевченко (2003-05-12 13:34) [6]> Morfein © (12.05.03 10:53)
> >>NightAngel:
> А в каком кольце защиты работает KERNEL32.DLL?
В третьем
← →
Digitman (2003-05-12 15:51) [7]
> Игорь Шевченко
Ну почему обязательно - в третьем ?
Тот же Маздай, указанный автором в списке ОС, интересующих его в рамках вопроса, позволяет без особых проблем получить 0-й уровень привелегий. После получения оного ничто не мешает точно так же вызывать ф-ции kernel32, и при этом их код, получив управление, начнет свое выполнение c CPL = 0 )
← →
hunter (2003-05-17 23:11) [8]может кто вышлет примерчик как организовать доступ к диску?
← →
Игорь Шевченко (2003-05-19 11:56) [9]Digitman © (12.05.03 15:51)
И что от этого изменится ? AFAIK, функции Kernel32 разработаны с учетом работы в третьем кольце...
← →
Digitman (2003-05-19 13:39) [10]
> Игорь Шевченко
да ничего не изменится)... просто как-то уж больно странным показался твой пост про "в третьем"... я и уточнил - в каком кольце вызвали ф-цию, в таком она и выполняется (если не учитывать всякие проходы через шлюзы в ходе исполнения ей неких вложенных системных вызовов)
← →
Игорь Шевченко (2003-05-20 10:23) [11]Digitman © (19.05.03 13:39)
Сергей, мой пост "в третьем" подразумевал штатную работу kernel32.dll. Так как это библиотека пользователського режима то и работать ей штатно в третьем кольце защиты, не так ли ? А про получение привилегий и вызова функций это ты прав.
Страницы: 1 вся ветка
Форум: "Система";
Текущий архив: 2003.07.31;
Скачать: [xml.tar.bz2];
Память: 0.47 MB
Время: 0.012 c