21.10.2017, 04:20 [+3 UTC]
в нашей команде: 2 186 чел. | участники онлайн: 1 (рекорд: 21)

:: РЕГИСТРАЦИЯ

:: консультации

:: задать вопрос

:: все разделы

:: правила

:: новости

:: участники

:: доска почёта

:: форум

:: блоги

:: поиск

:: статистика

:: наш журнал

:: наши встречи

:: наша галерея

:: отзывы о нас

:: поддержка

:: руководство

Версия системы:
7.41 (25.02.2017)

Общие новости:
23.02.2017, 09:51

Форум:
20.10.2017, 23:24

Последний вопрос:
20.10.2017, 15:13

Последний ответ:
20.10.2017, 21:45

Последняя рассылка:
21.10.2017, 00:45

Писем в очереди:
0

Мы в соцсетях:

Наша кнопка:

RFpro.ru - здесь вам помогут!

Отзывы о нас:
27.05.2010, 15:29 »
Konstantin Shvetski
Спасибо за скорый и квалифицированный ответ [вопрос № 178693, ответ № 261713]
24.09.2010, 20:45 »
Flavi49
Снимаю шляпу. "Заставили" лентяя наконец почитать. [вопрос № 180001, ответ № 263165]
05.06.2013, 18:25 »
Александр Сергеевич
Спасибо!!! [вопрос № 187433, ответ № 272387]

РАЗДЕЛ • Assembler

Создание программ на языке Assembler.

[администратор рассылки: Лысков Игорь Витальевич (Старший модератор)]

Лучшие эксперты в этом разделе

Зенченко Константин Николаевич
Статус: Модератор
Рейтинг: 258
Лысков Игорь Витальевич
Статус: Старший модератор
Рейтинг: 183
Коцюрбенко Алексей aka Жерар
Статус: Мастер-Эксперт
Рейтинг: 88

Перейти к консультации №:
 

Консультация онлайн # 64791
Раздел: • Assembler
Автор вопроса: Logoff_
Отправлена: 29.11.2006, 18:13
Поступило ответов: 1

Уважаемые эксперты у меня такая проблема:
Требуется написать резидент который бы через определенный промежуток времени блокировал работу до указания пароля. У меня все готово только когда я пытаюсь вводить пароль (через 0ah) в обработчике 1ch или что-то считывать с клавиатуры компьютер просто напросто зависает. Немного поискав информацию, я увидел следующее:
"Поскольку программа INT 1cH выполняется во время низкоуровневого аппаратного прерывания, вы должны помнить, что система еще не сбросила контроллер прерываний и потому другие аппаратные прерывания, в том числе прерывание от клавиатуры, не будут происходить при работе INT 1cH (т.е. вы не получите ввода пользователя)"
Вопрос: Как же это преодолеть?
PS: Стек точно уравнен, и прерывания нигде не запрещаются

Состояние: Консультация закрыта

Ответ # 129366 от IceWolf

Здравствуйте, Logoff_!
Могу предложить следующее:
1)Использовать вместо 1Ch прерывание 8 :см. справочник helpassm(TECH help) http://www.kalashnikoff.ru/Assembler/prog/helpassm.exe
2)Раз нельзя работать с превываниями, сделаем вот что: После вызова 1Ch в стеке лежит адрес возврата(CS и IP и ещё flags register). Сохраняем его в памяти, подменяем на адрес своего кода(выполняется не в обработке 1Ch). Теперь после iret из 1Ch попадаем в наш код(вместо программы где произошло прерывание), делаем свои чёрные дела, восстанавливаем флаги, регистры и делаем jmp на ранее сохранённый адрес. Всё, вернулись в программу. Код, про который я сказал, можно поместить в том же обработчике 1Ch после iret.
Идею я изложил, надеюсь теперь справитесь.
С уважением, IceW0|f.

Приложение:


Консультировал: IceWolf
Дата отправки: 30.11.2006, 23:31

Рейтинг ответа:

0

[подробно]

Сообщение
модераторам

Отправлять сообщения
модераторам могут
только участники портала.
ВОЙТИ НА ПОРТАЛ »
регистрация »

Мини-форум консультации № 64791

Посетитель

ID: 388

# 1

= общий = | 30.11.2006, 00:41 | цитировать цитировать  | профиль профиль  |  отправить письмо в личную почту пейджер

Вешаешь дополнительный обработчик на 28h прерывание. В 1сh ставишь флаг. В 28h проверяешь флаг. Если стоит, сбрасываешь флаг, и запрашиваешь пароль.


Посетитель

ID: 27363

# 2

= общий = | 30.11.2006, 18:56 | цитировать цитировать  | профиль профиль  |  отправить письмо в личную почту пейджер

Спасибо, попробую.


Посетитель

ID: 27363

# 3

= общий = | 02.12.2006, 16:08 | цитировать цитировать  | профиль профиль  |  отправить письмо в личную почту пейджер

2Стас Извините, я могу ошибаться но насколько мне известно int 28h вызывается когда ДОС ничего не делает, точнее ждет вода пользователя. Внутри него нельзя использовать функции до 0сН включительно. Я не понимаю как мне запрашивать пароль. Прямым считыванием с буфера клавиатуры? мне не удалось это реализовать... Не могли бы Вы подробнее объяснить. Заранее спасибо


Посетитель

ID: 27363

# 4

= общий = | 02.12.2006, 16:41 | цитировать цитировать  | профиль профиль  |  отправить письмо в личную почту пейджер

2IceWolf Спасибо за совет. Но почему-то у меня не выходит это сделать.. Вот код обработчика int 1ch: Int_1Ch_proc proc pop _ip push _ip ;pop _cs ;pop _fl ;push _fl ;push _cs pushf call cs:[int_1ch_vect] finit fstcw Dat or Dat,0c00h fldcw Dat fld num1 fild result fmul frndint FILD count fcom fstsw ax sahf jz CheckPass mov ax,count inc ax mov Count,ax jmp @exit1c CheckPass: pop _tmp mov ax, offset @x push ax @exit1c: iret @x: mov ah,2 mov dl,'#' int 21h jmp cs:[_ip] Int_1Ch_vect dd ? count dw 0 num1 dd 18.2 Dat dw ? result dw ? _fl dw ? _cs dw ? _ip dw ? _tmp dw ? Int_1Ch_proc endp Код после метки @x почему-то не выполняется... при попытке заставить эту процедуру обрабатывать 08h при первом прохождении в некоторых местах экрана появляются разноцветные квадратики... Помогите пожалуйста разобраться.


Посетитель

ID: 388

# 5

= общий = | 04.12.2006, 00:48 | цитировать цитировать  | профиль профиль  |  отправить письмо в личную почту пейджер

Клавиатурное прерывание int10h

 

Возможность оставлять сообщения в мини-форумах консультаций доступна только после входа в систему.
Воспользуйтесь кнопкой входа вверху страницы, если Вы зарегистрированы или пройдите простую процедуру регистрации на Портале.

Яндекс Rambler's Top100

главная страница | поддержка | задать вопрос

Время генерирования страницы: 0.13638 сек.

© 2001-2017, Портал RFPRO.RU, Россия
Авторское право: ООО "Мастер-Эксперт Про"
Калашников О.А.  |  Гладенюк А.Г.
Версия системы: 7.41 от 25.02.2017
Бесплатные консультации онлайн