Форум программистов «Весельчак У»
  *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

  • Рекомендуем проверить настройки временной зоны в вашем профиле (страница "Внешний вид форума", пункт "Часовой пояс:").
  • У нас больше нет рассылок. Если вам приходят письма от наших бывших рассылок mail.ru и subscribe.ru, то знайте, что это не мы рассылаем.
   Начало  
Наши сайты
Помощь Поиск Календарь Почта Войти Регистрация  
 
Страниц: [1] 2 3  Все   Вниз
  Печать  
Автор Тема: Кто скажет, если вызвать прерывание в 0 кольце ...  (Прочитано 78094 раз)
0 Пользователей и 13 Гостей смотрят эту тему.
sss
Специалист

ru
Offline Offline

« : 01-08-2003 08:47 » 

Кто скажет, если вызвать прерывание в 0 кольце что произойдет ?
Записан

while (8==8)
RXL
Технический
Администратор

ru
Offline Offline
Пол: Мужской

WWW
« Ответ #1 : 01-08-2003 09:01 » 

Прерывание  Отлично
В доке по процессору описаны варианты прерываний с/без смены уровня привилегий.
Короче, нужно уточнение - чего ты хочешь узнать?
Записан

... мы преодолеваем эту трудность без синтеза распределенных прототипов. (с) Жуков М.С.
sss
Специалист

ru
Offline Offline

« Ответ #2 : 01-08-2003 09:16 » 

Цитата: RXL
Прерывание  Отлично
В доке по процессору описаны варианты прерываний с/без смены уровня привилегий.
Короче, нужно уточнение - чего ты хочешь узнать?


Там вопрос есть про PCI, я щас не помню номера, называется прерывание - чтение конфигурационного просранства PCI.
Записан

while (8==8)
sss
Специалист

ru
Offline Offline

« Ответ #3 : 01-08-2003 09:17 » 

Лично меня интересует технолоgy установки обработчика...
Записан

while (8==8)
SlavaI
Главный специалист

ru
Offline Offline

« Ответ #4 : 04-08-2003 05:43 » 

А ты что в винде хочешь прерывание вызвать?
Можно конечно свой обработчик написать и поместить на него указатель в IDT. И тогда при вызове int X будет вызван он. Но это немного против правил, так как самостоятельное изменение IDT в винде не предусмотренно, но и запретить это сделать тебе нельзя.
А как должен выглядеть обработчик прерывания, что надо прописать в IDT, и что происходит со стеком при смене и без смены привилегий -читай в документации Intel.
Записан
sss
Специалист

ru
Offline Offline

« Ответ #5 : 05-08-2003 02:55 » 

Вопрос в том, будут ли работать прерывания (BIOS), или нет ?
Записан

while (8==8)
SlavaI
Главный специалист

ru
Offline Offline

« Ответ #6 : 05-08-2003 05:07 » 

Цитата

Вопрос в том, будут ли работать прерывания (BIOS), или нет ?


Прерывания BIOS в основном для реального режима(16 разрядный режим), а винда переводит процессор в защищенный режим(32 разрядный), попытка выполнить подпрограмму обработки прерывания для реального режима в защищенном однозначно обрушит систему. Тем не менее в BIOS есть точки входа для вызова 32 разрядным подпрограмм, но по каким адресам они расположены я не знаю- надо читать документацию по ACPI и на BIOS.
Вывод такой- вызывать прерывания для работы с PCI, описанные в книжках, нельзя так как это 16 разрядные программы и вызов их из защищенного режима невозможен по двум причинам-
1) Указатели в таблице IDT не указывают на них и попытка вызова int N приведет не к вызову этой подпрограммы, а к вызову одного из обработчиков, зарегистрированных операционной системой, так как таблицу IDT в защищенном режиме создает ОС, в то время как в реальном режиме таблица указателей на обработчики прерываний находится в начале физической памяти и указатели на обработчики BIOS прописывает сама BIOS в момент загрузки.
2) Выполнение 16 разрядных обработчиков прерываний для реального режима в защищенном режиме невозможно.
Записан
SlavaI
Главный специалист

