Kā palaist programmu bez operētājsistēmas. Kā palaist programmu, to neinstalējot datorā

Vai vēlaties ļaut lietotājiem ar standarta kontu palaist programmas ar administratora tiesībām bez UAC vai paroles pieprasījuma? Tad es jums pastāstīšu, kā to izdarīt. Mēs izveidosim saīsni, izmantojot komandu runas / savecredkas saglabā paroli. Es atzīmēju, ka to var uzskatīt par drošības caurumu - parasts lietotājs varēs izmantot runas / savecred, lai administratora vārdā izpildītu jebkuru komandu, neievadot paroli. Tomēr dažās situācijās tas var būt noderīgs - piemēram, ja vēlaties, lai jūsu bērns, kas atrodas zem standarta konta, varētu palaist programmas kā administrators, neprasot jums.

Iespējot administratora kontu

Pirmkārt, jums jāatspējo iebūvētais administratora konts, kas pēc noklusējuma ir atspējots. Tātad, ar peles labo pogu noklikšķiniet uz komandrindas saīsnes un atlasiet "Palaist kā administratoram".

Atvērtajā komandu uzvednes logā palaidiet šo komandu:

tīkla lietotāja administrators / aktīvs: jā


Tagad konts ir iespējots, kaut arī bez paroles. Lai iestatītu paroli, atveriet vadības paneli, atlasiet kategoriju Lietotāju konti un ģimenes drošība un pēc tam atveriet izvēlni Lietotāju konti. Pēc tam noklikšķiniet uz saites “Pārvaldīt citu kontu”.

Izvēlieties administratora kontu, noklikšķiniet uz pogas "Izveidot paroli" un izveidojiet paroli administratora kontam.

Izveidojiet saīsni

Tagad mēs izveidosim saīsni, kas uzsāks lietojumprogrammu ar administratora privilēģijām. Ar peles labo pogu noklikšķiniet uz darbvirsmas, atlasiet “Izveidot” un pēc tam noklikšķiniet uz “Saīsne”.

Atvērtajā logā ievadiet šāda veida komandu:

runas / lietotājs: Datora nosaukums\\ Administrator / savecred “ C: \\ Ceļš \\ Lai \\ Program.exe

Lūdzu, ņemiet vērā, ka jums ir jāaizstāj Datora nosaukums  datora nosaukumā un C: \\ Ceļš \\ Lai \\ Program.exe  uz pilnu ceļu uz programmu, kuru vēlaties palaist. Piemēram, ja datora nosaukums ir klēpjdators un programma, kuru vēlaties palaist, ir Auslogics BoostSpeed, jums jāievada šāds ceļš:

runas / lietotājs: klēpjdators \\ administrators / savecred “C: \\ programmu faili \\ Auslogics \\ Auslogics BoostSpeed \u200b\u200b\\ BoostSpeed.exe"


Nākamajā logā ievadiet īsceļa nosaukumu. Ja vēlaties, varat atlasīt jauna saīsnes ikonu - ar peles labo pogu noklikšķiniet uz tās un atlasiet "Properties".

Dialoglodziņā "Properties" noklikšķiniet uz pogas "Mainīt ikonu" un atlasiet atbilstošo.

Pirmoreiz veicot dubultklikšķi uz īsceļa, jums tiks lūgts ievadīt iepriekš izveidotā administratora konta paroli.


Šī parole tiks saglabāta - nākamreiz palaižot programmu, jums tā vairs nebūs jāievada.

Kā minēts iepriekš, standarta kontos lietotāji var palaist jebkuru programmu ar administratora tiesībām, neievadot paroli (izmantojot komandu runas / savecred), tāpēc paturiet to prātā.

Administratora parole tiek glabāta “Credential Manager” - ja vēlaties izdzēst saglabāto paroli, varat to izdarīt no turienes.

Lai lieliska diena!

Dažām Windows lietojumprogrammām ir vajadzīgas paaugstinātas atļaujas, un jums tās jāpalaiž kā administratoram. Vaicājums “ Lietotāja konta kontrole"(Lietotāja konta kontrole vai Uac), kurā sistēma lūdz jūsu piekrišanu programmas palaišanai.

Daudzi lietotāji kļūdaini uzskata, ka "Lietotāja konta kontrole" to tikai traucē un atspējo. Tajā pašā laikā tiek nopietni ietekmēta datoru drošība. Lietotāju piekrišana lietotņu palaišanai vairs nav nepieciešama, un jebkura ļaunprātīga programma var darboties un netraucēti darboties. Pretvīrusu klātbūtne arī nevar 100% garantēt datora drošību.

Šajā rakstā es jums pateiksšu, kā administratora vārdā vienkāršot atlasīto lietojumprogrammu palaišanas procesu, neatspējojot UAC (pilnībā vai daļēji) un neapdraudot drošību.

Lai programmu palaistu kā administratoru, varat izmantot vairākas metodes:

Kā piemēru mēs runāsim komandrinda  (cmd) kā administrators.

  Metode Nr. 1 (normāla) - sāciet ar peles labo pogu (tiek parādīts UAC pieprasījums)

Ar peles labo pogu noklikšķiniet uz ikonas vēlamais pielietojums  un atlasiet “ Palaist kā administratoram":

  Metode Nr. 2 - sāciet lietot " Ctrl + Shift + Enter"(Tiek parādīts UAC pieprasījums)

Noklikšķiniet Sāktmeklēšanas joslā ierakstiet vajadzīgo komandu un noklikšķiniet uz Ctrl + Shift + Enter.

  3. metode - iestatiet palaišanu kā administratoru saīsnes īpašībās (tiek parādīts UAC pieprasījums)

