Punteros determinan el tipo de objeto de un programa de software asume está en una posición de memoria específica. Los punteros pueden ser convertidos en números enteros específicos o referencias implícitas. Los punteros pueden hacer referencia a otros punteros y matrices de datos. desreferenciar implícita de punteros introduce el riesgo de errores de software y las vulnerabilidades que no se producen cuando los punteros se definen explícitamente.
Explícita Versus Punteros implícitos
conversiones explícitas puntero cambia un tipo de puntero a otro tipo de puntero. Cambio de un número entero o byte a 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 *. Los 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 están implícitamente eliminan las referencias a medida que adquieren el valor de los valores en el lado izquierdo de la instrucción de asignación. Todo dereferencing está implícito en Java.
Operadores de eliminación de referencias
En C ++, los punteros a miembros de la clase deben ser dereferenciados en el contexto de un objeto de clase. Una. Operador elimina referencia a un puntero a un miembro de una clase de objeto. Una flecha seguido por un asterisco elimina referencia a un puntero a un miembro con un puntero a un objeto de clase. Usando el "" operador de indirección en el lenguaje de programación C se llama eliminación de referencias a 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
Eliminación de referencias a un puntero puede dar lugar a valores no válidos si se hace referencia a la dirección después del final de su vida útil. Cuando se elimina la referencia de un puntero, el programa llama el valor al que hace referencia el puntero. punteros nulos tienen un valor por defecto si 0x0 estática y sin inicializar. De acuerdo con "Una Guía para Kernel Explotación" de Enrico Perla, "Si una ruta kernel intenta eliminar referencia a un puntero NULL, simplemente se trata de usar el 0x0 dirección 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 mediante el comando * ptr antes de que el puntero sin referencia se puede utilizar en otras partes de un programa en C.
Si el * ptr no se ha asignado un valor antes de que se hace referencia, el programa puede bloquearse. Los punteros a miembros de datos puede resultar en una mala eliminar la referencia. 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 ++ trampas" de Stephen C. Dewhurst afirma que "un puntero a miembro se refiere a un miembro específico de un objeto no especificado." El objeto referenciado debe ser suministrado, así como para el puntero para que funcione correctamente.
vulnerabilidades
desreferenciar 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 convierte eliminan las referencias. Eliminación de referencias a un puntero no inicializado hace que el software para hacer referencia a una ubicación de memoria que no está validada. Sin controles sobre el origen o destino del puntero sin referencia, los hackers pueden utilizar esta vulnerabilidad para pasar una dirección de núcleo para el núcleo de software y modificar su memoria con sus propios valores deseados en lugar de los datos del usuario.