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

Ассемблер? Это просто! Учимся программировать


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

/ КОМПЬЮТЕРЫ И ПО / Языки программирования / Assembler (Ассемблер)

Выпуск № 808
от 22.07.2007, 23:35

Администратор:Калашников О.А.
В рассылке:Подписчиков: 388, Экспертов: 28
В номере:Вопросов: 1, Ответов: 1


Вопрос № 95460: У меня несколько вопросов по поводу программы-резидента(Выпуск № 010) из рассылки Калашникова. Её код в приложении. 1) В конце этого выпуска сказано, что для работы программы требуется 2 файла: 1-сама программа(prog10.com) с обработчико...

Вопрос № 95.460
У меня несколько вопросов по поводу программы-резидента(Выпуск № 010) из рассылки Калашникова. Её код в приложении.

1) В конце этого выпуска сказано, что для работы программы требуется 2 файла:
1-сама программа(prog10.com) с обработчиком прерывания 21h
2- любая другая с выводом строки на экран(test10.com).
Следуя указаниям, я сначала запускаю в Far prog10.com,та возвращается в Dos, затем набираю test10.com .Всё работает- на экран выводится строка "Моя строка!". В другом окне(т.к. первое окно занято резидентом) Far я запускаю test10.com в отладчике AFDPro , но когда захожу внутрь прерывания Int 21h , то вместо нашего обработчика прерывания программа переходит на адрес оригинального обработчика 21h. Не знаю, почему...
С SoftIce такие же проблемы!

2) Int_21h_vect dd ? говорит о том, что переменная не инициализирована? Если да, то какая разница между такой записью и записью вида Int_21h_vect dd 0 - в отладчике то же самое и занимает столько же места(байт) ?!

3) call dword ptr cs:[Int_21h_vect]
Во-первых, почему call, ведь мы изменяем одновеменно 2 регистра(CS:IP). Или она работает автоматически - при указании сегмента он
помещается в стек?
Во-вторых, заменив cs на ds, в работе программы ничего не изменилось, а заменив в строке jmp dword ptr cs:[Int_21h_vect], она выдала
какие-то непонятные символы. Странно, обращаемся мы всё равно к данным?! Может cs и ds в разные промежутки времени разные:

Ok_09:
push ds
push dx
push cs
pop ds

Почему мы в ds заносим cs? Повторяю, с отладчиками проблемы.

Приложение:

Отправлен: 17.07.2007, 18:40
Вопрос задал: Fat NTFSov
Всего ответов: 1
Мини-форум вопроса >>> (сообщений: 4)

Отвечает: Зенченко Константин Николаевич
Здравствуйте, Fat NTFSov!

1) В windows 98+ нет чистого MSDOS. Это только эмуляторы MSDOS. Когда Вы работаете в разных MSDOS-окнах, у Вас получается 2-е разных программы которые независят друг от друга (изменение в одной программе не влияет на вторую)
2) Int_21h_vect dd ? - эта запись указывает компилятору не заниматся инициализацией этой переменной(но по умолчанию компилятор ставит 0х00000000, хотя может быть и любой "мусор"),
при такой записи Int_21h_vect dd 0 - компилятор должен записать туда значение 0х00000000.
3)При запуске обработчика известны только CS:IP, остальные регистры могут быть изменены тестовой программой.

push ds ;Сохраним регистры
push dx
push cs ;Адрес строки должен быть в DS:DX
pop ds
mov dx,offset My_string
pushf ;Так надо! Позже рассмотрим
call dword ptr cs:[Int_21h_vect]

в этих строчках передается управление на функцию 09h прерывания 21h, она требует данные по адресу DS:DX, если не изменять DS то вместо нашей строки будет выводится информация из тестовой программы, а там могут находится не корректные данные приводящие с сбою.
Если не менять DS и вызвать команду перехода, то сегмент будет стестовой программы, а смещение с нашего обработчика. Куда мы попадем не известно.
Удачи!
---------
И только наступив на грабли мы приобретаем драгоценный опыт!
Ответ отправил: Зенченко Константин Николаевич (статус: Практикант)
Ответ отправлен: 17.07.2007, 19:29


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

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

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

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

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


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


© 2001-2007, Портал RusFAQ.ru, Россия, Москва.
Авторское право: ООО "Мастер-Эксперт Про"
Email: support@rusfaq.ru, тел.: +7 (926) 535-23-31
Хостинг: "Московский хостер"
Поддержка: "Московский дизайнер"
Авторские права | Реклама на портале
Версия системы: 4.53 beta от 09.07.2007
Яндекс Rambler's Top100
RusFAQ.ru | MosHoster.ru | MosDesigner.ru | RusIRC.ru
Kalashnikoff.ru | RadioLeader.ru | RusFUCK.ru

В избранное