Поиск:

Ответ в темуСоздание новой темы Создание опроса
> аппаратные прерывания в dos, :::::::::::::::::::::::::::::::::::::::: 
V
    Опции темы
xach
  Дата 10.1.2008, 19:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



всем превед!
я написал резидентную программу, которая выводит на экран список номеров аппаратных прерываний у которых есть обработчики. Делал я это следующим образом:
1 - считывал по номеру вектора прерывания 4-х байтный адрес обработчика в формате сегмент-смещение
2 - считывал первый байт обработчика и сравнивал его с опкодом iret. Если первый оператор обработчика - iret, значит это заглушка и обработчика не существует, в противном случае существует

а теперь вопрос:
как узнать какие обработчики аппаратных прерываний есть в системе средствами dos, bios или иными (может просто где-то в памяти лежит)? В общем проверить работоспособность программы 

мерси за внимание!
PM MAIL   Вверх
Akina
Дата 10.1.2008, 22:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Советчик
****


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

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



Цитата(xach @  10.1.2008,  20:15 Найти цитируемый пост)
 Делал я это следующим образом:

Этот алгоритм неправильный. Заглушка АППАРАТНОГО прерывания в принципе не может быть голым IRET.

Цитата(xach @  10.1.2008,  20:15 Найти цитируемый пост)
я написал резидентную программу

а зачем - резидентную?

Цитата(xach @  10.1.2008,  20:15 Найти цитируемый пост)
как узнать какие обработчики аппаратных прерываний есть в системе 

Вручную.


--------------------
 О(б)суждение моих действий - в соответствующей теме, пожалуйста. Или в РМ. И высшая инстанция - Администрация форума.

PM MAIL WWW ICQ Jabber   Вверх
xach
Дата 10.1.2008, 22:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Цитата(Akina @  10.1.2008,  22:16 Найти цитируемый пост)
Цитата(xach @  10.1.2008,  20:15 Найти цитируемый пост)
 Делал я это следующим образом:

Этот алгоритм неправильный. Заглушка АППАРАТНОГО прерывания в принципе не может быть голым IRET.

нужно ещё сбрасывать заявку? 
Код

mov al,20h
out 20h,al


Цитата(Akina @  10.1.2008,  22:16 Найти цитируемый пост)
Цитата(xach @  10.1.2008,  20:15 Найти цитируемый пост)
я написал резидентную программу

а зачем - резидентную?

такое задание дали в универе =)

Цитата(Akina @  10.1.2008,  22:16 Найти цитируемый пост)
Цитата(xach @  10.1.2008,  20:15 Найти цитируемый пост)
как узнать какие обработчики аппаратных прерываний есть в системе 

Вручную. 

я понимаю, что не само всё получится. хотелось бы поконкретнее...
PM MAIL   Вверх
SABROG
Дата 10.1.2008, 22:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Hacker
****


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

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



Может быть я путаю, попробуй функцию 35h (ah=35h, al=номер прерывания, 0-ffh). Результатом в bx будем вектор прерывания.

На всякий случай вот тебе TechHelp - http://alexfru.narod.ru/miscdocs/techhelp/techhelp.zip


--------------------
Национальная группа Russian Federation на QtCentre.
PM MAIL   Вверх
xach
Дата 10.1.2008, 22:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