ru
Offline Offline

« Ответ #7 : 05-08-2003 06:48 » 

В ядре есть ф-ция Ke386CallBios , можешь ее дизассемблировать и посмотреть что она делает, может тебе поможет, там что-то с режимом виртуального 86 связано. Упоминание об этой ф-ции есть только тут
http://www.ntdev.org/archive/ntdev9710/msg0093.html
Записан
sss
Специалист

ru
Offline Offline

« Ответ #8 : 06-08-2003 06:36 » 

Конечно я все понимаю (это из про PCI)! Но я еще не со всеми BSOD ознакомился  8) .
Вызов INT 1A (XX) -> смерть без BSOD, аналог reset   Здесь была моя ладья... .

стал копать дескрипторы в IDT. [MS 2000 Server ]
(dec)
2,8,18 -  селекторы TSS (шлюзы задач)
32 - 41 - не определены
остальные все в селекторе GDT[8]. Ниже на примере 1B.
Код:

********************** Свободный выбор шлюза IDT по номеру вектора**********************


************************ШЛЮЗ ПРЕРЫВАНИЯ (INTERRUPT GATE)386+ [E]************************

  SELECTOR = 00000008h                        //селектор целевого сегмента             
    OFFSET = 8046868Fh                        //смещение точки входа в сегменте         
       DPL = 00000000                         //уровень привилегий дескриптора         
 (P)RESENT = (1) отображен                    //присутствие в RAM                       

Вариант1. (значение selector = 400h GDT[8])
***************** Свободный выбор дескриптора по индексу селектора GDT *****************
*************************************** СЕЛЕКТОР ***************************************
    BINARY = 0000000001000000                 //двоично                                 
       HEX = 00000040h                        //шестнадцатирично                       
       RPL = 00000000                         //запрашиваемый уровень привилегий       
     TABLE = глобальная                       //используемая таблица дескрипторов       
     INDEX = 00000008h                        //индекс в таблице дескрипторов           


*******************************ДЕСКРИПТОР СЕГМЕНТА ДАННЫХ*******************************

      BASE = 00000400h                        //база сегмента                           
     LIMIT = 0000FFFFh                        //предел сегмента                         
       DPL = 00000003                         //уровень привилегий дескриптора         
   (W)RITE = (1) разрешено                    //разрешение записи в сегмент             
  (E)XPAND = (0) вверх(data)                  //направление расширяемости               
 (P)RESENT = (1) отображен                    //присутствие в RAM                       
 (G)RANULA = (0) в байтах                     //гранулярность                           
   (B)OUND = (0) 64 кБ                        //максимальный размер сегмента

Вариант2. (значение selector = 8h GDT[1])
***************** Свободный выбор дескриптора по индексу селектора GDT *****************
*************************************** СЕЛЕКТОР ***************************************
    BINARY = 0000000000001000                 //двоично                                 
       HEX = 00000008h                        //шестнадцатирично                       
       RPL = 00000000                         //запрашиваемый уровень привилегий       
     TABLE = глобальная                       //используемая таблица дескрипторов       
     INDEX = 00000001h                        //индекс в таблице дескрипторов           


******************************ДЕСКРИПТОР КОДОВОГО СЕГМЕНТА******************************

      BASE = 00000000h                        //база сегмента                           
     LIMIT = FFFFFFFFh                        //предел сегмента                         
       DPL = 00000000                         //уровень привилегий дескриптора         
 (E)XEREAD = (1) разрешено                    //разрешение чтения для выполнения       
 (C)ONFORM = (0)CPL = DPL                     //подчиненность                           
 (P)RESENT = (1) отображен                    //присутствие в RAM                       
 (G)RANULA = (1) в 4 кБ стр                   //гранулярность                           
 (D)EFSIZE = (1) 32 бит                       //размер адресов и операндов по умолчанию