Ar peles labo pogu noklikšķiniet uz vajadzīgā saīsnes un atlasiet “ Īpašības".

Dodieties uz sadaļu “ Īsceļš"noklikšķiniet" Pēc izvēles"atzīmējiet rūtiņu" Palaist kā administratoram":


Vai dodieties uz sadaļu “ Savietojamība"un atzīmējiet izvēles rūtiņu" Palaist šo programmu kā administratoru":

  Metodes numurs 4 - vienkāršojiet atlasīto lietojumprogrammu palaišanu, izmantojot uzdevumu plānotāju (UAC pieprasījums netiek parādīts)

Svarīgi!  Šī metode darbojas tikai grupas kontiem. Administratori. Plkst parastie lietotāji  tas nedarbosies, jo viņu tiesības ir ierobežotas līdz griestiem.

Mēs pārejam uz visinteresantāko ceļu. Ja ir kāda programma, kuru jūs pastāvīgi vadāt, un tā tiek saņemta no uzticama programmatūras ražotāja, piemēram, šī Windows lietojumprogramma, varat vienkāršot palaišanu. Izveidojiet saīsni vēlamā programma  neaizņem vairāk kā 2 minūtes, un tas nākotnē atbrīvosies no nevajadzīgām darbībām. Mēs sākam uzdevumu plānotājs (Sākt---> Visas programmas ---> Standarta---> Birojs---> Uzdevumu plānotājs) un noklikšķiniet uz “ Izveidot uzdevumu":

Norādiet Vārdsjaunam uzdevumam un atzīmējiet izvēles rūtiņu “ Veiciet ar visaugstākajām tiesībām":

Atveriet cilni Darbībasnoklikšķiniet uz " Izveidot", nākamajā logā noklikšķiniet uz" Pārskats":

Norādiet ceļu uz vēlamo lietojumprogrammu un noklikšķiniet uz “ Atvērt":



Palielināt attēlu

Push " Labi":

Aizveriet plānotāju un pārejiet pie īsceļa izveidošanas.

Lai darbvirsmā izveidotu saīsni, noklikšķiniet ar peles labo pogu un atlasiet “ Izveidot" ---> "Īsceļš":


Laukā Objekta atrašanās vieta  ievadiet:

Schtasks / run / tn cmd_admin

kur cmd_admin  - izveidotā uzdevuma nosaukums. Ja nosaukumā ir atstarpes, tas jāiekļauj pēdiņās.

Iestatiet etiķetes nosaukumu:



Palielināt attēlu

Izveidots un gatavs lietošanai saīsne.

Lai mainītu ikonu - ar peles labo pogu noklikšķiniet uz saīsnes, atlasiet “ Īpašības":

Dodieties uz sadaļu “ Īsceļš"un noklikšķiniet uz" Mainīt ikonu":

"Pārskats..."

Norādiet ceļu uz programmu:



Palielināt attēlu

Atlasiet vajadzīgo ikonu un aizveriet abus logus ar taustiņu " Labi":

Tagad vēlamās programmas palaišana kā administrators tiek veikta, veicot dubultklikšķi uz izveidotās saīsnes, kamēr UAC pieprasījums netiek parādīts un drošība paliek neskarta.

  "Metodes Nr. 4" automatizācijas lietderība

Ja jums ir jāizveido saīsnes lielam skaitam programmu, ir ērti izmantot utilītu.

Darbs ar utilītu nozīmē divus vienkāršus soļus:

  • Uzstādīšana
  • Velciet un nometiet izpildāmo failu (* .exe, * .bat, * .cmd) uz utilītas saīsni:


  Automātiska fokusēšanās uz darbojošos programmu

Lietojumprogrammu palaišanas no plānotāja specifika ir tāda, ka uzmanība uz logu netiek tulkota un, piemēram, lai komandā ierakstītu komandu, jums papildus jānoklikšķina uz loga. Šāda rīcība var palīdzēt automatizēt ierastās ieplānotās operācijas, taču "Metodei Nr. 4" tas ne vienmēr ir ērti.

Ir vairākas metodes, kā "apieties". Viņi darbojas nedaudz savādāk, tāpēc izvēlieties vispiemērotāko. Pirmais ir ērtāks programmu darbināšanai, bet otrais - skriptu darbināšanai.

Pievienojiet, veidojot uzdevumu:

Izmantojot komandu start

Programma vai skripts:

Argumenti:

  / c start / d "program_path" fails_nosaukums.exe

  / c start / d "C: \\ Windows \\ System32 \\" cmd.exe

Izmantojot NirCmd utilītu

Programma vai skripts:

Ceļš_k_nircmd \\ nircmd.exe

Argumenti:

Izpildīt šovu "program_path \\ file_name.exe"

Izpildīt šovu "C: \\ Windows \\ System32 \\ cmd.exe"

  Palaist dialoglodziņu Palaist kā administratoram

Līdzīgi kā komandrindas palaišana, jūs varat konfigurēt “ Skrien", un tajā ievadītās komandas tiks palaistas arī administratora vārdā. Šīs pieejas ērtums ir tāds, ka tiek saglabāts iepriekš izmantoto komandu saraksts, un no saraksta jūs varat izvēlēties vēlamo.


Veidojot uzdevumu plānotājā, sadaļā “ Darbības izveidošana"norādīt:

laukā " Programma vai skripts":

Rundll32

laukā " Pievienojiet argumentus":

Shell32.dll, # 61

Lejupielādējiet utilītu, izsaiņojiet to. Mēs palaižam komandrindu, ievadiet vēlamo komandu, sintakse ir diezgan vienkārša:

<путь к утилите> <путь к нужному приложению>


Tiek parādīta UAC uzvedne, un lietojumprogramma startē kā administrators.

Piezīme:  Kontekstā windows izvēlne  7 ir ļoti ērta funkcija faila ceļa kopēšanai: turiet Maiņa, ar peles labo pogu noklikšķiniet uz faila, atlasiet “ Kopēt kā ceļu".


  Lietotāju kā administratora palaistās programmas, neievadot administratora paroli

Svarīgi!  Šī metode nav droša, jo tā ļauj lietotājam ar ierobežotām tiesībām palaist kodu ar pilnām tiesībām. Viltīgs lietotājs vai ļaunprātīga programmatūra var to izmantot un apdraudēt sistēmu.

Apsvērsim vēl vienu interesantu uzdevumu: jūsu kontu windows ieraksts  pieder administratoru grupai, ir viens vai vairāki kontiiekļauts lietotāju grupā. Lietotājam jāpalaiž programma, kurai nepieciešams paaugstināt privilēģijas. Parasti tas izskatās šādi: lietotājs ar peles labo pogu noklikšķina uz faila un izvēlas “Run as Administrator”, un tiek parādīts pieprasījums ievadīt administratora paroli:


Protams, administratora paroles izsniegšana lietotājiem nav laba ideja. Lai to apietu, mēs izmantosim Alekseja Kuryakina utilītu AdmiLink. Ar to administrators var izveidot saīsni lietotājam, lai palaistu nepieciešamo programmu, savukārt administratora paroles ievadīšana ir nepieciešama tikai 1 reizi - veidojot saīsni. Kad lietotājs startē programmu, parole tiks pārsūtīta šifrētā veidā.



Šī metode darbosies, ja programmas palaišana ir iespējama tikai administratora vārdā, un izstrādātājs neaizmirsa norādīt šo nosacījumu manifestā. Tomēr tā tas paliek liels skaits  vecās programmas vai programmas, kuras var palaist tāpat kā normāls režīms, un administratora vārdā (šajā gadījumā būs pieejams atšķirīgs funkciju komplekts). Mēģinot palaist šādu programmu, izmantojot AdmiLink, tā tiek palaista normālā režīmā (bez administratora privilēģijām). Un, ja jūs mēģināt ievietot atzīmi "Metodes numurs 3", tiek saglabāts autora sākotnējais stils.

Ko darīt, ja jums ir jāpalaiž programma, bet nevēlaties to instalēt? Nulle Instalēt glābšanai!

Miljardiem cilvēku visā pasaulē operētājsistēmā tiek izmantoti datori vai klēpjdatori. windows sistēma. Parasti mēs instalējam programmas, pēc kurām tās tiek veiktas brīva vieta  diskā un izmantot brīvpiekļuves atmiņa. Tas samazina datora ātrumu.

Šodien mēs jums pateiksim, kā jūs varat palielināt datora veiktspēju un samazināt atmiņas slodzi. Lai to izdarītu, jums jāpalaiž nepieciešamās programmas, tās instalējot.

Kā palaist programmu bez instalēšanas?

1. Lejupielādējiet nulles instalēšanu.

Vispirms lejupielādējiet programmatūru Zero Install, kas ļauj palaist programmas, neveicot to instalēšanu datorā.

2. Instalējiet Zero Install.

Kad esat lejupielādējis nulles instalēšanu, veiciet dubultklikšķi uz faila, lai to instalētu. Tad skrien jauna programma  datorā.

3. Noklikšķiniet uzmūra "Katalogs".

Tiklīdz datorā tiek palaista programma Zero Install vai windows klēpjdators, jums jāiet uz cilni “Katalogs”. Noklikšķiniet uz pogas “Refresh list”, lai atjauninātu pieejamo programmu sarakstu.

4. Izvēlieties palaižamo programmu.

Skaties uzmanīgi pilns saraksts  pieejamās programmas. Ja atrodat nepieciešamo programmu, atlasiet to un noklikšķiniet uz “Palaist”. Dažas programmas var izvēlēties firefox pārlūks  vai Mozilla lai skrien. Gaidiet tikai pilnu lejupielādi. programmatūra, pēc tam to var palaist datorā, to neinstalējot.


Kopsavilkums

Ja jūsu datoram nav pietiekami daudz brīvas atmiņas vai enerģijas, lai palaistu programmu, varat izmantot programmu Zero Install. Es domāju, ka tas ir lielisks veids, kā vienlaikus nepagludināt datoru ar nepieciešamajām programmām.

Arī datoram var nebūt pietiekami daudz enerģijas, lai palaistu noteiktas programmas, piemēram, Eclipse IDE, JetBrains, NetBeans u.c. Šīs ir patiešām smagas programmas izstrādātājiem, kuri patērē lielu daudzumu operatīvās atmiņas.

Nulles instalēšana palīdzēs palaist šīs un daudzas citas programmas, neinstalējot tās datorā.

Vissvarīgākā lieta nebija pietiekami sīki aprakstīta: kā palaist šo kodu uz reālas aparatūras? Kā izveidot savu sāknēšanas disks? Šajā rakstā mēs uz visiem šiem jautājumiem atbildēsim detalizēti (daļēji šie jautājumi tika apspriesti iepriekšējā rakstā, bet lasīšanas ērtībai mēs sev ļaujam nedaudz atkārtot materiālu).

