Pascal: hogy lehetne átírni ezt a programot, hogy csak bizonyos területeit olvassa a lemeznek?
Például, ha csak a partíciós táblát és boot szektort szeretném olvasni, akkor mit kell tenni?
Egyáltalán, FPC alatt biztonságos a közvetlen lemez-hozzáférés, vagy esetleg kárt is tud okozni? (pl. nemcsak olvas hanem ír is), bár ahogy látom, ez fájlba írja a tartalmat...
Valahonnan kereséssel sikerült egy kódot szerezni, az érdekelne, ez miképpen módosítható úgy, hogy pl. csak bizonyos szektorokat olvasson, megadott méretig és a cilindereket és fejeket is növelje olvasás közben (régen, a '16 bit-es DOS idejében foglalkoztam ilyennel a '90-es években ilyen lemez-olvasással, azóta ilyen téren sokat felejtettem). :-(
Kód milyenségéről nem tehetek, meg szintaktikai hibákról sem.
"end." utána valami java kódot beszúrt, nem tudom miért, ezek szerint ez az adott oldal Pascal online fordítója.
Az van, hogy a windows nem nagyon enged hozzáférni a partíciós táblához és a boot szektorhoz sem.
Ehhez egyébként is komoly előtanulmányok szükségesek, már ha nem akarod magad alól kivágni a fát.
A biztonságot nem a programnyelv, hanem a programozó tudása garantálja, már ha képes erre.
Amit tudok javasolni, az az, hogy emulátorban (pl. bochs) futtass egy rendszert, és ott próbálkozz a pascalban írt programoddal.
Amúgy, azt olvasol alacsony szinten a HDD-ről, amit csak akarsz, tehát bármelyik szektort elérheted, írhatod, olvashatod. Javaslom először a FAT filerendszeren gyakorolni, mivel a népszerűbbek közül az a legegyszerűbb.
A partíciós tábla egyébként mindössze a file rendszereket tartja nyilván, te valószinűleg a FAT táblára gondolhattál a szektorok olvasásával, írásával kapcsolatban.
Szia.
Szerintem két módszer van arra, hogy "máshonnan" olvasd be a bájtokat (Mivel fileként kezeli a a merevlemezt) :
1. Szekvenciálisan olvasod be egymás után a rekordokat :
Tehát :
sz:=strm.Read(buf[1], length(buf)); // Első rekord
sz:=strm.Read(buf[1], length(buf)); // második rekord
stb,stb.
Vagy használod a Streamben lévő position property-t :
strm.position:=2048; // ez a második rekord cime
sz:=strm.Read(buf[1], length(buf)); // második rekord
De ehhez valóban érdemesebb egy virtuális gépen próbálkozni, főleg az IRÁSSAL, mert valóban hazavághatod a rendszered egy két rossz irással. Illetve nem árt mélyen ismerni a lemezek felépítését is, hogy valóban tudd mit olvasol be és honnan.
Sok sikert.
üdv.
Kapcsolódó kérdések:
Minden jog fenntartva © 2025, www.gyakorikerdesek.hu
GYIK | Szabályzat | Jogi nyilatkozat | Adatvédelem | Cookie beállítások | WebMinute Kft. | Facebook | Kapcsolat: info(kukac)gyakorikerdesek.hu
Ha kifogással szeretne élni valamely tartalommal kapcsolatban, kérjük jelezze e-mailes elérhetőségünkön!