Какой из вариантов использовать дальше? Вообще, по логике 2.
Тогда смотрим CS selector в ядре -> 08h. Передаем управление на
8046868Fh и получаем наш reset.

Так, дамп по  8046868Fh (100 байт).
-------------------------------------------------------------
 Адрес:  -> 00 01 02 03 04 05 06 07 08 09 0A 0B
-------------------------------------------------------------
8046868F -> 6A 00 66 C7 44 24 02 00 00 55 53 56
8046869B -> 57 0F A0 BB 30 00 00 00 66 8E E3 64
804686A7 -> 8B 1D 00 00 00 00 53 83 EC 04 50 51
804686B3 -> 52 1E 06 0F A8 66 B8 23 00 83 EC 30
804686BF -> 66 8E D8 66 8E C0 8B EC F7 44 24 70
804686CB -> 00 00 02 00 75 96 FC F6 05 50 F0 DF
804686D7 -> FF FF 0F 85 04 FF FF FF FB B8 0F 00
804686E3 -> 00 00 E9 A6 05 00 00 90 F7 45 70 00
804686EF -> 00 02 00 75 0D F7 45 6C 01 00 00 00
804686FB -> 0F 84 E6 00 00 00 0F 21 C3 0F 21 C9
80468707 -> 0F 21 D7 89 5D 18 89 4D 1C 89 7D 20
80468713 -> 0F 21 DB 0F 21 F1 0F 21 FF 89 5D 24
8046871F -> 89 4D 28 BB 00 00 00 00 89 7D 2C 0F
8046872B -> 23 FB 64 8B 3D 20 00 00 00 8B 9F F8
80468737 -> 02 00 00 8B 8F FC 02 00 00 0F 23 C3
80468743 -> 0F 23 C9 8B 9F 00 03 00 00 8B 8F 04
8046874F -> 03 00 00 0F 23 D3 0F 23 D9 8B 9F 08
8046875B -> 03 00 00 8B 8F 0C 03 00 00 0F 23 F3
80468767 -> 0F 23 F9 EB 7B 8D 49 00 8B 85 84 00
80468773 -> 00 00 8B 9D 88 00 00 00 8B 4D 7C 8B
8046877F -> 95 80 00 00 00 66 89 45 50 66 89 5D
8046878B -> 30 66 89 4D

Помогите сделать дизасм.
Где скачать файлы символьных id's (symbolsx.exe + symbols.cab) ?
Помогите найти, пожалуйста !
« Последнее редактирование: 19-11-2007 16:41 от Алексей1153++ » Записан

while (8==8)
SlavaI
Главный специалист

ru
Offline Offline

« Ответ #9 : 06-08-2003 07:11 » 

Найденные тобой шлюзы задач предназначены для обеспечения переключения задач в момент показа BSOD и скидывания дампа ядра.

Цитата

Помогите сделать дизасм.


А ты отладчик ядра хоть какой нибудь себе поставь(SoftIce, WinDbg, i386kd.exe). Для дизасма можно использовать livekd, он запускает отладчик на одной машине передавая дамп ядра.

Цитата

Где скачать файлы символьных id's (symbolsx.exe + symbols.cab)


Что за имена symbols? Это кто?
Символьные файлы на сайте Microsoft.
Записан
SlavaI
Главный специалист

ru
Offline Offline

« Ответ #10 : 06-08-2003 07:17 » 

Цитата