Internetā ir daudz aprakstu un konsultāciju par to, kā rakstīt savu mini-OS, pat ir simtiem gatavu mazu hobiju-OS. Viens no cienīgākajiem resursiem šajā tēmā, kuru es gribētu uzsvērt, ir portāls osdev.org. Lai papildinātu iepriekšējo rakstu par PCI (un iespēju rakstīt nākamos rakstus par dažādajām funkcijām, kas atrodas jebkurā mūsdienu OS), mēs aprakstīsim soli pa solim instrukcijas  lai izveidotu sāknēšanas disku ar parasto programmu C. Mēs centāmies rakstīt pēc iespējas detalizētāk, lai mēs to varētu izdomāt paši.

Tātad, mērķis: iztērējis pēc iespējas mazāk pūļu, izveidojiet savu bootable USB flash drive, kas tikai uz datora ekrāna izdrukā klasisko “Hello World”.

Precīzāk sakot, mums "jāiegūst" aizsargātā režīmā ar atspējotu lapu adresēšanu un pārtraukumiem - vienkāršākais procesora režīms ar parasto izturēšanos vienkāršā konsoles programmā. Vispiemērotākais veids, kā sasniegt šo mērķi, ir izveidot kodolu, kas atbalsta multiboot formātu, un ielādēt to, izmantojot populāro boot loader grub. Alternatīva šim risinājumam ir uzrakstīt savu apjoma sāknēšanas ierakstu (VBR), kurā tiktu ielādēts pats rakstīts iekrāvējs (iekrāvējs). Vismaz pienācīgai sāknēšanas programmai vajadzētu būt spējīgai strādāt ar disku, ar failu sistēmu un parsēt elfu attēlus. Tas nozīmē, ka jums ir jāraksta daudz montētāja koda un daudz C koda. Īsāk sakot, ir vieglāk izmantot Grub, kurš jau zina, kā izdarīt visu nepieciešamo.

Pirmkārt, turpmākajām darbībām ir nepieciešams noteikts kompilatoru un utilītu komplekts. Vienkāršākais veids ir izmantot sava veida Linux (piemēram, Ubuntu), jo tajā jau būs viss nepieciešamais, lai izveidotu sāknējamu zibatmiņu. Ja esat pieradis strādāt operētājsistēmā Windows, virtuālo mašīnu var konfigurēt ar Linux (izmantojot Virtual Box vai VMware Workstation).

Ja jūs izmantojat Linux Ubuntu, vispirms jāinstalē vairākas utilītas:
  1. izcirtums. Lai to izdarītu, izmantojiet komandu:

Sudo apt-get instalācijas grub

2. Qemu. Tas ir nepieciešams, lai ātri visu pārbaudītu un atkļūdotu (saite uz rakstu par atkļūdotāju), jo šim komanda ir līdzīga:

Sudo apt-get instalēt qemu

Tagad mūsu plāns izskatās šādi:
  1. Izveidojiet C programmu, kas ekrānā izdrukā līniju.
  2. no tā apkopojiet attēlu (kernel.bin) mini sāknēšanas formātā, lai tas būtu pieejams lejupielādei, izmantojot GRUB.
  3. Izveidojiet sāknēšanas diska attēla failu un formatējiet to.
  4. Instalējiet Grub uz šo attēlu.
  5. kopējiet izveidoto programmu (kernel.bin) uz diska.
  6. sadedziniet attēlu fiziskie nesēji  vai palaidiet to qemu.

un sistēmas sāknēšanas process:

Lai tas darbotos, jums būs jāizveido vairāki faili un direktorijas:

1. solis. Mērķa programmas (kodola) koda izveidošana:

Izveidojiet kernel.c failu, kurā būs šāds kods, kurš ekrānā izdrukā ziņojumu:

   #include "printf.h" #include "screen.h" #include "tips.h" void main (void) (clear_screen (); printf ("n \u003e\u003e\u003e Hello World! n");)

Šeit viss ir pazīstams un vienkāršs. Par printf un clear_screen funkciju pievienošanu tiks runāts vēlāk. Tikmēr jums šis kods jāpapildina ar visu nepieciešamo, lai Grub’s to varētu ielādēt.
  Lai kodolam būtu vairāku sāknēšanas formāts, pirmajos 8 kodola attēla kilobaītos jums ir nepieciešama šāda struktūra:

Ja visi šie nosacījumi ir izpildīti, tad Grub caur% eax un% ebx reģistrē rādītāju uz multiboot informācijas struktūru un vērtību 0x1BADB002, attiecīgi. Multiboot informācijas struktūra satur dažāda informācija, ieskaitot ielādēto moduļu sarakstu un to atrašanās vietu, kas var būt nepieciešami turpmākai sistēmas ielādei.
  Lai programmas failā būtu nepieciešamie paraksti, izveidojiet failu loader.s ar šādu saturu:

Teksts .global loader # padarot ieejas punktu redzamu piesaistītājam # Multiboot galvenes iestatīšana - sīkāku informāciju skatiet GRUB dokumentos .set FLAGS, 0x0 # tas ir Multiboot "karoga" lauks .set MAGIC, 0x1BADB002 # "maģiskais numurs" ļauj bootloader atrast galvenes .set CHECKSUM, - (MAGIC + FLAGS) # nepieciešama kontrolsumma .līdziniet 4 .long MAGIC .long FLAGS .long CHECKSUM # rezervējiet sākotnējo kodola kaudzītes vietu .set STACKSIZE, 0x4000 #, tas ir, 16k. .lcomm kaudze, STACKSIZE # rezerve 16k kaudze .comm mbd, 4 # mēs to izmantosim kmain .comm maģijā, 4 # mēs to izmantosim kmain ielādētājā: movl $ (kaudze + STACKSIZE),% esp # izveidosim kaudzi. movl% eax, magic # Multiboot maģijas numurs movl% ebx, mbd # Multiboot datu struktūra zvana galvenā # zvana C kods cli hang: hlt # apturēt mašīnu vajadzētu kodolam atgriezties jmp hang

