Pekaren snurrar
Inom datavetenskap är pekarswizzling omvandlingen av referenser baserade på namn eller position till direkta pekarreferenser ( minnesadresser ) . Det utförs vanligtvis under deserialisering eller laddning av ett flyttbart objekt från en diskfil, såsom en körbar fil eller pekarbaserad datastruktur .
Den omvända operationen, som ersätter minnespekare med positionsoberoende symboler eller positioner, kallas ibland unswizzling och utförs under serialisering (sparande).
Exempel
Det är lätt att skapa en länkad listdatastruktur med hjälp av element som detta:
struct node { int data ; struct node * nästa ; };
Men att spara listan i en fil och sedan ladda om den kommer (på de flesta operativsystem) att bryta varje länk och göra listan värdelös eftersom noderna nästan aldrig kommer att laddas in på samma minnesplatser. Ett sätt att på ett användbart sätt spara och hämta listan är att tilldela ett unikt id-nummer till varje nod och sedan ta bort pekarna genom att omvandla dem till ett fält som anger id-numret för nästa nod:
struct node_saved { int data ; int id_number ; int id_number_of_next_node ; };
Poster som dessa kan sparas till en fil i valfri ordning och laddas om utan att bryta listan. Andra alternativ inkluderar att spara filförskjutningen för nästa nod eller ett nummer som indikerar dess position i sekvensen av sparade poster, eller helt enkelt att spara noderna i ordningsföljd i filen.
Efter att ha laddat en sådan lista är det krångligt och ineffektivt att hitta en nod baserat på dess nummer (seriesökning). Att gå igenom listan gick väldigt snabbt med de ursprungliga "nästa"-pekarna. För att konvertera listan tillbaka till dess ursprungliga form, eller svepa pekarna, måste du hitta adressen till varje nod och omvandla id_number_of_next_node -fälten tillbaka till direkta pekare till höger nod.
Metoder för att avbryta
Det finns ett potentiellt obegränsat antal formulär som en pekare kan föras in i, men några av de mest populära inkluderar:
- Förskjutningen av det pekade objektet i filen
- Indexet för det pekade objektet i någon sekvens av poster
- En unik identifierare som innehas av det pekade objektet, till exempel en persons personnummer ; i databaser avaktiveras alla pekare på detta sätt (se Främmande nyckel ) .
Metoder för swizzling
Swizzling i det allmänna fallet kan vara komplicerat. Referensdiagrammet för pekare kan innehålla ett godtyckligt antal cykler ; detta komplicerar upprätthållandet av en mappning från de gamla oavbrutna värdena till de nya adresserna. Associativa arrayer är användbara för att underhålla mappningen, medan algoritmer som bredd-först-sökning hjälper till att korsa grafen, även om båda dessa kräver extra lagring. Olika serialiseringsbibliotek tillhandahåller allmänna swizzling-system . I många fall kan swizzling dock utföras med förenklade antaganden, såsom ett träd eller liststruktur med referenser.
De olika typerna av swizzling är:
- Automatisk svisning
- Swissande på begäran
Potentiella säkerhetsbrister
För säkerhetens skull måste av- och swizzling genomföras med stor försiktighet. I synnerhet kan en angripares presentation av en specialgjord fil tillåta åtkomst till adresser utanför de förväntade och korrekta gränserna. I system med svagt minnesskydd kan detta leda till exponering av konfidentiell data eller modifiering av kod som sannolikt kommer att exekveras. Om systemet inte implementerar skydd mot exekvering av data kan systemet bli allvarligt äventyrat av installationen av olika typer av skadlig programvara .
Skyddsmetoder inkluderar verifieringar innan data släpps till en applikation:
- Att varje offset ligger inom gränserna för den lästa datan.
- Att en tabell med index och de poster som pekade på är på liknande sätt begränsad.
- Att identifierare är unika och, om de är känsliga, krypterade.
- Att all data med variabel längd är begränsad till längder som inte överstiger den faktiska allokeringen.
- Att anslagen är av rimlig storlek.
- Att gjorda tilldelningar som inte är laddade med läsdata rensas, eller laddas med något specifikt mönster.
Se även
- Omlokalisering , en ivrig form av pekaremodifiering
Vidare läsning
- Wilson, Paul R. (1991-07-01) [juni 1991]. "Pekaren sveper vid sidfelstid: stödjer effektivt enorma adressutrymmen på standardhårdvara". ACM SIGARCH datorarkitekturnyheter . Vol. 19, nr. 4. s. 6–13. doi : 10.1145/122576.122577 .
- Kemper, Alfons; Kossmann, Donald (juli 1995). "Anpassningsbara pekarsvirpande strategier i objektbaser: design, realisering och kvantitativ analys" ( PDF) . The International Journal on Very Large Data Bases (VLDB) . 4 (3): 519–567. doi : 10.1007/BF01231646 . S2CID 4556203 . Arkiverad (PDF) från originalet 2008-07-25 . Hämtad 2021-12-08 . (49 sidor)
- Crawford, Derek (juni 1992). Dereks ABC av C . Vol. 2. s. 340–343.