🚀 go-pugleaf

RetroBBS NetNews Server

Inspired by RockSolid Light RIP Retro Guy

Article View: pl.comp.lang.c
Article #1447

Re: Zadanie w tle.

#1447
From: Marek Kotowski
Date: Thu, 12 Feb 1998 09:51
40 lines
2643 bytes
Michal Kaczmarczyk wrote:
> 
> Problem z zapisem w przerwaniach nie polega³ na tym, ¿e co¶ tam mo¿e
> zabru¼dziæ (inne przerwanie), tylko na tym, ¿e kod DOSu nie jest
> reentrant. Tak, ¿e jak bêdziesz zapisywa³/wysy³a³ dane z g³ównego programu
> to nic nie powinno siê dziaæ.

Problem polega na tym, kiedy mozna wywolywac funkcje systemowe z
programu, ktory zostal zainstalowany jako program obslugi przerwania,
zwlaszcza 8 (zegar), czy 9 (klawiatury), tj. przerwan sprzetowych,
de facto asynchronicznych. Zajmowalem sie tym kiedys i napisalem
kilka programow w asemblerze 0x86, ktore przejmowaly przerwania
zegara i/lub klawiatury i "pod przerwaniem" pisaly do pliku dyskowego.
Dzialaly bez zarzutu. Rzecz nie jest trywialna, chociaz nie az tak
skomplikowana, jakby sie moglo wydawac. Wykorzystuje sie tzw.
znacznik INDOS (funkcja 34H), ktory sygnalizuje, czy w danym
momencie DOS jest aktywny, czy nie. Oprocz tego korzysta sie
z tzw. przerwania stanu jalowego (28H), ktory DOS generuje,
ilekroc "nie ma nic do roboty" (trzeba to przerwanie przejac).
  Niegdys byly to tzw. nieudokumentowane opcje DOS-u.
Zostaly opisane juz w DOS Technical Reference 5.0, a takze
w podreczniku MASM 6.0.
  Jest jeszcze jedna technika, wykorzystujaca SDA (Swappable
Data Area). Pole to zawiera tzw. kontekst systemowy programu,
w tym m.in. numer segmentu PSP, adres biezacego pola DTA,
znacznik bledu krytycznego, itd. Poprzez to pole wlasnie DOS
"widzi" program. Technika polega na wymienianiu zwartosci pola
SDA - DOS widzi raz glowny program, raz procedure przejmujaca
przerwanie. Jest to skuteczna technika, ale bardziej
skomplikowana od metody INDOS + INT 28H. Napisalem wprawdzie
program, podmieniajacy dynamicznie SDA, ktory w koncu uruchomilem,
ale trzeba bylo kilka rzeczy sprawdzac empirycznie, jako
ze jest to technika calkowicie nieudokumentowana. Najwyrazniej
Microsoft nie chce dopuscic, by programisci grzebali w
strukturach systemowych DOS-u. Moze i slusznie. :-)


  Pozdrawiam

  Marek Kotowski
Technical Details
Message-ID: <34E2C60A.6C63@imm.org.pl>
Path: mbox-mo1.pugleaf.net!news-archive.icm.edu.pl!pingwin.icm.edu.pl!news.icm.edu.pl!news.nask.pl!not-for-mail
References: <6bsn5r$8oc$2@helios.man.lublin.pl> <Pine.LNX.3.96.980211215610.15462C-100000@fox>

Show Full Headers
Complete Article Headers
Path: mbox-mo1.pugleaf.net!news-archive.icm.edu.pl!pingwin.icm.edu.pl!news.icm.edu.pl!news.nask.pl!not-for-mail
From: Marek Kotowski <mkot@imm.org.pl>
Newsgroups: pl.comp.lang.c
Subject: Re: Zadanie w tle.
Date: Thu, 12 Feb 1998 10:51:06 +0100
Organization: Instytut Maszyn Matematycznych
Lines: 40
Message-ID: <34E2C60A.6C63@imm.org.pl>
References: <6bsn5r$8oc$2@helios.man.lublin.pl> <Pine.LNX.3.96.980211215610.15462C-100000@fox>
NNTP-Posting-Host: 148.81.238.53
Mime-Version: 1.0
X-Mailer: Mozilla 3.01Gold (Win95; I)
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit