Article View: pl.comp.lang.c
Article #1447Re: Zadanie w tle.
From: Marek Kotowski
Date: Thu, 12 Feb 1998 09:51
Date: Thu, 12 Feb 1998 09:51
40 lines
2643 bytes
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-mailReferences:
<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