Nesaugus rūdys suteikia daugiau galimybių valdyti atmintį. Sužinokite, kaip dirbti su nesaugiomis rūdimis, ir supraskite su jo naudojimu susijusią riziką.
Atminties saugumo garantijos yra vienas iš Rust pardavimo taškų; tačiau Rust nėra apsaugotas nuo klaidų ir pažeidžiamumų. Kadangi „Rust“ skolinimosi tikrintuvas įgyvendina nuosavybės modelį, saugos patikrų metu yra nedidelis kompiliavimo laikas.
Rūdys suteikia galimybę apeiti saugos patikras naudojant funkciją, vadinamą „Nesaugi rūdys“, kuri leidžia išvengti šių saugos patikrų veikimo tikslais. „Unsafe Rust“ yra galingas įrankis, skirtas efektyviai žemo lygio sistemų programinei įrangai rašyti naudojant „Rust“.
Nesaugių rūdžių supratimas
Nesaugus rūdys yra funkcijų rinkinys, kurį galite naudoti norėdami apeiti Rust saugumo garantijas mainais už didesnę atminties kontrolę. Nesaugios rūdžių funkcijos apima neapdorotas nuorodas, nesaugias funkcijas ir nesaugius bruožus.
Nesaugios Rust paskirtis – suteikti kūrėjams galimybę rašyti žemo lygio sistemos kodą neprarandant našumo. Galite tiesiogiai pasiekti ir valdyti atminties išteklius bei padidinti programos našumą naudodami nesaugią Rust.
Nesaugus rūdys yra ypač patogus kuriant operacinę sistemą, programuojant tinklą ir kuriant žaidimus, kur našumas yra labai svarbus. Tokiais atvejais jums reikės tiksliai valdyti programos atminties išdėstymą ir kodo veikimą. Nesaugus rūdys leidžia tai pasiekti teikiant žemo lygio abstrakcijas sudėtingiems algoritmams ir duomenų struktūroms įgyvendinti.
Darbas su nesaugiomis rūdimis
Nesaugūs blokai suteikia nesaugių rūdžių funkcijų naudojimo funkcionalumą. Jūs naudosite nesaugu raktinis žodis, skirtas apibrėžti nesaugius blokus su galiojančiu Rust kodu.
Štai kaip galite naudoti nesaugų bloką tiesioginei prieigai prie atminties ir vertės modifikavimo:
fnpagrindinis() {
leistimut x = 10;nesaugu {
leisti žalias = &mut x kaip *muti32;
*neapdorotas = 20;
}
println!("x dabar yra {}", x);
}
The x kintamasis yra kintamas sveikasis skaičius. Viduje nesaugu blokas, neapdorotas žymeklis x priskiria naują reikšmę x. Kodas, esantis nesaugu blokas galioja, bet nėra saugus ir nebuvo nesaugiame bloke; programa sugenda.
Be to, galite apibrėžti nesaugias funkcijas pridėdami nesaugu raktinis žodis prieš fn raktinį žodį savo funkcijų deklaracijose.
nesaugufnatlikti_nesaugią_operaciją() {
// Čia jūsų nesaugus kodas
}
Jums reikės nesaugaus bloko, kad galėtumėte iškviesti nesaugias funkcijas kitose programos dalyse.
fnpagrindinis() {
nesaugu {
atlikti_nesaugią_operaciją();
}
}
Žymėjimo funkcijos su nesaugu raktinis žodis nereiškia, kad funkcija yra pavojinga. Tai rodo, kad funkcijoje yra kodas, kurį naudojant reikia būti ypač atsargiems.
Rizika, susijusi su nesaugių rūdžių naudojimu
Netinkamai naudojant nesaugią Rust gali atsirasti atminties klaidų, duomenų lenktynių ir kitų saugumo spragų. Todėl labai svarbu suprasti riziką ir laikytis geriausios praktikos, susijusios su nesaugiu rūdžiu, kuriant saugų ir našų kodą.
Pagrindinė rizika, susijusi su nesaugiu rūdijimu, yra su atmintimi susijusių klaidų, kurios gali sukelti gedimus, saugumo spragas ir neapibrėžtą kodo elgesį.
Atminties klaidos atsiranda, kai programa bando neįprastai pasiekti atmintį; programa galiausiai sugenda arba elgiasi nenuspėjamai.
Duomenų lenktynės įvyksta, kai dvi ar daugiau programų gijų vienu metu pasiekia tą pačią atminties dalį ir tuo pačiu metu bent viena iš gijų keičia reikšmę atmintyje, todėl programa veikia netikėtai.
Galite suaktyvinti buferio perpildymą netinkamai naudodami nesaugias rūdis. Buferio perpildymas atsiranda, kai programa įrašo duomenis už buferio pabaigos. Dėl buferio perpildymo programa gali sugesti arba leisti užpuolikams vykdyti savavališką kodą.
Kitas pažeidžiamumas yra naudojimo po nemokumo (UAF), kuris atsiranda, kai programa pasiekia atmintį po vertės panaikinimo. UAF gali priversti programą veikti nenuspėjamai ir gali atsirasti saugumo spragų.
Dėl šių pažeidžiamumų, dirbant su nesaugiomis rūdimis, labai svarbu suprasti Rusto nuosavybę ir kaip skolinimosi modelis veikia Ruste vadovaudamiesi geriausia praktika.
„Rust“ atminties valdymas yra lankstus
„Rust“ nuosavybės modelis atmintį valdo automatiškai, sumažindamas su atmintimi susijusių klaidų riziką. Skolinimasis leidžia keliems kintamiesiems pasiekti tuos pačius atminties išteklius be konfliktų vienu metu.
„Rust“ atminties valdymas suteikia lankstumo, saugumo ir našumo, reikalingo šiuolaikinei programinės įrangos kūrimui, todėl „Rust“ yra galingas įrankis veiksmingam ir patikimam kodui rašyti.