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

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


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

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

Коцюрбенко Алексей aka Жерар
Статус: Мастер-Эксперт
Рейтинг: 0
∙ повысить рейтинг »
Evgen aka Chuma
Статус: 6-й класс
Рейтинг: 0
∙ повысить рейтинг »
quirck
Статус: 1-й класс
Рейтинг: 0
∙ повысить рейтинг »

∙ Assembler

Номер выпуска:1697
Дата выхода:14.06.2018, 01:45
Администратор рассылки:Лысков Игорь Витальевич (Старший модератор)
Подписчиков / экспертов:59 / 20
Вопросов / ответов:1 / 1

Консультация # 193379: Здравствуйте! Прошу помощи в следующем вопросе: При написании резидента по книжке Олега Калашникова, не могу понять один момент. В Книге что таблица вектора прерываний в MS-DOS находится в сегменте 0000. Через отладчик смотрю адрес прерывания 21h по адресу 0000:084 (21h * 4 = 84h). В таблице видно, что адрес 21h -го прерывания располагает...

Консультация # 193379:

Здравствуйте! Прошу помощи в следующем вопросе:

При написании резидента по книжке Олега Калашникова, не могу понять один момент. В Книге что таблица вектора прерываний в MS-DOS находится в сегменте 0000.
Через отладчик смотрю адрес прерывания 21h по адресу 0000:084 (21h * 4 = 84h). В таблице видно, что адрес 21h -го прерывания располагается по F000:14A0 (Показано на скриншоте в окне m2), но когда я пытаюсь сохранить этот адрес в переменные, или даже просто использую функцию 35h прерывания 21h, то функция выдает совершенно другие значения адреса (06С7:42B7 тоже на скриншоте показано в регистрах es:bx после выполнения ф-ции 35h). Т.е. почему то совсем другие значения чем в таблице по смещению 0000. И самое интересно, что когда я сохраняю эти полученные значения в переменные, а потом пытаюсь пригнуть по ним в обработчик (jmp dword ptr cs:[Var_Vector_Int21) то в отладчике видно, что на самом деле я перехожу по правильному адресу, вместо этих значений, которые сохр анились в переменной и которые выдала 35h. Т.е. прыгая по сохраненному адресу 06С7:42B7 на самом деле я прыгнул на правильный адрес, на F000:14A0. Не могу понять как это происходит, может это из-за отладчика проскакивают такие странные значения или все таки я что то упустил?

Дата отправки: 09.06.2018, 01:28
Вопрос задал: i.am.krepkov.ivan (Посетитель)
Всего ответов: 1
Страница онлайн-консультации »


Консультирует Зенченко Константин Николаевич (Модератор):

Здравствуйте, i.am.krepkov.ivan!

Принципы работы отладчиков, как раз касаются изучаемой Вами темы. Разные отладчики работают по разному, одни подменяют первый байт инструкции на 0C3h(int 3), и потом обрабатывают прерывание, другие эмулируют код программы. Каждый раз прерывая программу, отладчик сохраняет все регистры, обрабатывает состояние: выводит состояние памяти и регистров и т.д., когда обработка завершается, отладчик восстанавливает все регистры и все начинается заново. Если сработало прерывание, которое перехватил отладчик, он проверяет его, если это его касается- обрабатывает, если нет передает управление предыдущему обработчику, это есть у Вас в коде:

Код (Assembler) :: выделить код
proc_Int21_Stub proc
;---Проверяем эхо
	cmp ax,8899h
	jnz Label_To_Original_Vector 
;---Уходим в оригинальный обработчик
Label_To_Original_Vector:
	jmp dword ptr cs:[Var_Vector_Int21]
proc_Int21_Stub endp

Именно это и произошло в данном случае, попав на прерывание, которое обрабатывает отладчик, значение адреса было подменено отладчиком(он не хочет, и не будет сам себя отлаживать) и передано управление старому обработчику.

Удачи!

Консультировал: Зенченко Константин Николаевич (Модератор)
Дата отправки: 12.06.2018, 15:08
Рейтинг ответа:

НЕ одобряю 0 одобряю!


Оценить выпуск | Задать вопрос экспертам

главная страница  |  стать участником  |  получить консультацию
техническая поддержка

Дорогой читатель!
Команда портала RFPRO.RU благодарит Вас за то, что Вы пользуетесь нашими услугами. Вы только что прочли очередной выпуск рассылки. Мы старались. Пожалуйста, оцените его. Если совет помог Вам, если Вам понравился ответ, Вы можете поблагодарить автора - для этого в каждом ответе есть специальные ссылки. Вы можете оставить отзыв о работе портале. Нам очень важно знать Ваше мнение. Вы можете поближе познакомиться с жизнью портала, посетив наш форум, почитав журнал, который издают наши эксперты. Если у Вас есть желание помочь людям, поделиться своими знаниями, Вы можете зарегистрироваться экспертом. Заходите - у нас интересно!
МЫ РАБОТАЕМ ДЛЯ ВАС!


В избранное