Деякі недокументовані можливості dos, wasm

Деякі недокументовані можливості DOS - Архів WASM.RU

ПЕРЕРИВАННЯ 30H І 31H

nbsp Природно, зтот спосіб дозволяє отримати доступ тільки до оригінального оброблювачу переривання 21h. І якщо програмою був встановлений інший обробник цього переривання, управління зазначеним способом йому передано не буде. У багатьох випадках зто, звичайно, дуже зручно. Однак не можна забувати, що це ще більш зручно для вірусів, які бажають, щоб їх звернення до функцій DOS пройшло повз увагу.

nbsp Своїм існуванням ця команда зобов'язана бажанням розробників PC-DOS і MS-DOS забезпечити сумісність з операційною системою CP / M, де для виклику функції DOS було необхідно виконати команду CALL 0005, попередньо завантаживши номер функції в регістр CL. Цей виклик виконував команду, находяшаяся по зміщенню 5 в PSP, а та, в свою чергу, викликала DOS.

nbsp Описаний спосіб доступу до DOS існує в PC-DOS, починаючи з версії 1.1, і в більшості версій MS-DOS.

АЛЬТЕРНАТИВНИЙ ОБРАБОТЧИК ПЕРЕРИВАННЯ INT 21h

nbsp Альтернативний обробник переривання 21h пред'являє інші вимоги до вхідних параметрів, ніж звичайний виклик INT 21h. Його використання вимагає деяких спеціальних дій і розуміння того, що він дозволяє.

nbsp Призначення команд, які перебувають в цій точці входу, виконати деяку попередню обробку вхідних даних і стека, перш ніж передати управління стандартному оброблювачу переривання 21h. Іншими словами, альтернативний обробник переривання є лише надбудовою над стандартним. Тому перше, що він робить - це перебудовує стек в стандартному порядку, прийнятному для команди IRET.

nbsp Наступним дією альтернативний обробник переривання 21h контролює номер запитуваної для виконання функції і допускає тільки функції з номерами 00h-24h. Оскільки регістр AX руйнується відразу ж після входу, номер функції передається в регістрі CL, а не в AH. Це ж означає, що навіть серед допустимих функцій є недоступні: ті, які вимагають додаткового параметра в регістрі AL. Так, наприклад, недоступна функція 0Ch (очистити буфер клавіатури і потім викликати одну з функцій 01h, 06h, 07h, 08h, або 0Ah), оскільки вона вимагає номер підфункції в регістрі AL.

nbsp Залишається з'ясувати питання: для чого взагалі потрібен альтернативний обробник переривання 21h, чому до нього такий незвичайний спосіб доступу і чому в ньому таке дивне угоду про вхідних параметрах. На всі ці три питання можна відповісти одночасно: це пов'язано з бажанням розробників MS-DOS забезпечити сумісність з операційною системою CP / M, що панувала до появи MS-DOS. Тому угода про вхідних параметрах і обмеженість вибору функцій, настільки дивні для користувачів MS-DOS, аж ніяк не здадуться дивними тим, хто ще пам'ятає CP / M. А що ж стосується незвичайного способу доступу до альтернативного оброблювачу переривання, то описаний спосіб насправді не використовується, хоча він цілком коректний, а команда JMP FAR в векторі переривання 30h існує виключно для підтримки виклику функцій DOS в стилі CP / M через PSP: командою CALL 0005.

nbsp Описаний альтернативний обробник переривання 21h існує у всіх версіях PC-DOS і майже у всіх версіях MS-DOS. Цікаво зауважити, що код цього обробника, судячи з проведеним дослідженням, однаковий у всіх версіях DOS і, отже, має одну і ту ж довжину. Очевидно, що він є не більше ніж рудиментом, що залишився в спадок від операційної системи CP / M, такий собі апендикс MS-DOS. Далі, сегмент DOS, де розташовуються всі його функції, можна отримати багатьма способами, а зміщення в ньому альтернативного обробника переривання 21h, як, отже, і стандартного, однаково в межах однієї версії DOS, нехай навіть і різних фірм.

nbsp Можна, звичайно, і обійти існуюче в цій точці входу обмеження на номер функції. Для цього потрібно просто затерти ко Манді NOP перевірку на допустимість номера. При цьому не можна випускати з уваги інше обмеження: не можна користуватися функціями, які вимагають параметрів в регістрах AL і CL.

; Лістинг (зріз) альтернативного обробника переривання 21h.

ЗМІСТ PSP: ОСЕРЕДКУ 05H-09H
ОПИС ДІЙ ДЛЯ ВИКЛИКУ ФУНКЦІЙ DOS В СТИЛІ CP / M

nbsp В операційній системі CP / M програмісти для виклику функцій DOS використовували близький CALL: по зсуву 5 в PSP кожної програми знаходиться команда CALL FAR seg: off, яка теоретично дозволяє викликати DOS виконанням команди CALL 0005, точно так же, як в CP / M .

ФУНКЦІЯ 13H ПЕРЕРИВАННЯ 21H.
недокументовані можливості

nbsp Функція 13h переривання 21h відноситься до серії функцій, які виконують операції з файлами з використанням FCB. Вона видаляє файл або групу файлів.

nbsp Ця функція має один недокументований випадок, коли розширений FCB використовує ім'я файлу. і атрибут файлу 1Fh. При цій специфічній комбінації функція 13h видаляє всі файли в поточному каталозі, включаючи файли з атрибутами "тільки для читання", "том" і "каталог". Щоб посилити положення, ця функція замінює перший символ в імені віддаленого файлу на 0, а не на звичайний 0E5h. Це вводить в оману багато утиліти відновлення файлів.

nbsp Така поведінка MS-DOS щонайменше дивно. Зазвичай тільки внутрішні процедури MS-DOS можуть змінювати або видаляти файли, помічені атрибутом "підкаталог". Те, що функції, що оперує з FCB, дозволено видаляти ці файли - неймовірна примха MS-DOS.

; Приклад використання недокументірованново властивості функції 13h