? Punteros determinan el tipo de objeto de un programa de software supone está en una posición de memoria específica. Los punteros pueden ser convertidos a números enteros específicos o referencias implícitas . Los punteros pueden hacer referencia a otros punteros y matrices de datos. Desreferenciación implícita de punteros introduce el riesgo de errores de software y vulnerabilidades que no se producen cuando los punteros se definen explícitamente . Punteros explícitos Versus implícita
La variable a la derecha se hace referencia implícitamente a la ecuación de la izquierda.
conversiones explícitas puntero cambia un tipo puntero a otro tipo de puntero . Cambio de un número entero o byte de un puntero es también una conversión explícita . C + + permite la conversión implícita de un tipo de puntero de tipo void * . Literales nulos pueden tener una conversión implícita a cualquier tipo de puntero . Variables en el lado derecho de una sentencia de asignación se anula la referencia implícita a medida que adquieren el valor de los valores en el lado izquierdo de la instrucción de asignación . Todos desreferenciación está implícita en Java.
Desreferenciación Operadores
En C + +, los punteros a miembros de la clase deben desreferenciados en el contexto de una clase de objeto . A. * Desreferencias operador un puntero a un miembro de una clase de objeto . Una flecha seguida de un asterisco desreferencia de un puntero a un miembro con un puntero a un objeto de clase . Utilizando el operador "*" indirecto en el lenguaje de programación C se llama eliminación de referencias de un puntero . Un puntero se define mediante la expresión ptr = variable o valor . Un puntero sin referencia se define mediante la expresión * ptr = variable o valor .
Errores
desreferenciación un puntero puede dar lugar a valores no válidos si la dirección se hace referencia después del final de su vida útil . Cuando se eliminan las referencias de un puntero , el programa llama el valor referenciado por el puntero. Punteros nulos tienen un valor de 0x0 por defecto si no inicializado y estática . Según la "Guía para la Explotación del núcleo " de Enrico Perla, " Si una ruta kernel intenta eliminar la referencia de un puntero NULL , simplemente tratar de utilizar la dirección de 0x0 de memoria , lo que probablemente dará lugar a una condición de pánico , ya que nada se asigna allí . " el puntero se debe definir con el comando * ptr antes de que el puntero sin referencia se puede utilizar en un programa C en otro lugar.
Si no se asigna el * ptr un valor antes de que se hace referencia , el programa puede bloquearse. Punteros a miembros de datos puede dar lugar a una mala eliminación de referencias . Si el puntero no está mirando hacia arriba los valores de una serie de objetos de la clase y no se puede determinar el valor de la variable , se producirá un error. "C + + Gotchas " por Stephen C. estados Dewhurst que " un puntero a miembro se refiere a un miembro específico de un objeto no especificado. " El objeto de referencia debe ser suministrado , así como para el puntero para que funcione correctamente .
< Br > vulnerabilidades
desreferenciación implícita de un puntero no inicializado crea una vulnerabilidad en el código del software. Corrupción de memoria corrompe un puntero que se eliminan las referencias . Desreferenciación un puntero no inicializado hace que el software para hacer referencia a una ubicación de memoria que no está validado . Sin el control de la fuente o el destino del puntero sin referencia , los hackers pueden utilizar esta vulnerabilidad para aprobar una dirección de núcleo para el núcleo del software y modificar su memoria con sus propios valores deseados en lugar de los datos del usuario.
< Br >