Apsveriet kodu sīkāk. Šis kods gandrīz nav mainīts no wiki.osdev.org/Bare_Bones. Tā kā kompilēšanai tiek izmantots gcc, tiek izmantota GAS sintakse. Sīkāk apskatīsim, ko šis kods dara.

Viss nākamais kods tiks iekļauts izpildāmajā sadaļā .text.

Globālais iekrāvējs

Mēs deklarējam iekrāvēja simbolu, kas redzams ar linkeri. Tas ir nepieciešams, jo piesaistītājs izmantos iekrāvēju kā ieejas punktu.

Iestatiet karodziņus, 0x0 # piešķiriet karodziņus \u003d 0x0 .set MAGIC, 0x1BADB002 # piešķiriet MAGIC \u003d 0x1BADB002 .set CHECKSUM, - (MAGIC + FLAGS) # piešķiriet CHECKSUM \u003d - (MAGIC + FLAGS) .līdziniet 4 # izlīdziniet nākamos datus ar 4 baitiem. garš MAGIC # vieta pašreizējā vērtība MAGIC .long FLAGS # vieta pašreizējā vērtība FLAGS. garš CHECKSUM # vieta pašreizējā vērtība CHECKSUM

Šis kods veido Multiboot formāta parakstu. .Set direktīva nosaka rakstzīmes vērtību izteiksmei pa labi no komata. Direktīva .align 4 pielīdzina nākamo saturu 4 baitiem. Ilgajā direktīvā vērtība tiek saglabāta četros nākamajos baitos.

Iestatīt STACKSIZE, 0x4000 # piešķirt STACKSIZE \u003d 0x4000 .lcomm kaudze, STACKSIZE # rezervēt STACKSIZE baitus. steks attiecas uz range.comm mbd, 4 # rezerves 4 baiti mdb mainīgajam apgabalā COMMON .comm magic, 4 # rezerve 4 baiti maģiskajam mainīgajam apgabalā COMMON

Sāknēšanas procesa laikā grub nekonfigurē steku, un vispirms kodolam vajadzētu konfigurēt steku, šim nolūkam mēs rezervējam 0x4000 (16 kb) baitus. The.lcomm direktīva sadaļā.bss rezervē baitu skaitu, kas norādīts aiz komata. Vārdu kaudze būs redzama tikai apkopotajā failā. .Comm direktīva rīkojas tāpat kā .lcomm, bet simbola nosaukums tiks deklarēts visā pasaulē. Tas nozīmē, ka, ierakstot šādu rindu C kodā, mēs to varam izmantot.
  ārējā int maģija

Un tagad pēdējā daļa:

Iekrāvējs: movl $ (kaudze + STACKSIZE),% esp # inicializē steku movl% eax, maģija # rakstīt% eax uz maģisko adresi movl% ebx, mbd # rakstīt% ebx uz mbd zvana galvenā # zvana galvenā cli funkcija # atvienot pārtraukt no aparatūras pakārtošana: hlt # apturēt procesoru, līdz notiek pārtraukumi. jmp hang # lekt pakārt etiķeti

Pirmais norādījums saglabā kaudzes augšdaļas vērtību reģistrā% esp. Tā kā kaudze samazinās, kaudzei piešķirtā diapazona beigu adrese tiek uzrakstīta% esp. Divas nākamās instrukcijas glabā iepriekš rezervētajos 4 baitu diapazonos vērtības, kuras Grūbs pārsūta% eax,% ebx reģistros. Tad tiek saukta galvenā funkcija, kas jau ir rakstīta C valodā. Ja atgriezīsities no šīs procedūras, procesoram būs cilpa.

2. solis. Papildu koda sagatavošana programmai (sistēmas bibliotēka):

Tā kā visa programma ir rakstīta no nulles, printf funkcija jāraksta no nulles. Lai to izdarītu, sagatavojiet vairākus failus.
  Izveidojiet kopēju un iekļautu mapi:

Mkdir kopējā mkdir iekļaut

Izveidojiet commonprintf.c failu, kurā būs pazīstamās printf funkcijas ieviešana. Visu šo failu var ņemt no projekta www.bitvisor.org/. Ceļš uz failu bitvisor avotos: core / printf.c. Datnē printf.c, kas kopēts no bitvisor, izmantošanai mērķprogrammā ir jāaizstāj rindas:

   #include "initfunc.h" #include "printf.h" #include "putchar.h" #include "spinlock.h"

rindā:

   #include "tips.h" #include "stdarg.h" #include "screen.h"

Pēc tam noņemiet printf_init_global funkciju un visas atsauces šajā failā:

Statiskā void printf_init_global (void) (spinlock_init (& printf_lock);) INITFUNC ("global0", printf_init_global);

Pēc tam izdzēsiet mainīgo printf_lock un visas atsauces šajā failā:

Statiskā spinlock_t printf_lock; ... spinlock_lock (& \u200b\u200bprintf_lock); ... spinlock_unlock (& \u200b\u200bprintf_lock);