8046868F -> 6A 00 66 C7 44 24 02 00 00 55 53 56
8046869B -> 57 0F A0 BB 30 00 00 00 66 8E E3 64
804686A7 -> 8B 1D 00 00 00 00 53 83 EC 04 50 51
804686B3 -> 52 1E 06 0F A8 66 B8 23 00 83 EC 30
804686BF -> 66 8E D8 66 8E C0 8B EC F7 44 24 70
804686CB -> 00 00 02 00 75 96 FC F6 05 50 F0 DF
804686D7 -> FF FF 0F 85 04 FF FF FF FB B8 0F 00
804686E3 -> 00 00 E9 A6 05 00 00 90 F7 45 70 00
804686EF -> 00 02 00 75 0D F7 45 6C 01 00 00 00
804686FB -> 0F 84 E6 00 00 00 0F 21 C3 0F 21 C9
80468707 -> 0F 21 D7 89 5D 18 89 4D 1C 89 7D 20
80468713 -> 0F 21 DB 0F 21 F1 0F 21 FF 89 5D 24
8046871F -> 89 4D 28 BB 00 00 00 00 89 7D 2C 0F
8046872B -> 23 FB 64 8B 3D 20 00 00 00 8B 9F F8
80468737 -> 02 00 00 8B 8F FC 02 00 00 0F 23 C3
80468743 -> 0F 23 C9 8B 9F 00 03 00 00 8B 8F 04
8046874F -> 03 00 00 0F 23 D3 0F 23 D9 8B 9F 08
8046875B -> 03 00 00 8B 8F 0C 03 00 00 0F 23 F3
80468767 -> 0F 23 F9 EB 7B 8D 49 00 8B 85 84 00
80468773 -> 00 00 8B 9D 88 00 00 00 8B 4D 7C 8B
8046877F -> 95 80 00 00 00 66 89 45 50 66 89 5D
8046878B -> 30 66 89 4D


Это начало стандартного обработчика. Сравни со своим
804dcf4c 6a00             push    0x0
804dcf4e 66c74424020000   mov     word ptr [esp+0x2],0x0
804dcf55 55               push    ebp
804dcf56 53               push    ebx
804dcf57 56               push    esi
804dcf58 57               push    edi
804dcf59 0fa0             push    fs
804dcf5b bb30000000       mov     ebx,0x30
Записан
sss
Специалист

ru
Offline Offline

« Ответ #11 : 06-08-2003 08:50 » 

1.Спасибо SlavaI за дизасм. Все они у меня есть. Пользоваться просто не приходилось. Они могут дизассемблировать дамп? Или сохранить в com файл ?

2.Про символы: из MSDN, диск -> Windows 2000 Customer Support - Diagnostic Tools. Я по сайтам лазил ни фига не нашел Жаль . Карма какая то. Шрайбикус по ним книгу писал. HELP MY!

3. Выходит на обработке INT XX находится sysmurder ?
Или я просто не прав (см. ниже)
Код:

  mov ax, 0B101h
  pushf
  call 8046868Fh // надо jmp, pushd ?
Записан

while (8==8)
SlavaI
Главный специалист

ru
Offline Offline

« Ответ #12 : 06-08-2003 09:17 » 

Цитата

Они могут дизассемблировать дамп?


WinDbg и i386kd.exe могут. Livekd делает дамп на работающей системе и подсовывает его i386kd.exe

Цитата

Про символы


Во первых если в WinDbg прописать сервер символов(читай symbol server ) то он сам с сайта майкрософта символы будет качать- читай тут http://www.microsoft.com/whdc/ddk/debugging/symbols.mspx.

Полный набор можно взять вот тут
http://www.microsoft.com/whdc/ddk/debugging/symbolpkg.mspx#Windows%20symbol%20packages
только он больше 100 Мб.

Цитата

Выходит на обработке INT XX находится sysmurder


А что такое sysmurder, убица системы? Вобще то некорые прерывания можно вызывать- int 2e  - вызов системных сервисов например. Чтобы самому вызвать обработчик прерывания/исключения(не с помощью int) надо стек сделать такой же как при нормальном вызове(то есть если со сменой привилегий- то там указатель на старый стек сидит), смотри в мануале к процам что в стеке быть должно, а то при возврате из процедуры система ляжет, так как будет изуродован стек.
При вызове с использованием call учти что он адрес возврата в стек заносит- посмотри как там это согласуется со стеком при вызове прерывания, где там адрес возврата. Мне уже влом мануалы читать по этому делу.
Записан
sss
Специалист

ru
Offline Offline

« Ответ #13 : 06-08-2003 09:32 » 

SlavaI спасибо.
Записан

