? Ponteiros determinar o tipo de objeto de um programa de software assume está em uma posição de memória específica. Ponteiros podem ser convertidos em números inteiros específicos ou referências implícitas . Ponteiros podem fazer referência a outros ponteiros e matrizes de dados. Dereferencing implícita de ponteiros introduz o risco de erros de software e vulnerabilidades que não ocorrem quando os ponteiros são definidos explicitamente. Explícita Versus ponteiros implícitos
A variável à direita é referenciada implicitamente a equação do lado esquerdo.
Conversões explícitas ponteiro mudar um tipo de ponteiro para outro tipo de ponteiro. Mudando um inteiro ou byte para um ponteiro é também uma conversão explícita . C + + permite a conversão implícita de um tipo de ponteiro do tipo void * . Literais nulos podem ter uma conversão implícita para qualquer tipo de ponteiro . Variáveis no lado direito de uma instrução de atribuição são implicitamente desreferenciado como eles assumem o valor dos valores no lado esquerdo da instrução de atribuição . Todos dereferencing está implícito em Java.
Operadores dereferencing
C + +, ponteiros para os membros da classe devem ser desreferenciado no contexto de um objeto de classe . A * operador. Dereferences um ponteiro para um membro de um objeto de classe . Uma seta seguida de um asterisco dereferences um ponteiro para um membro com um ponteiro para um objeto de classe . Usando o "*" operador de indireção na linguagem de programação C é chamado de referência um ponteiro. Um ponteiro é definido usando a expressão ptr = variável ou valor. Um ponteiro dereferenced é definida utilizando a expressão * ptr = variável ou valor.
Erros
dereferencing um ponteiro pode resultar em valores inválidos se o endereço é referenciado após o fim da sua vida útil. Quando um ponteiro é referência , o programa chama o valor referenciado pelo ponteiro . Ponteiros nulos têm um valor de 0x0 padrão se estático e não inicializado. De acordo com o "Guia para Kernel Exploração " por Enrico Perla, " Se um caminho do kernel tenta excluir a referência um ponteiro NULL, ele vai simplesmente tentar usar o 0x0 endereço de memória , o que provavelmente vai resultar em uma condição de pânico, uma vez que nada é mapeado lá . " o ponteiro deve ser definido com o comando * ptr antes de o ponteiro dereferenced podem ser usados em outros lugares em um programa C .
Se o * ptr não é atribuído um valor antes de ser referenciado, o programa pode falhar. Ponteiros para membros de dados pode resultar em um mau desreferenciava . Se o ponteiro não está olhando para cima os valores de um array de objetos de classe e não pode determinar o valor da variável , ocorrerá um erro . " C + + Gotchas " por Stephen C. Dewhurst afirma que " um ponteiro para membro refere-se a um membro específico de um objeto não especificado . " O objeto referenciado deve ser fornecido , bem como para o ponteiro para funcionar corretamente .
< Br > vulnerabilidades
dereferencing implícita de um ponteiro não inicializado cria uma vulnerabilidade no código do software. Corrupção de memória corrompe um ponteiro que se torna dereferenced . Dereferencing um ponteiro não inicializado faz com que o software para fazer referência a uma posição de memória que não é validado . Sem controlos sobre a origem ou destino do ponteiro dereferenced , os hackers podem usar essa vulnerabilidade para passar um endereço de kernel para o kernel do software e modificar sua memória com os seus próprios valores desejados no lugar dos dados do usuário.
< Br >