Funkcija printf izmanto putchar funkciju, kas arī jāraksta. Lai to izdarītu, izveidojiet Commonscreen.c failu ar šādu saturu:

   # iekļaut "tips.h" #definēt ZAĻU 0x2 #definēt MAX_COL 80 // Maksimālais kolonnu skaits #definēt MAX_ROW 25 // Maksimālais rindu skaits #define VRAM_SIZE (MAX_COL * MAX_ROW) // Ekrāna lielums, īsi sakot, s # definēt DEF_VRAM_BASE 0xb8000 // Video atmiņas noklusējuma bāze statiskā neparakstīta char curr_col \u003d 0; statiskā neparakstītā char curr_row \u003d 0; // Rakstīt rakstzīmi pašreizējā ekrāna vietā #define PUT (c) (((neparakstīts īss *) (DEF_VRAM_BASE)) [ (curr_row * MAX_COL) + curr_col] \u003d (GREEN<< 8) | (c)) // Place a character on next screen position static void cons_putc(int c) { switch (c) { case "t": do { cons_putc(" "); } while ((curr_col % 8) != 0); break; case "r": curr_col = 0; break; case "n": curr_row += 1; if (curr_row >\u003d MAX_ROW) (curr_row \u003d 0;) pārtraukums; gadījums "b": ja (curr_col\u003e 0) (curr_col - \u003d 1; PUT ("");) break; noklusējums: PUT (c); curr_col + \u003d 1; if (curr_col\u003e \u003d MAX_COL) (curr_col \u003d 0; curr_row + \u003d 1; if (curr_row\u003e \u003d MAX_ROW) (curr_row \u003d 0;))); ) void putchar (int c) (if (c \u003d\u003d "n") cons_putc ("r"); cons_putc (c);) void clear_screen (void) (curr_col \u003d 0; curr_row \u003d 0; int i; for (i) \u003d 0; i< VRAM_SIZE; i++) cons_putc(" "); curr_col = 0; curr_row = 0; }

Norādītais kods satur vienkāršu loģiku rakstzīmju drukāšanai uz ekrāna teksta režīmā. Šajā režīmā rakstzīmju ierakstīšanai tiek izmantoti divi baiti (viens ar rakstzīmes kodu, otrs ar tā atribūtiem), kas rakstīts tieši uz video atmiņu, kas uzreiz tiek parādīts ekrānā un sākas ar adresi 0xB8000. Ekrāna izšķirtspēja ir 80x25 rakstzīmes. Raksturs tiek tieši izdrukāts, izmantojot makro PUT.
  Tagad trūkst tikai dažu galvenes failu:
  1. Fails ietver screen.h. Deklarē putchar funkciju, kas tiek izmantota printf funkcijā. Faila saturs:

   #ifndef _SCREEN_H #definēt _SCREEN_H void clear_screen (spēkā neesošs); tukšs putčārs (int c); #endif

2. Fails ietverprintf.h. Deklarē printf funkciju, kas tiek izmantota galvenokārt. Faila saturs:

   #ifndef _PRINTF_H #definēt _PRINTF_H int printf (const char * formāts, ...); #endif

3. Failā ietvertsstdarg.h. Pasludina funkcijas atkārtot argumentus, kuru skaits iepriekš nav zināms. Viss fails ir ņemts no projekta www.bitvisor.org/. Ceļš uz failu bitvisor projekta kodā: includecorestdarg.h.
  4. Fails ietver tips.h. Deklarē NULL un lielumu_t. Faila saturs:

   #ifndef _TYPES_H #definēt _TYPES_H #definēt NULL 0 typedef neparakstīts int izmērs_t; #endif

Tādējādi iekļaušanas un kopējās mapēs ir minimālais sistēmas bibliotēkas kods, kas nepieciešams jebkurai programmai.

3. solis. Saistītāja skripta izveidošana:

Mēs izveidojam linker.ld failu, kuru linker izmantos mērķa programmas faila (kernel.bin) ģenerēšanai. Failā jābūt šādam:

IERAKSTS (iekrāvējs) LMA \u003d 0x00100000; SEKCIJAS (. \u003d LMA; .multiboot ALIGN (0x1000): (loader.o (.text)) .text ALIGN (0x1000): (* (. Text)) .rodata ALIGN (0x1000): (* (. Rodata *) ) .data ALIGN (0x1000): (* (. dati)) .bss: (* (COMMON) * (. bss)) / DISCARD /: (* (. komentārs)))

Iebūvētā funkcija ENTRY () ļauj iestatīt ieejas punktu mūsu kodolam. Tieši šajā adresē grims nodos kontroli pēc kodola zābakiem. Izmantojot šo skriptu, saistītājs izveidos bināru failu ELF formātā. ELF fails sastāv no segmentu un sadaļu kopas. Segmentu saraksts ir ietverts programmas galvenes tabulā, sadaļu saraksts - sadaļu galvenes tabulā. Saistītājs darbojas ar sadaļām, attēlu ielādētājs (mūsu gadījumā GRUB) ar segmentiem.


Kā redzat attēlā, segmenti sastāv no sekcijām. Viens no sadaļas aprakstīšanas laukiem ir virtuālā adrese, kurai sadaļai vajadzētu atrasties izpildes laikā. Faktiski segmentā ir 2 lauki, kas raksturo tā atrašanās vietu: segmenta virtuālā adrese un segmenta fiziskā adrese. Segmenta virtuālā adrese ir segmenta pirmā baita virtuālā adrese koda izpildes laikā, segmenta fiziskā adrese ir fiziskā adrese, kurā segments jāielādē. Lietojumprogrammām šīs adreses vienmēr sakrīt. Grub lejupielādē attēlu segmentus to fiziskajā adresē. Tā kā Grub nekonfigurē lapu adresēšanu, segmenta virtuālajai adresei jāatbilst tā fiziskajai adresei, jo arī mūsu programmā virtuālā atmiņa nav konfigurēta.

