|
0 / 0 / 0
Регистрация: 24.05.2015
Сообщений: 50
|
||||||
TASM Резидентный обработчик прерывания 21h (по книге Калашникова)08.09.2017, 14:12. Показов 2805. Ответов 10
Метки нет (Все метки)
Всем добрый день.
Изучаю ассемблер по книге Калашникова . Программа перехватывает 21-ое прерывание и подменивает выводимую строку. Код резидентной программы :
И тут у меня возникло несколько вопросов: 1. Для чего в 9 и 17 строках указывается "cs" ? Ведь в стороках 30 и 31 мы в "Int_21h_vect" записали (где расположено прерывание int 21h) смещение:сегмент. Пробовал менять 17 строку на: "call dword ptr [Int_21h_vect]" и "call Int_21h_vect". Работает как и прежде. А с 9-ой строкой так не получается. При вызове 21-го прерывания мы должны попадать на наше "Int_21h_proc", а вызывается оригинальный "int 21h". 2. Почему так происходит?
0
|
||||||
| 08.09.2017, 14:12 | |
|
Ответы с готовыми решениями:
10
Обработчик прерывания int 21h (по книге Калашникова) Почему при вызове функции 4ch прерывания 21h резидентный обработчик падает? |
|
Модератор
|
||
| 08.09.2017, 14:31 | ||
DS находится значение из программы пользователя, но к данной переменной нужно обратиться.
1
|
||
|
Asm/C++/Delphi/Py/PHP/VBA
|
|
| 08.09.2017, 17:43 | |
|
По умолчанию при обращении к переменной (точнее, к памяти) применяется сегмент из регистра DS (если только в качестве базового регистра используется не bp/ebp или esp - в этом случае SS). Но т.к. это резидентная программа и, как уже сказали, "в DS находится значение из программы пользователя", то чтобы обратиться к переменной из сегмента нашего резидента (а переменные находятся в том же сегменте, что и код), используем сегмент CS.
3
|
|
|
6773 / 2741 / 385
Регистрация: 17.02.2013
Сообщений: 4,048
|
||
| 11.09.2017, 02:43 | ||
|
Ну и от меня 5 копеек.
Когда управление попадает в обработчик прерывания значение DS не известно. Зато известно значение CS. Оно будет взято из вектора прерывания. А значение вектора прерывания мы и определяли. А каким мы его определяли ? Значит что получается ? Когда управление попадет в обработчик прерывания DS будет неизвестно какое, зато CS будет в точности то каким был DS при старте нашей программы. Вот мы и используем в обработчике прерывания для адресации переменных CS вместо DS.
2
|
||
|
0 / 0 / 0
Регистрация: 24.05.2015
Сообщений: 50
|
||||||||||||||||||||||||||
| 30.10.2017, 15:50 [ТС] | ||||||||||||||||||||||||||
|
Спасибо всем за ответы.
Дальнейшее изучение приподносит новые вопросы. Кликните здесь для просмотра всего текста
Дойдя до строк
problem_1.jpg А записывается 42B7:0AD2 problem_2.jpg И переменная Int_21h_vect хранит 42B7:0AD2 Но затем когда заходим в int 21h или call dword ptr [Int_21h_vect], то попадаем туда куда и рассчитывал 107C:00A7 problem_3.jpg Почему так происходит? Кликните здесь для просмотра всего текста
А в этом примере почему перед
Или аналогично call dword ptr cs:[Int_21h_vect] и int 21h, ведь тоже переходим в одно и тоже место кода, но перед int 21h флаги тоже не сохраняем.
0
|
||||||||||||||||||||||||||
|
Модератор
|
|
| 30.10.2017, 16:51 | |
|
Потому, что
1. int 21h эквивалентен двум командам pushf+call [vector 21h].2. iret эквивалентен двум командам popf+ret.Когда выполняем jmp на "родной" обработчик, в конце которого стоит iret, то просто сразу отдаём управление в "родной" обработчик и не ждём возврат управления в наш код - управление вернётся той программе, которая вызывала int 21h.Когда выполняем call, то ожидаем возврат управления в наш обработчик, но в конце родного стоит iret, поэтому перед call сохраняем регистр флагов, т.е. из двух команд "собираем" int.Т.е. разница между jmp и call в положении нашего обработчика относительно "родного" - кто выполняется первым, а кто вторым. Почему адреса разные - так вы под отладчиком работаете - сам отладчик очень много перехватывает (почти половину прерываний). Так что вполне возможно несовпадение адресов, которые видны в дампе и которые получаются при выполнении. Сейчас уже и не вспомню, под DOS была какая-то утилита, показывающая перехваченные прерывания и программы, которые это сделали.
2
|
|
| 30.10.2017, 17:48 | |
|
Не по теме: ФедосеевПавел, все разжевал и в рот [ТС]"у положил.. на сей раз хвалю.. вот так бы всегда!!!
0
|
|
|
Эксперт Hardware
|
|||||||
| 30.10.2017, 20:03 | |||||||
|
чем он там занимается на старте. AX=25 - установить обработчик:
0
|
|||||||
| 30.10.2017, 20:56 | |
|
Не по теме: Да, дизассемблирование конкретной программы может помочь с информацией об этой программе.
0
|
|
|
0 / 0 / 0
Регистрация: 24.05.2015
Сообщений: 50
|
||||||
| 14.11.2017, 15:55 [ТС] | ||||||
|
Кликните здесь для просмотра всего текста
Подскажите пожалуйста почему текст не отображается? Пробовал сначала на ХР. Через cmd запускаю test.com и ничего не отображается. А если сначала запускаю отладчик(AFD), выхожу из него и запускаю test.com, то строка отображается. Попробовал на win7, вообще никак не хочет.
0
|
||||||
|
3410 / 1829 / 489
Регистрация: 28.02.2015
Сообщений: 3,696
|
||||||
| 14.11.2017, 16:54 | ||||||
|
Поставьте в начале программы
Начиная с ХР+ CMD.EXE только имитировал работу в этом режиме, при этом видео буфер не создавался, вывод проходил с помощью WAPI прямо в контролер видеокарты. Принудительно запуская 3-й текстовый режим, мы создаем видео буфер и начинаем работу, через него. AFD сам включает 3-ий режим и не выключает его. Если наберете в нем М2 В800:0, то правом нижнем окне, через точку будет верхняя строка отладчика
2
|
||||||
| 14.11.2017, 16:54 | |
|
Помогаю со студенческими работами здесь
11
Резидентный обработчик прерывания клавиатуры: замена символа "a" на "b"
Резидентный обработчик прерывания: вывод на экран сообщение и ожидание подтверждения его получения Резидентный обработчик прерывания, который при нажатии некоторой комбинации клавиш выдает звук Резидентная программа (обработка функции 9h прерывания 21h) Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
||||
|
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта
Симптом:
После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
|
Access
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
|
Новый ноутбук
volvo 07.12.2025
Всем привет.
По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне:
Ryzen 5 7533HS
64 Gb DDR5
1Tb NVMe
16" Full HD Display
Win11 Pro
|
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
|
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
|
|
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов
На странице:
https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/
нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
|
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов.
. . .
|
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
|
Мысли в слух
kumehtar 18.11.2025
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
|
Создание Single Page Application на фреймах
krapotkin 16.11.2025
Статья исключительно для начинающих. Подходы оригинальностью не блещут.
В век Веб все очень привыкли к дизайну Single-Page-Application .
Быстренько разберем подход "на фреймах".
Мы делаем одну. . .
|