SABROG, не...мне не нужно получать сам вектор...с этим проблем нет...про эту функцию я знаю. проблема в методе определения того, что в системе присутствует обработчик аппаратного прерывания (08-0fh and 70-77h) ...вотъ...я думал, что с iret - правильный подход...похоже - нет =(
PM MAIL   Вверх
xach
Дата 10.1.2008, 22:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



вотъ...откопал в талмуде о прерываниях

INT 21 - DOS 2+ - IOCTL - GET DEVICE INFORMATION
    AX = 4400h
    BX = handle
Return: CF clear if successful
        DX = device information word (see #01423)
        AX destroyed
    CF set on error
        AX = error code (01h,05h,06h) (see #01680 at AH=59h/BX=0000h)


с помощью этой функции (судя по названию =) ) можно получить инфу об устройствах. но что вписывать в поле handle (bx)?..а так можно было бы по ошибке (CF=1) определить отсутствие в системе устройства
PM MAIL   Вверх
SABROG
Дата 10.1.2008, 23:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Hacker
****


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

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



Сомневаюсь что это для любых устройств.

А можно почитать задачу слово в слово ?

Просто все прерывания так или иначе имеют заглушки. Причем они скорее всего разные для ДОСа и Windows.


--------------------
Национальная группа Russian Federation на QtCentre.
PM MAIL   Вверх
Akina
Дата 10.1.2008, 23:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Советчик
****


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

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



SABROG дал правильный путь.
Во-первых, ты можешь определить сам факт наличия или отсутствия обработчика. При отсутствии вектор будет (во всяком случае должен быть) нулевой.
Во-вторых, если обработчик есть, ты можешь определить, находится обработчик в ROM компьютера, ROM расширения или в RAM. По адресу точки входа.
В третьих, если обработчик в RAM, ты можешь определить, установлен он как драйвер устройства или как резидентный обработчик. И даже, возможно, определить имя модуля, из которого он установлен. По принадлежности MCB.

Вот, пожалуй, и все...


--------------------
 О(б)суждение моих действий - в соответствующей теме, пожалуйста. Или в РМ. И высшая инстанция - Администрация форума.

PM MAIL WWW ICQ Jabber   Вверх
xach
Дата 10.1.2008, 23:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Цитата(Akina @  10.1.2008,  23:39 Найти цитируемый пост)
При отсутствии вектор будет (во всяком случае должен быть) нулевой.

вы в этом уверены?..ведь процессор делает переход по факту аппаратного прерывания...представляю что получится если он перейдёт на адрес 0000h...

Цитата(Akina @  10.1.2008,  23:39 Найти цитируемый пост)
если обработчик есть, ты можешь определить, находится обработчик в ROM компьютера, ROM расширения или в RAM. По адресу точки входа.

а какой диапазон адресов ROM?

Цитата(Akina @  10.1.2008,  23:39 Найти цитируемый пост)
если обработчик в RAM, ты можешь определить, установлен он как драйвер устройства или как резидентный обработчик. И даже, возможно, определить имя модуля, из которого он установлен. По принадлежности MCB.

это лишнее (с учётом задачи)


SABROG, как таковой задачи нет, она была озвучена мне устно: определить у каких аппаратных прерываний есть обработчик.

Очень не корректно поставленная задача...скорее всего имелось ввиду отличить неиспользуемые устройства, от используемых. Всё для чистого dos.
PM MAIL   Вверх
SABROG
Дата 11.1.2008, 00:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Hacker
****


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

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



Цитата

вы в этом уверены?..ведь процессор делает переход по факту аппаратного прерывания...представляю что получится если он перейдёт на адрес 0000h...


Запусти ДОС и посмотри, ты же вроде написал вывод обработчиков ?

Под виндой то там все перехватывается. Если действительно будут нули, то твоя задача решена.

Вот распределение памяти, пните меня, если я ложанулся smile : http://www.citforum.ru/hardware/memory/mem_0402.shtml


--------------------
Национальная группа Russian Federation на QtCentre.
PM MAIL   Вверх
Akina
Дата 11.1.2008, 00:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Советчик
****


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

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



Цитата(SABROG @  11.1.2008,  01:16 Найти цитируемый пост)
пните меня, если я ложанулся 

Нет, не лажанулся, все верно. Но тут все крупными мазками, ему надо (?) более детально. С учетом массы спецификаций (см. напр. описание технологий QEMM), позволяющих переадресовывать блоки оперативной памяти в незанятую область верхней памяти и в видеопамять граф. режима (А000-В7FF).

Например, обработчик прерывания с адресом C200:0005 может быть как в ROM, так и в RAM. И в любом из этих случаев он может быть заглушкой.

Добавлено через 4 минуты и 10 секунд
Цитата(xach @  10.1.2008,  23:23 Найти цитируемый пост)
нужно ещё сбрасывать заявку? 
Код

mov al,20h
out 20h,al

Для CPU - да. А для FPU - само собой нет.


--------------------
 О(б)суждение моих действий - в соответствующей теме, пожалуйста. Или в РМ. И высшая инстанция - Администрация форума.

PM MAIL WWW ICQ Jabber   Вверх
xach
Дата 11.1.2008, 00:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



1 - я переправил прогу. теперь она выводит номера тех прерываний, у который пара сегмент:смещение (считанные по вектору) равны нулю
2 - загрузился с дискеты под дос

ни одного прерывания с парой 0000h:0000h нету...хотя устройства у меня не все (взять хотя бы стриммер)
PM MAIL   Вверх
Akina
Дата 11.1.2008, 09:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Советчик
****


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

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



xach напишите простейший код, который можно подсунуть вместо бут-сектора дискеты и выводящий текущее состояние векторов, что-то типа:

Код

org 7c00h
xor ax,ax
mov ds,ax
mov si,ax
mov di,ax
mov ax,0B800h
cld
lodsw
; convert dword to 4 ASCII hex-digits
type_dword:
stosb
inc DI
loop type_dword 4 times
mov al,":"
stosb
inc DI
; type vectors 00h-0Fh
halt

закатайте его в бут-сектор, загрузитесь и посмотрите состояние векторов. На момент старта ОС... 


--------------------
 О(б)суждение моих действий - в соответствующей теме, пожалуйста. Или в РМ. И высшая инстанция - Администрация форума.

PM MAIL WWW ICQ Jabber   Вверх
SABROG
Дата 11.1.2008, 09:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Hacker
****


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

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



Я тоже об этом думал, но все-таки таким образом не узнать какие вектора не будут никогда вызываться, потому что нет устройств которые генерировали бы IRQ. И потом я думаю никакой преподаватель не станет подобное задавать. Скорее всего где-то недопонимание.


--------------------
Национальная группа Russian Federation на QtCentre.
PM MAIL   Вверх
Akina
Дата 11.1.2008, 12:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Советчик
****


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

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



Цитата(SABROG @  11.1.2008,  10:52 Найти цитируемый пост)
нет устройств которые генерировали бы IRQ

что-о-о??? таймер-клавиатура-сопроцессор-прочая дрянь...


--------------------
 О(б)суждение моих действий - в соответствующей теме, пожалуйста. Или в РМ. И высшая инстанция - Администрация форума.

PM MAIL WWW ICQ Jabber   Вверх
Страницы: (3) Все [1] 2 3 
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Asm для Windows/DOS"
MAKCim
  • Проставьте несколько ключевых слов темы, чтобы её можно было легче найти.
  • Не забывайте пользоваться кнопкой КОД.
  • Телепатов на форуме нет! Задавайте чёткий, конкретный и полный вопрос. Указывайте полностью ошибки компилятора и компоновщика.
  • Новое сообщение должно иметь прямое отношение к разделу форума. Флуд, флейм, оффтопик запрещены.
  • Категорически запрещается обсуждение вареза, "кряков", взлома программ и т.д.

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, MAKCim.

 
 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Asm для Windows/Dos | Следующая тема »


 




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


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

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