LMA

Šis izteiciens linkerim norāda, ka visas nākamās sadaļas atrodas aiz LMA adreses.

ALIGN (0x1000)

Iepriekš minētā direktīva nozīmē, ka sadaļa ir izlīdzināta ar 0x1000 baitiem.

Multiboot ALIGN (0x1000): (loader.o (.text))

Atsevišķa vairāku sāknēšanas sadaļa, kurā iekļauta .text sadaļa no faila loader.o, ir paredzēta, lai garantētu, ka vairāku sāknēšanas formāta paraksts nonāk kodola attēla pirmajos 8 kb.

Bss: (* (COMMON) * (. Bss))

* (COMMON) ir zona, kurā atmiņa ir rezervēta instrukcijās .com un.lcomm. Mēs to ievietojam .bss sadaļā.

   / DISCARD /: (* (. Komentārs))

Visas sadaļas, kas apzīmētas ar DISCARD, tiek noņemtas no attēla. Šajā gadījumā mēs izdzēšam sadaļu .comment, kurā ir informācija par saistītāja versiju.

Tagad apkopojiet kodu binārā failā ar šādām komandām:

Kā -o loader.o loader.s gcc -Iinclude -Wall -fno-buildtin -nostdinc -nostdlib -o kernel.o -c kernel.c gcc -Iinclude -Wall -fno-buildtin -nostdinc -nostdlib -o printf.o -c parasts / printf.c gcc -Iekļaut -Wall -fno-buildtin -nostdinc -nostdlib -o screen.o -c common / screen.c ld -T linker.ld -o kernel.bin kernel.o screen.o printf .o iekrāvējs.o

Izmantojot objdump, redzēsim, kā izskatās kodola attēls pēc saistīšanas:

Objdump -ph ./nelnel.bin



Kā redzat, attēla sadaļas sakrīt ar tām, kuras mēs aprakstījām saistītāja skriptā. Saistītājs veidoja 3 segmentus no aprakstītajām sadaļām. Pirmajā segmentā ietilpst sekcijas.multiboot, .text, .rodata, un tā virtuālā un fiziskā adrese ir 0x00100000. Otrajā segmentā ir sadaļas .data un .bss, un tas atrodas 0x00104000. Tātad viss ir gatavs šī faila lejupielādēšanai, izmantojot Grub.

4. solis. Grub bootloader sagatavošana:
  Izveidot mapi:

Mkdir grub

Kopējiet šajā mapē vairākus Grub failus, kas nepieciešami tās instalēšanai attēlā (ja Grub ir instalēta sistēmā, šie faili pastāv). Lai to izdarītu, izpildiet šīs komandas:

Cp / usr / lib / grub / i386-pc / stage1 ./grub/ cp / usr / lib / grub / i386-pc / stage2 ./grub/ cp / usr / lib / grub / i386-pc / fat_stage1_5 ./grub /

Izveidojiet grub / menu.lst failu ar šādu saturu:

Taimauts 3 noklusējuma 0 nosaukums mini_os root (hd0,0) kodola /kernel.bin

5. darbība. Automatizējiet un izveidojiet sāknēšanas attēlu:

Lai automatizētu veidošanas procesu, mēs izmantosim utilītu make. Lai to izdarītu, izveidojiet makefile, kuru gatavojas apkopot avota kods, izveidojiet kodolu un izveidojiet sāknēšanas attēlu. Make failam jābūt šādam saturam:

CC \u003d gcc CFLAGS \u003d -Siena -fno-builtin -nostdinc -nostdlib LD \u003d ld OBJFILES \u003d loader.o common / printf.o common / screen.o kernel.o image: @echo "Creating hdd.img ..." @ dd, ja \u003d / dev / nulle no \u003d. / hdd.img bs \u003d 512 skaits \u003d 16065 1\u003e / dev / null 2\u003e & 1 @echo "Notiek pirmā Bojājamā FAT32 nodalījuma izveidošana ..." @losetup / dev / loop1 ./hdd .img @ (atbalss c; atbalss u; atbalss n; atbalss p; atbalss 1; atbalss; atbalss; atbalss a; atbalss 1; atbalss t; atbalss c; atbalss w;) | fdisk / dev / loop1 1\u003e / dev / null 2\u003e & 1 || true @echo "Nodalījuma pievienošana / dev / loop2 ..." @losetup / dev / loop2 ./hdd.img - offset `echo` fdisk -lu / dev / loop1 | sed -n 10p | awk "(drukāt $$ 3)" `* 512 | bc` --sizelimit `atbalss` fdisk -lu / dev / loop1 | sed -n 10p | awk "(drukāt $$ 4)" `* 512 | bc` @losetup -d / dev / loop1 @echo "Nodalījuma formatēšana ..." @mkdosfs / dev / loop2 @echo "Kopēt kodola un grub failus nodalījumā ..." @mkdir -p tempdir @mount / dev / loop2 tempdir @mkdir tempdir / boot @cp -r grub tempdir / boot / @cp kernel.bin tempdir / @sleep 1 @umount / dev / loop2 @rm -r tempdir @losetup -d / dev / loop2 @echo "GRUB instalēšana. .. "@echo" ierīce (hd0) hdd.img n root (hd0,0) n setup (hd0) n quitn "| grub - 1. partija\u003e / dev / null @echo "Gatavs!" all: kernel.bin atjaunot: notīrīt visu .s.o: as -o $ @ $< .c.o: $(CC) -Iinclude $(CFLAGS) -o $@ -c $< kernel.bin: $(OBJFILES) $(LD) -T linker.ld -o $@ $^ clean: rm -f $(OBJFILES) hdd.img kernel.bin

