Unsafe Rust gir deg mer kontroll over minnet. Lær hvordan du arbeider med usikker rust og forstå de iboende risikoene forbundet med å bruke den.
Minnesikkerhetsgarantier er et av Rusts salgsargumenter; Rust er imidlertid ikke immun mot feil og sårbarheter. Ettersom Rusts lånekontroll håndhever eierskapsmodellen, er det en liten avveining i kompileringstiden under sikkerhetskontroller.
Rust gir funksjonalitet for å omgå sikkerhetssjekker i en funksjon kalt "Usikker rust" som lar deg unngå disse sikkerhetskontrollene for ytelsesformål. Unsafe Rust er et kraftig verktøy for å skrive effektiv systemprogramvare på lavt nivå med Rust.
Forstå usikker rust
Unsafe Rust er et sett med funksjoner som du kan bruke til å omgå Rusts sikkerhetsgarantier i bytte mot større kontroll over minnet. De usikre Rust-funksjonene inkluderer råpekere, usikre funksjoner og usikre egenskaper.
Formålet med usikre Rust er å gi utviklere muligheten til å skrive systemkode på lavt nivå uten å ofre ytelsen. Du kan få tilgang til og manipulere minneressurser direkte og øke ytelsen til applikasjonen din med usikre Rust.
Unsafe Rust er spesielt nyttig i operativsystemutvikling, nettverksprogrammering og spillutvikling, der ytelsen er kritisk. I disse sammenhengene trenger du finmasket kontroll over programmets minneoppsett og kodeoppførsel. Unsafe Rust lar deg oppnå dette ved å tilby abstraksjoner på lavt nivå for implementering av komplekse algoritmer og datastrukturer.
Arbeide med usikker rust
Usikre blokker gir funksjonaliteten for bruk av usikre rustfunksjoner. Du vil bruke utrygt nøkkelord for å definere usikre blokker som inneholder gyldig rustkode.
Slik kan du bruke en usikker blokk for direkte tilgang til minnet for verdimodifisering:
fnhoved-() {
lamut x = 10;utrygt {
la rå = &mut x som *muti32;
*rå = 20;
}
println!("x er nå {}", x);
}
De x variabel er et foranderlig heltall. I utrygt blokk, den rå pekeren til x tildeler en ny verdi til x. Koden i utrygt blokken er gyldig, men ikke sikker, og var ikke i en usikker blokk; programmet krasjer.
I tillegg kan du definere usikre funksjoner ved å legge til utrygt nøkkelord før fn nøkkelord i funksjonserklæringene dine.
utrygtfnutføre_usikker_operasjon() {
// Din usikre kode her
}
Du trenger en usikker blokkering for å kalle opp usikre funksjoner i andre deler av programmet.
fnhoved-() {
utrygt {
utføre_usikker_operasjon();
}
}
Merkefunksjoner med utrygt nøkkelord betyr ikke at funksjonen er iboende farlig. Det indikerer at funksjonen inneholder kode som krever ekstra forsiktighet ved bruk.
Risikoene forbundet med bruk av usikker rust
Feil bruk av utrygg rust kan føre til minnefeil, dataløp og andre sikkerhetssårbarheter. Derfor er det avgjørende å forstå risikoene mens du følger beste praksis knyttet til usikre Rust for å skrive sikker og effektiv kode.
Hovedrisikoen forbundet med utrygg rust er potensialet for minnerelaterte feil som kan føre til krasj, sikkerhetssårbarheter og udefinert kodeatferd.
Minnefeil oppstår når et program forsøker å få tilgang til minnet unormalt; programmet krasjer til slutt eller oppfører seg uforutsigbart.
Dataras oppstår når to eller flere programtråder får tilgang til samme minnestykke samtidig, og kl minst én av trådene endrer verdien i minnet, og får dermed programmet til å oppføre seg uventet.
Du kan utløse bufferoverløp ved feilaktig bruk av usikker rust. Bufferoverløp oppstår når et program skriver data utover slutten av en buffer. Bufferoverflyt kan føre til at programmet krasjer eller tillate angripere å kjøre vilkårlig kode.
En annen sårbarhet er use-after-free (UAF) som oppstår når et program får tilgang til minnet etter verdideallokering. UAF kan få programmet til å oppføre seg uforutsigbart og potensielt introdusere sikkerhetssårbarheter.
På grunn av disse sårbarhetene, når du arbeider med usikker Rust, er det viktig å dypt forstå Rusts eierskap og hvordan lånemodellen fungerer i Rust mens du følger beste praksis.
Rusts minnehåndtering er fleksibel
Rusts eierskapsmodell administrerer minne automatisk, noe som reduserer risikoen for minnerelaterte feil. Lån gir flere variabler tilgang til de samme minneressursene uten konflikter samtidig.
Rusts minneadministrasjon gir fleksibiliteten, sikkerheten og ytelsen som trengs for moderne programvareutvikling, noe som gjør Rust til et kraftig verktøy for å skrive effektiv og pålitelig kode.