Zase ten DOS

HackForum

Zase ten DOS#
No takže se mi to nijak nepodařilo asi sem lemra :D, chtěl bych vědět, když teda ten program nějak přes fread načtu do paměti, jak provedu JMP na začátek toho kódu? Předpokládejme že to bude COM a ne EXE (tedy žádné PE a EXE hlavičky). Přes fci 4Bh int*erruptu 21h se mi to nepodařilo rozchodit... Poraďte jedno nebo druhý :).

Jako druhou věc jsem se chtěl zeptat (ovládá to ještě někdo? :)),
funkce 0x02, interrupt 0x13h, funkce na čtení z disku. Udávají se tam různý počty hlav a a sektorů... Potřeboval bych přečíst přes tuto funkci třeba bajty od 1000h do 1050h na disketě, moh by mi někdo uvést přklad? :) co prdeláčí, máš možnost se tady předevšema vytáhnout, vsázím na tebe ;))

----------
..:@]> [link] <[@:..
(odpovědět)
DjH | E-mail | Website | ICQ 319-960-8958.7.2008 18:32
re: Zase ten DOS#
nobody knows? :)

----------
..:@]> [link] <[@:..
(odpovědět)
DjH | E-mail | Website | ICQ 319-960-8958.7.2008 20:38
re: Zase ten DOS#
Nerozumím dotazu, jde to nějak přeformulovat?
Skok můžeš provést jako skok - inline assembler, funkce asm ("příkaz assembleru %%parametr": "parametr"=(parametr));
Případně volej ten kód jako funkci - nastav pointer na místo, kam skočit, a pak funkci zavolej. Volání funkce stejně není nic jiného, než napushování parametrů na stack, call na subrutinua pak nějaký ten režijní bordel okolo ( [link] , [link] ).

Bajty od 1000h do 1050h (80 bajtů) je trochu blbost - pokud virtuálně nepřistupuješ k disketě jako k souvislému souboru. Je nutno číst celé sektory (do bufferu příslušné velikosti) a "nadbytečné" části zahazovat.
ve tvém příkladu chceš číst čtvrtý sektor na nulté stopě.
Klasicky disketa má formát 9 sektorů na stopu, 40/80 stop na stranu. Počet hlav/sektorů/stop zjistíš službou 0xA na int 0x13.
Plnění registrů jsi asi našel - [link] - a použít inline assembler, nebo si příslušnou rutinu nacpat někam do paměti (jako obsah třeba stringu nebo čehoto) a na ni skákat, nebo vložit jako funkci napsanou separátně v assembleru a příslušný .obj přilinkovat.
(odpovědět)
gugumaa | 195.113.79.10/10.0.13.*8.7.2008 21:27
re: Zase ten DOS#
Nice: [link]
(odpovědět)
gugumaa | 195.113.79.10/10.0.13.*8.7.2008 21:29
re: Zase ten DOS#
nemusis pouzivat primo funkci dosu, kdyz to neumis. funkce pro spousteni programu ji interne stejne pouzivaji.

pokud jde o CHS, tak viz tady: [link] , jak napsal gugumaa, proste zjistis parametry disku a pak linerani adresu prepocitas na chs.

pro natazeni .com ho musis nacist do segmentu na offset 100h. tech prvnich 100h bytu obsahuje PSP (viz [link] ), ktery by jsi mel vyplnit (dos na to ma funkci), spousta programu z nej cte udaje. a taky musis nastavit vychozi hodnoty registru, prinejmensim segmentovych (v realnem rezimu je pamet segmentovana po 64kB, takze aktualni hodnoty nebudou odpovidat tem, kde mas nacteny ten program).

(odpovědět)
prc | 213.211.51.*9.7.2008 0:20
re: Zase ten DOS#
vyhrabal jsem zvuj stary kod pro praci s diskem, vcetne CHS. predpokladam, ze pouzivas C, ale cist Pascal by snad nemel byt problem :)

a taky SysMan, vyborny zdroj informaci (hlavne tenkrat, kdyz u nas byl internet v plenkach, natoz Google :))

[link]

a jen tak pro zajimavost, co te v dnesni dobe vede k zajmu o dos?

(odpovědět)
prc | 213.211.51.*9.7.2008 0:33
re: Zase ten DOS#
1) diky za kod
2) ano pisu v C :)
3) Sysmana mam, neasi ;), i ATHelp
4) je nuda, tak se snazim udelat jednoduchy realmodovy OS, abych trochu poznal jak to funguje (aneb nechci konkurovat Mrkvosoftu, pro rejpaly ;))..

----------
..:@]> [link] <[@:..
(odpovědět)
DjH | E-mail | Website | ICQ 319-960-8959.7.2008 12:25
re: Zase ten DOS#
Pan (|) ma asi neco na praci. Vetsinou bez problemu zacne otravovat hned nekolik hodin po zalozeni vlakna.(Nebo o tom vi hovno tak radsi drzi hubu).
(odpovědět)
IoGi~ | 89.235.31.*9.7.2008 14:08

Zpět
 
 
 

 
BBCode