Divi galvenie mērķi tiek deklarēti failā: visi - apkopo kodolu, un attēls - kas izveido sāknēšanas disku. Visi mērķi, tāpat kā parastā makefile, satur subgoals.s.o un.c.o, kas * .s un * .c failus apkopo objektu failos (* .o), kā arī mērķi kernel.bin ģenerēšanai, kas izsauc linkeru ar iepriekš izveidotu skriptu. Šie mērķi izpilda tieši tās pašas komandas, kas uzskaitītas 3. darbībā.
  Vislielākā interese šeit ir par sāknēšanas attēls  hdd.img (mērķa attēls). Pamazām apsvērsim, kā tas notiek.

Dd, ja \u003d / dev / nulle no \u003d. / Hdd.img bs \u003d 512 skaits \u003d 16065 1\u003e / dev / null 2\u003e & 1

Šī komanda izveido attēlu, ar kuru tiks veikts turpmāks darbs. Sektoru skaits netika izvēlēts nejauši: 16065 \u003d 255 * 63. Pēc noklusējuma fdsik darbojas ar disku tā, it kā tam būtu CHS ģeometrija, kurā galvenes (H) \u003d 255, sektori (S) \u003d 63 un cilindri © ir atkarīgi no diska lieluma. . Tādējādi minimālais diska lielums, ar kuru fdsik utilīta var strādāt, nemainot noklusējuma ģeometriju, ir 512 * 255 * 63 * 1 \u003d 8225280 baiti, kur 512 ir sektora lielums un 1 ir cilindru skaits.
  Pēc tam tiek izveidota nodalījumu tabula:

Losetup / dev / loop1 ./hdd.img (atbalss c; atbalss u; atbalss n; atbalss p; atbalss 1; atbalss; atbalss; atbalss a; atbalss 1; atbalss t; atbalss c; atbalss w;) | fdisk / dev / loop1 1\u003e / dev / null 2\u003e & 1 || taisnība

Pirmā komanda hdd.img failu ievieto bloķēšanas ierīcē / dev / loop1, ļaujot strādāt ar failu kā ierīci. Otrā komanda izveido nodalījumu tabulu ierīcē / dev / loop1, kurā ir 1 primārais sāknēšanas nodalījums  disks, kas aptver visu disku ar FAT32 failu sistēmas etiķeti.
  Tad formatējam izveidoto sadaļu. Lai to izdarītu, uzstādiet to kā bloķēšanas ierīci un veiciet formatēšanu.

Losetup / dev / loop2 ./hdd.img - offset `echo` fdisk -lu / dev / loop1 | sed -n 10p | awk "(drukāt $$ 3)" `* 512 | bc` --sizelimit `atbalss` fdisk -lu / dev / loop1 | sed -n 10p | awk "(drukāt $$ 4)" `* 512 | bc` losstup -d / dev / loop1

Pirmā komanda iepriekš izveidoto nodalījumu iestiprina ierīcē / dev / loop2. Opcija –nosekšana norāda sadaļas sākuma adresi un –izmēra sadaļas beigu adresi. Abi parametri tiek iegūti, izmantojot komandu fdisk.

Mkdosfs / dev / loop2

Lietderība mkdosfs formatē nodalījumu failu sistēma  FAT32.
  Kodola tiešai montāžai iepriekš apspriestās komandas tiek izmantotas klasiskajā makefile sintaksē.
  Tagad apsveriet, kā GRUB instalēt nodalījumā:

Mkdir -p tempdir # izveido pagaidu mount / dev / loop2 direktoriju tempdir # izveido partīciju mkdir direktorijā tempdir / boot # izveido / boot direktoriju cp-r sadaļā grub tempdir / boot / # kopēt grub mapi uz / boot cp kernel.bin tempdir / # kopē kodolu uz miega nodalījuma sakni 1 # pagaidiet Ubuntu umount / dev / loop2 # noņemiet pagaidu mapi rm -r tempdir # izdzēsiet pagaidu mapi kaotatup -d / dev / loop2 # noņemiet nodalījumu

Pēc iepriekšminēto komandu izpildes attēls būs gatavs GRUB’a instalēšanai. Šī komanda instalē GRUB hdd.img diska attēla MBR.

Atbalss "ierīce (hd0) hdd.img n root (hd0,0) n setup (hd0) n quitn" | grub - 1. partija\u003e / dev / null

Viss ir gatavs pārbaudei!

6. solis. Palaist:

Lai apkopotu, izmantojiet komandu:

Padarīt visu

Pēc tam vajadzētu parādīties kernel.bin failam.
  Lai izveidotu sāknēšanas diska attēlu, izmantojiet komandu:

Sudo padarīt attēlu

Tā rezultātā vajadzētu parādīties fails hdd.img.
  Tagad jūs varat boot no hdd.img diska attēla. To var pārbaudīt ar šādu komandu:

Qemu-hda hdd.img -m 32

Qemu-system-i386 -hda hdd.img




Lai pārbaudītu reālu mašīnu, jums tas jāveido dd no zibatmiņas diska un jā boot no tā. Piemēram, ar šo komandu:

Sudo dd, ja \u003d. / Hdd.img no \u003d / dev / sdb

Apkopojot, mēs varam teikt, ka veikto darbību rezultātā tiek iegūts avota kodu un skriptu komplekts, kas ļauj veikt dažādus eksperimentus sistēmas programmēšanas jomā. Pirmais solis ir sperts, lai izveidotu sistēmas programmatūru, piemēram, hipervizorus un operētājsistēmas.