while (8==8)
sss
Специалист

ru
Offline Offline

« Ответ #14 : 07-08-2003 08:56 » 

Пробовал дизассемблеры. Не получилось в WinDbg. Ему подовай exe или crash dump. Вспомнил про sourcer. Ложу кусок памяти в файл, и в sourcer'e  задаю режим "кусок кода" из файла. Староват правда. В режиме директивы .486p получается вначале нечто похожее что и у SlavaI. Дальше - херня. Кто скажет, какие "офицальные" минимальные системные требования у WIN2000 ? И кто еще может подобно  sourcer дизасм кусков делать, только поновее?
Записан

while (8==8)
SlavaI
Главный специалист

ru
Offline Offline

« Ответ #15 : 07-08-2003 09:39 » 

Цитата

какие "офицальные" минимальные системные требования у WIN2000


У меня есть машинка Celeron 300 МГц, 96 Мб памяти. Нормально работает Win200 Server. Для экспериментов достаточно.
Записан
sss
Специалист

ru
Offline Offline

« Ответ #16 : 08-08-2003 08:43 » 

SlavaI, спасибо огромное за подсказку про http://www.microsoft.com/whdc/ddk/debugging/symbolpkg.mspx#Windows%20symbol%20packages . Настроил все и теперь пользуюсь паталогоанатомом i386kd.exe. Хотел из дома дамп обработчика показать, да что-то заглючил CDRW, не читает.
в общем там тупик. Проверки режима работы и "обрушивающий прыжок".
Записан

while (8==8)
SlavaI
Главный специалист

ru
Offline Offline

« Ответ #17 : 08-08-2003 09:32 » new

Для исследования дампа WinDBG поудобнее. Все таки графический интерфейс есть, а команды он воспринимает те же что и i386kd.exe.
Записан
sss
Специалист

ru
Offline Offline

« Ответ #18 : 12-08-2003 02:53 » 

SlavaI, учту
Записан

while (8==8)
sss
Специалист

ru
Offline Offline

« Ответ #19 : 14-08-2003 07:39 » 

Настроил два компа на debug по null modem (i386kd). Подскажите, кроме передачи дампа, можно debuggiть ядро на лету ? Может какие другие отладчики имеются с такой возможностью ?
P.S: был атакован msblast. MS Server 2000 не рушился в ресет, но вирус производил отказ службы svchost со всеми вытекающими последствиями. Во внутреннюю сеть не пролез.
Записан

while (8==8)
SlavaI
Главный специалист

ru
Offline Offline

« Ответ #20 : 14-08-2003 07:49 » 

Цитата

Подскажите, кроме передачи дампа, можно debuggiть ядро на лету ?


Он для этого и предназначен. Никакой дамп он не передает. Посмотри список команд- там есть break point. Отладка работающего ядра- это и есть работа для i386kd или WinDbg. Читай help к дебагеру.
Есть еще SoftIce, работает на одном компе, но ограничен в возможностях по сравнению с  i386kd или WinDbg.

Цитата

вирус производил отказ службы svchost


Вобще-то аварийный останов службы RPC. Svchost- это прога которая хостит разные службы, написанные в виде dll. В ресет уходит только XP из-за остановки службы безопасности, на 2k она не останавливается, хотя если самому ее прибить, то и 2k перегрузится.
Записан
sss
Специалист

ru
Offline Offline

« Ответ #21 : 14-08-2003 08:17 » 

SlavaI, помоги !
Условия такие.
Один комп -> nt4 c проинсталированным полностью DDK 2000 и символами.
Второй -> 2000 prof c проинсталированным полностью DDK 2000 и символами.
На 2000 Prof -> boot.ini /debug /debugport=com2 и т.д.
На nt4 -> _NT_DEBUG_PORT и т.д.
Запускаю на nt4 -> remote /s "i386kd -b" debug
Запускаю на 2000 prof -> remote /c sub01 debug  // sub01 - имя соответственно nt4 компа

Начинается сеанс - простое echo в обоих направлениях? Что не так ?
Записан

