sss
Специалист
Offline
|
|
« : 01-08-2003 08:47 » |
|
Кто скажет, если вызвать прерывание в 0 кольце что произойдет ?
|
|
|
Записан
|
while (8==8)
|
|
|
RXL
Технический
Администратор
Offline
Пол:
|
|
« Ответ #1 : 01-08-2003 09:01 » |
|
Прерывание В доке по процессору описаны варианты прерываний с/без смены уровня привилегий. Короче, нужно уточнение - чего ты хочешь узнать?
|
|
|
Записан
|
... мы преодолеваем эту трудность без синтеза распределенных прототипов. (с) Жуков М.С.
|
|
|
sss
Специалист
Offline
|
|
« Ответ #2 : 01-08-2003 09:16 » |
|
Прерывание В доке по процессору описаны варианты прерываний с/без смены уровня привилегий. Короче, нужно уточнение - чего ты хочешь узнать? Там вопрос есть про PCI, я щас не помню номера, называется прерывание - чтение конфигурационного просранства PCI.
|
|
|
Записан
|
while (8==8)
|
|
|
sss
Специалист
Offline
|
|
« Ответ #3 : 01-08-2003 09:17 » |
|
Лично меня интересует технолоgy установки обработчика...
|
|
|
Записан
|
while (8==8)
|
|
|
SlavaI
Главный специалист
Offline
|
|
« Ответ #4 : 04-08-2003 05:43 » |
|
А ты что в винде хочешь прерывание вызвать? Можно конечно свой обработчик написать и поместить на него указатель в IDT. И тогда при вызове int X будет вызван он. Но это немного против правил, так как самостоятельное изменение IDT в винде не предусмотренно, но и запретить это сделать тебе нельзя. А как должен выглядеть обработчик прерывания, что надо прописать в IDT, и что происходит со стеком при смене и без смены привилегий -читай в документации Intel.
|
|
|
Записан
|
|
|
|
sss
Специалист
Offline
|
|
« Ответ #5 : 05-08-2003 02:55 » |
|
Вопрос в том, будут ли работать прерывания (BIOS), или нет ?
|
|
|
Записан
|
while (8==8)
|
|
|
SlavaI
Главный специалист
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
Главный специалист
Offline
|
|
« Ответ #7 : 05-08-2003 06:48 » |
|
В ядре есть ф-ция Ke386CallBios , можешь ее дизассемблировать и посмотреть что она делает, может тебе поможет, там что-то с режимом виртуального 86 связано. Упоминание об этой ф-ции есть только тут http://www.ntdev.org/archive/ntdev9710/msg0093.html
|
|
|
Записан
|
|
|
|
sss
Специалист
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
Главный специалист
Offline
|
|
« Ответ #9 : 06-08-2003 07:11 » |
|
Найденные тобой шлюзы задач предназначены для обеспечения переключения задач в момент показа BSOD и скидывания дампа ядра. Помогите сделать дизасм.
А ты отладчик ядра хоть какой нибудь себе поставь(SoftIce, WinDbg, i386kd.exe). Для дизасма можно использовать livekd, он запускает отладчик на одной машине передавая дамп ядра. Где скачать файлы символьных id's (symbolsx.exe + symbols.cab)
Что за имена symbols? Это кто? Символьные файлы на сайте Microsoft.
|
|
|
Записан
|
|
|
|
SlavaI
Главный специалист
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
Специалист
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
Главный специалист
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
Специалист
Offline
|
|
« Ответ #13 : 06-08-2003 09:32 » |
|
SlavaI спасибо.
|
|
|
Записан
|
while (8==8)
|
|
|
sss
Специалист
Offline
|
|
« Ответ #14 : 07-08-2003 08:56 » |
|
Пробовал дизассемблеры. Не получилось в WinDbg. Ему подовай exe или crash dump. Вспомнил про sourcer. Ложу кусок памяти в файл, и в sourcer'e задаю режим "кусок кода" из файла. Староват правда. В режиме директивы .486p получается вначале нечто похожее что и у SlavaI. Дальше - херня. Кто скажет, какие "офицальные" минимальные системные требования у WIN2000 ? И кто еще может подобно sourcer дизасм кусков делать, только поновее?
|
|
|
Записан
|
while (8==8)
|
|
|
SlavaI
Главный специалист
Offline
|
|
« Ответ #15 : 07-08-2003 09:39 » |
|
какие "офицальные" минимальные системные требования у WIN2000
У меня есть машинка Celeron 300 МГц, 96 Мб памяти. Нормально работает Win200 Server. Для экспериментов достаточно.
|
|
|
Записан
|
|
|
|
|
SlavaI
Главный специалист
Offline
|
|
« Ответ #17 : 08-08-2003 09:32 » |
|
Для исследования дампа WinDBG поудобнее. Все таки графический интерфейс есть, а команды он воспринимает те же что и i386kd.exe.
|
|
|
Записан
|
|
|
|
sss
Специалист
Offline
|
|
« Ответ #18 : 12-08-2003 02:53 » |
|
SlavaI, учту
|
|
|
Записан
|
while (8==8)
|
|
|
sss
Специалист
Offline
|
|
« Ответ #19 : 14-08-2003 07:39 » |
|
Настроил два компа на debug по null modem (i386kd). Подскажите, кроме передачи дампа, можно debuggiть ядро на лету ? Может какие другие отладчики имеются с такой возможностью ? P.S: был атакован msblast. MS Server 2000 не рушился в ресет, но вирус производил отказ службы svchost со всеми вытекающими последствиями. Во внутреннюю сеть не пролез.
|
|
|
Записан
|
while (8==8)
|
|
|
SlavaI
Главный специалист
Offline
|
|
« Ответ #20 : 14-08-2003 07:49 » |
|
Подскажите, кроме передачи дампа, можно debuggiть ядро на лету ?
Он для этого и предназначен. Никакой дамп он не передает. Посмотри список команд- там есть break point. Отладка работающего ядра- это и есть работа для i386kd или WinDbg. Читай help к дебагеру. Есть еще SoftIce, работает на одном компе, но ограничен в возможностях по сравнению с i386kd или WinDbg. вирус производил отказ службы svchost
Вобще-то аварийный останов службы RPC. Svchost- это прога которая хостит разные службы, написанные в виде dll. В ресет уходит только XP из-за остановки службы безопасности, на 2k она не останавливается, хотя если самому ее прибить, то и 2k перегрузится.
|
|
|
Записан
|
|
|
|
sss
Специалист
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
Главный специалист
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
Специалист
Offline
|
|
« Ответ #23 : 14-08-2003 08:47 » |
|
... там для ядра 3 компа нужно! ЗАЧЕМ ?
|
|
|
Записан
|
while (8==8)
|
|
|
SlavaI
Главный специалист
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
Специалист
Offline
|
|
« Ответ #25 : 14-08-2003 09:02 » |
|
ёмоё, у меня документ по старту дебугера для win 3.51 ! Вот я тупость :oops:. SlavaI, у меня все это хозяйство дома, а смесь такая, потому что денег на второй нормальный комп нет Попробую как ты написал, завтра раскажу....
|
|
|
Записан
|
while (8==8)
|
|
|
sss
Специалист
Offline
|
|
« Ответ #26 : 14-08-2003 09:10 » |
|
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
Главный специалист
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
Специалист
Offline
|
|
« Ответ #29 : 18-08-2003 04:27 » |
|
Это я был выше...
|
|
|
Записан
|
while (8==8)
|
|
|
|