? Pekare avgöra vilken typ av objekt som ett program förutsätter är i en viss minnesplats . Pekare kan omvandlas till specifika heltal eller implicita referenser . Pekare kan referera till andra pekare och data arrayer . Implicit dereferencing av pekare introducerar risken för programfel och sårbarheter som inte förekommer när pekare uttryckligen definieras . Explicit Versus Implicit Pekare
variabeln till höger är underförstått hänvisas till ekvationen till vänster .
Explicit pekare omvandlingar ändra en pekare typ till en annan pekare typ . Ändra ett heltal eller byte till en pekare är också en uttalad konvertering . C + + gör det möjligt att implicit konvertering från en pekartyp att skriva void * . Null literals kan ha en implicit konvertering till någon pekartyp . Variabler på höger sida av ett uppdrag uttalande är underförstått dereferenced som de tar på värdet av de värden på den vänstra sidan av uppdraget uttalande . All dereferencing är implicit i Java .
Dereferencing Operatörer
C + + , måste pekare till eleverna att dereferenced inom ramen för en klass objekt . A . * Operatör dereferences en pekare till en ledamot med en klass objekt . En pil följt av en asterisk dereferences en pekare till ett element med en pekare till ett klassobjekt . Använda " * " indirection operatör i programmeringsspråket C kallas dereferencing en pekare . En pekare definieras med uttrycket ptr = variabel eller värde . En dereferenced pekare definieras med uttrycket * ptr = variabel eller värde .
Fel
Dereferencing en pekare kan resultera i ogiltiga värden om adressen refereras efter slutet av sin livslängd . När en pekare dereferenced , anropar programmet värdet refereras av pekaren . Null pekare har en standard 0x0 värde om statiska och oinitierad . Enligt " A Guide to Kernel Exploitation " av Enrico Perla , " Om en kernel väg försöker avreferera en NULL pekare , kommer det helt enkelt försöka att använda 0x0 minnesadress , vilket sannolikt kommer att resultera i ett panik tillstånd , eftersom ingenting mappas det . " pekaren måste definieras med hjälp av * ptr kommandot innan dereferenced pekare kan användas på andra ställen i ett C-program .
Om * ptr inte tilldelas ett värde innan de refereras , kan programmet krascha . Pekare till data medlemmar kan resultera i en dålig dereference . Om pekaren inte ser upp värden från en array av klass objekt och kan inte bestämma värdet av variabeln , uppstår ett fel . " C + + Gotchas " av Stephen C. Dewhurst påstår att " en pekare till medlem hänvisar till en specifik medlem av ett ospecificerat objekt . " Den refererade objektet måste tillföras även för pekaren ska fungera korrekt .
Sårbarheter
Implicit dereferencing av en oinitierad pekare skapar en sårbarhet i programkod . Minnesfel korrumperar en pekare som blir dereferenced . Dereferencing en oinitierad pekare gör att programvaran för att referera till en minnesplats som inte är validerad . Utan kontroll av källa eller destination dereferenced pekare , kan hackare använda denna sårbarhet för att passera en kärna adress till programvaran kärnan och modifiera dess minne med deras önskade egna värderingar i stället för användarens data .