while (8==8)
SlavaI
Главный специалист

ru
Offline Offline

« Ответ #22 : 14-08-2003 08:41 » 

У тебя какая-то смесь бульдога с носорогом. Зачем тебе remote(там для ядра 3 компа нужно!)?
Поставил символьные файлы на NT4, запустил Win2k с /debug /debugport=com2 параметрами(ставить символьные файлы на Win2k не надо, все равно не использует). Запустил на NT4 дебаггер
kd [-y SymbolPath] -k com:port=ComPort,baud=BaudRate
или
windbg [-y SymbolPath] -k com:port=ComPort,baud=BaudRate
И наслаждаешься.
Вобще-то это все в хелпе к дебагерам написано.
Дебагер работает по такому принципу- он передает команды на отлаживаемый комп по кабелю, там их принимает отладчик, встроенный в ядро, и передает результат отработки команды обратно. Символьные файлы нужны на том компе, где i386kd или WinDBG запущены, так как с помощью этих файлов они анализируют пришедшие к ним данные.
Записан
sss
Специалист

ru
Offline Offline

« Ответ #23 : 14-08-2003 08:47 » 

Цитата: SlavaI
... там для ядра 3 компа нужно!


ЗАЧЕМ ?
Записан

while (8==8)
SlavaI
Главный специалист

ru
Offline Offline

« Ответ #24 : 14-08-2003 08:58 » 

Цитата

ЗАЧЕМ ?


Remote kernel-mode debugging involves three computers: the client, the server, and the target computer. The target computer is the machine to be debugged. The server is a machine with a kernel debugger, located at the same physical location as the target computer. The client is the machine that will remotely control the debugging session. See Configuring Hardware for Kernel-Mode Debugging for details on the connection between the server and the target computer.

Help надо читать.
Записан
sss
Специалист

ru
Offline Offline

« Ответ #25 : 14-08-2003 09:02 » 

ёмоё, у меня документ по старту дебугера для win 3.51 ! Вот я тупость  :oops:.
SlavaI, у меня все это хозяйство дома, а смесь такая,  потому что денег на второй нормальный комп нет  Вот такой я вот
Попробую как ты написал, завтра раскажу....
Записан

while (8==8)
sss
Специалист

ru
Offline Offline

« Ответ #26 : 14-08-2003 09:10 » 

Цитата: SlavaI


Remote kernel-mode debugging involves three computers: the client, the server, and the target computer. The target computer is the machine to be debugged. The server is a machine with a kernel debugger, located at the same physical location as the target computer. The client is the machine that will remotely control the debugging session. See Configuring Hardware for Kernel-Mode Debugging for details on the connection between the server and the target computer.


Это не факт. Это похоже про отладку, которой будет управлять Microsoft engineer.
Записан

while (8==8)
SlavaI
Главный специалист

ru
Offline Offline

« Ответ #27 : 14-08-2003 09:37 » 

Цитата

Это не факт. Это похоже про отладку, которой будет управлять Microsoft engineer.


Я не пойму, зачем эту бадягу разводить. Какая разница кто будет управлять. Эта утилита для сети предназначена, что-то там передает на третий комп, а ты через нуль-модемный кабель компы соединил, в этом случае надо запустить отладчик и все- не нужен никакой remote!
Записан
Anonymous
Гость
« Ответ #28 : 18-08-2003 04:20 » 

Дело было в долбаном null modem кабеле.
У меня было
     2   3
     3   2
     4   7
     5   8
     7   5
     6   6
     8   1
     20   4
     20   4
А надо:
     2    2
     3         3
     6         4
     7         5
     20       6
     5         7
     4         8

Простите за бадягу  Жаль ...
Записан
sss
Специалист

ru
Offline Offline

« Ответ #29 : 18-08-2003 04:27 » 

Это я был выше...
Записан

while (8==8)
Страниц: [1] 2 3  Все   Вверх
  Печать  
 

Powered by SMF 1.1.21 | SMF © 2015, Simple Machines