Отправляет email-рассылки с помощью сервиса Sendsay
  Все выпуски  

RusFAQ.ru: программирование на языке Assembler


Информационный Канал Subscribe.Ru

РАССЫЛКИ ПОРТАЛА RUSFAQ.RU

/ КОМПЬЮТЕРЫ И ПО / Языки программирования / Assembler

Выпуск № 85
от 15.03.2005, 18:40

Администратор:Калашников О.А.
В номере:Вопросов: 1, Ответов: 2


Вопрос № 18056: Пожлуйста, помогите, мне очень нужно хорошо разобраться в этом вопросе... В приложении пример процедуры резидента из 15-ого выпуска рассылки (хотел сунуть весь, но заявили, что максимум дозволеного - 7000 символов... две копии... в досовской и ви...

Вопрос № 18056
Пожлуйста, помогите, мне очень нужно хорошо разобраться в этом вопросе...
В приложении пример процедуры резидента из 15-ого выпуска рассылки (хотел сунуть весь, но заявили, что максимум дозволеного - 7000 символов... две копии... в досовской и виндовской кодироваках...)
Меня интересует процедура Int_21h_proc, а именно то, как мы из нее выходим:
retf 2. Тоесть получается, что мы завершая обработчик, достаем из стека смещение и сегмент, и удаляем из него еще два байта, в которых хранятся флаги... Но почему нам не нужно восстанавливать их??? Правда мы это делаем двумя строками ранее: popf, но ведь это не те флаги, которые были в вызвавшей прерывание программе!!! это флаги, которые мы получили уже внутри своего обработчика (в начале обработчика присутствуют операторы сmр, значит флаги таки меняются, a после сравнений следует pushf (аш два... один съедает оригинальный обраточик прерывания, который мы вызываем из своего обработчика дальним call\\\\\\\'ом, а второй остается...) Так в чем же дело??? Я пробовал заменить retf 2 на iret (как я понимаю обе команды опустошают стэк ровно на три слова, но вот только первая не востанавливает флаги... поправте если я не прав...), но прога давала збой. (кстати, единственной найденой мною прогой, которая использует прерывания 4F и 4E (поиск файлов с коротким именем) (которые мы и прер ехватываем в данном случае), оказался Volkov Commander :(...)... Так в чем же дело???? помогите... очень нужно знать (НЕ из простого любопытства)...
Огромнейшее спасибо, елси кто ответит...

Приложение:

Отправлен: 09.03.2005, 23:36
Вопрос задал: CrazyIronToiletPaper (статус: 1-ый класс)
Всего ответов отправлено: 2

Отвечает: Стас
Здравствуйте, CrazyIronToiletPaper!
Флаги не восстанавливаются потому, что флаг CY, установленный внутри Int21 указывает на ошибку выполнения функции.
Странно, что IRET сработал неправильно, ты уверен что ничего не забыл?
>единственной найденой мною прогой, которая использует прерывания 4F и 4E
их много но они старые... прикинь старую досовскую прогу, которой нужно проверить каталог, найти файлы - и там будут использованы 4f и 4e.
Ответ отправил: Стас (статус: Практикант)
Отправлен: 10.03.2005, 00:40
Оценка за ответ: 5

Отвечает: Евгений Иванов
Здравствуйте, CrazyIronToiletPaper!
тебе же ясно сказали, что так надо. ;)
ты же вызвал оригинальный обработчик прерывания, а он флаги изменил, вот их-то и нужно нам вернуть, что мы и делаем, используя retf 2.
Удачи!
Ответ отправил: Евгений Иванов (статус: Профессор)
Отправлен: 10.03.2005, 00:56
Оценка за ответ: 5


Отправить вопрос экспертам этой рассылки

Приложение (если необходимо):

* Код программы, выдержки из закона и т.п. дополнение к вопросу.
Эта информация будет отображена в аналогичном окне как есть.

Обратите внимание!
Вопрос будет отправлен всем экспертам данной рассылки!

Для того, чтобы отправить вопрос выбранным экспертам этой рассылки или
экспертам другой рассылки портала RusFAQ.ru, зайдите непосредственно на RusFAQ.ru.


Форма НЕ работает в почтовых программах The BAT! и MS Outlook (кроме версии 2003+)!
Чтобы отправить вопрос, откройте это письмо в браузере или зайдите на сайт RusFAQ.ru.


© 2001-2005, RusFAQ.ru, Россия, Москва. Все права защищены.
Идея, дизайн, программирование, авторское право: Калашников О.А.


http://subscribe.ru/
http://subscribe.ru/feedback/
Подписан адрес:
Код этой рассылки: comp.soft.prog.faq
Отписаться

В избранное