Unele caracteristici nedocumentate ale lui dos, wasm

Unele caracteristici nedocumentate ale arhivei DOS - WASM.RU

INTERRUPȚIILE 30H ȘI 31H

nbsp Desigur, această metodă vă permite să accesați numai dispozitivul original de tratare a întreruperilor de 21h. Și dacă programul a instalat un alt handler pentru această întrerupere, nu va fi gestionat în acest fel. În multe cazuri, desigur, este foarte convenabil. Cu toate acestea, nu trebuie să uităm că acest lucru este chiar mai convenabil pentru virușii care doresc apelurile lor la funcțiile DOS să treacă neobservate.

nbsp existenței sale, această echipă este obligată să solicite dezvoltatorilor PC-DOS și MS-DOS pentru a asigura compatibilitatea cu sistemul de operare CP / M, în cazul în care pentru a apela funcțiile DOS necesare pentru a executa apelul 0005, funcția de pre-încărcare în registrul CL. Acest apel a executat o comandă care a fost localizată la offset 5 în PSP și care, la rândul său, a fost numită DOS.

nbsp Modul descris pentru a accesa DOS există în PC-DOS, începând cu versiunea 1.1 și în majoritatea versiunilor MS-DOS.

PROCESOR DE INTERVENȚIE ALTERNATIVĂ INT 21h

nbsp Operatorul alternativ de întrerupere 21h are cerințe diferite pentru parametrii de intrare decât apelul normal INT 21h. Utilizarea sa necesită acțiuni speciale și o înțelegere a ceea ce permite.

nbsp Atribuirea comenzilor la acest punct de intrare, efectuați o prelucrare preliminară a datelor de intrare și a stivei, înainte de a trece controlul la rutina standard de întrerupere 21h. Cu alte cuvinte, manipulatorul alternativ de întrerupere este doar un add-in peste standard. Prin urmare, primul lucru pe care îl face este reconstruirea stivei în ordinea standard care este acceptabilă pentru comanda IRET.

nbsp În continuare, dispozitivul de tratare alternativă de întrerupere 21h controlează numărul funcției solicitate și permite numai funcțiile cu numerele 00h-24h. Deoarece registrul AX se prăbușește imediat după intrare, numărul funcției este transferat în registrul CL, nu în AH. Același lucru înseamnă că, chiar și printre funcțiile valide, acestea nu sunt disponibile: cele care necesită un parametru suplimentar în registrul AL. De exemplu, funcția nu este disponibilă 0Ch (tampon tastatură clară apel și apoi una din funcțiile 01h, 06h, 07h, 08h și 0Ah), deoarece necesită numărul subfunction în registrul AL.

nbsp rămâne pentru a clarifica întrebarea: de ce avem nevoie de o alternativă 21h procesor de întrerupere, de ce-l astfel un mod neobișnuit de a avea acces și de ce este un astfel de acord ciudat cu privire la parametrii de intrare. Toate cele trei întrebări pot fi preluate simultan: acest lucru se datorează dorinței dezvoltatorilor MS-DOS de a asigura compatibilitatea cu sistemul de operare CP / M, care a predominat înainte de apariția MS-DOS. Prin urmare, acordul privind parametrii de intrare și alegerea limitată a funcțiilor, atât de ciudate pentru utilizatorii MS-DOS, nu par a fi ciudate pentru cei care încă mai amintesc de CP / M. Și în ceea ce privește modul neobișnuit de acces la un handler alternativ de întrerupere, metoda descrisă nu este folosit într-adevăr, deși este destul de corect, și JMP echipa FAR în vectorul 30h întrerupere există doar pentru a sprijini apelul funcțiilor DOS în stilul de CP / M prin intermediul PSP: comanda CALL 0005.

nbsp Dispozitivul alternativ de întrerupere 21h prezentat există în toate versiunile PC-DOS și în aproape toate versiunile MS-DOS. Este interesant de observat că codul pentru acest manipulator, judecat după cercetarea efectuată, este același în toate versiunile DOS și, prin urmare, are aceeași lungime. Evident, nu este nimic mai mult decât un rudiment moștenit de la sistemul de operare CP / M, o anexă MS-DOS. În plus, segmentul de DOS, în cazul în care sunt toate funcțiile sale pot fi obținute în mai multe feluri, și trecerea în alternativ 21h său de tratare a întreruperii este, prin urmare, standardul, în același mod în aceeași versiune de DOS, și chiar diferite companii.

nbsp Este, desigur, posibil să ocolim restricția privind numărul de funcții existent la acest punct de intrare. Pentru a face acest lucru, trebuie doar să mătuiți comenzile NOP cu valabilitatea numărului. Nu treceți cu vederea o altă limitare: nu puteți utiliza funcții care necesită parametri în registrele AL și CL.

; Afișarea (slice) a dispozitivului alternativ de întrerupere 21h.

Conținutul PSP: CELLS 05H-09H
DESCRIEREA ACȚIUNII PENTRU A APLICA FUNCȚII DOS ÎN STYLE CP / M

nbsp Sistemul de operare CP / programatori M pentru a apela funcțiile DOS utilizează un apel de închidere: deplasarea de la 5 la PSP pentru fiecare program este CALL comanda FAR SEG: off, care permite, teoretic, să apelați DOS implementare CALL 0005 echipa, în același mod ca și în CP / M .

13H FUNCȚIA DE ÎNTRERUPARE 21H.
OPORTUNITĂȚI NEOCOCUMENTATE

nbsp Funcția de întrerupere 13h 21h se referă la o serie de funcții care efectuează operații pe fișiere utilizând FCB. Sterge fisierul sau grupul de fisiere.

nbsp Această funcție are un caz nedocumentat când FCB extins utilizează numele fișierului. și atributul fișier este 1Fh. Cu această combinație specifică, funcția de 13h șterge toate fișierele din directorul curent, inclusiv fișiere cu atribute de citire, volum și director. Pentru a agrava situația, această funcție înlocuiește primul caracter din numele fișierului la distanță cu 0, în loc de normal 0E5h. Acest lucru induce în eroare multe utilitare de recuperare a fișierelor.

nbsp Acest comportament al MS-DOS este cel puțin ciudat. De obicei, numai procedurile interne MS-DOS pot modifica sau șterge fișierele marcate cu atributul "subdirector". Faptul că funcția care operează cu FCB are permisiunea de a șterge aceste fișiere - o chestie incredibilă de MS-DOS.

; Exemplu de utilizare a proprietății nedocumentate a funcției 13h