Ok, un nou micut “tutorial” (daca il pot denumi asa
) ). De curand, m-am confruntat cu o problema, cand incercam sa scriu un cod in ASM. Vroiam sa setez ceasul la ora 00:00:00 din Windows, folosind BIOSul. Nicio problema, aveam interruptul necesar, dar programul, cand il rulam, imi dadea eroare grava (sau eroare fatala). Avand proasta inspiratie sa nu-l intreb pe Shocker, am cautat pe Google, dar nu am gasit rezolvarea la problema mea. De unde am plecat, pana unde am ajuns este cale lunga ^_^
Shocker mi-a explicat ca eu nu pot accesa direct din windows BIOSul prin intermediul interrupturilor, deoarece eu rulez in UserMode (adica ? Cand misc mouseul pe desktop, accesez un fisier si altele, folosesc modul Userului). In UserMode nu avem acces direct la memoria kernelului, la resursele fizice ale calculatorului. Sa va arat o imagine (preluata de pe wikipedia.org) care sper sa fie edificatoare:
Clar, noi, cand rulam in User Mode suntem mai putini privilegiati, dar asta ne face si ceva mai secure. De ce ? In UserMode (Ring 3), o eroare se manifesta printr-o eroare predefinita a windowsului, pe cand in KernelMode (cel mai privilegiat, Ring 0), erorile se manifesta prin Blue Screenuri si Restarturi (ceea ce este cam neplacut
) )
Sa revenim. Deci ? Am precizat ca interrupturile nu pot fi rulate “simplu si direct” din UserMode (deoarece nu avem acces la resursele fizice ale computerului), atunci unele programe cum fac asta ? Ma refer, spre exemplu, la imaginea de pe desktop (care apare, in special, datorita placii video => direct din windows se poate avea acces la resursele fizice ale calculatorului). Cum, cum, cum, aceasta e intrebarea ?
)
Aceste aplicatii comunica cu resursele fizice ale calculatorului prin intermediul unui [b]Driver[/b]. Deci, practic, ce este un driver ? Este o aplicatie, care ruleaza in Kernel Mode [ring 0 - modul cel mai privilegiat]. Ca o mica schema, “comunicarea” dintre acestea se realizeaza astfel: aplicatia [ruleaza in usermode ring 3 - windows] -> driver [ruleaza in kernelmode ring 0] -> resursele fizice ale computerului.
Cum comunica ? Aplicatia care ruleaza in usermode apeleaza anumite rutine(sau subrutine -> http://en.wikipedia.org/wiki/Subroutine) in driver, iar driverul comunica mai departe cu componenta hardware prin [b]computer bus[/b] (http://en.wikipedia.org/wiki/Computer_bus) !
Acum poate va intrebati, ok, dar eu am imagine pe desktop chiar daca nu am instalat driverul (software) de la placa video. Pai aveti, dar nu se foloseste placa video la capacitatile ei maxime, pentru ca si Windowsul are anumite drivere (pentru placa video, placa de sunet, etc.) incorporate, insa nu poate folosi toate modelele la capacitatile maxime, de aceea este nevoie de softwareul special realizat de firmwareul placii dumneavoastra !!
Cam atat am avut de spus ! Astept critici de la voi, deoarece nici eu nu sunt prea sigur de ceea ce am scris si vreau sa imi fixez cat mai bine aceste lucruri in minte, mai ales ca in viitor (cateva luni de invatat) vreau sa ma apuc de programare de drivere.
Bibliografie:
http://en.wikipedia.org/wiki/Ring_(computer_security)
http://en.wikipedia.org/wiki/Device_driver
http://en.wikipedia.org/wiki/Subroutine
http://en.wikipedia.org/wiki/Computer_bus
Al vostru, vladii !!!
Completat sub: Uncategorized | Tagged: bios, informatica, interrupt, kernel, usermode, vladii

“Al vostru, vladii !!! “
al nostru vladii
) e cam interesat de toate… bv vladii