De Wikipedia, la enciclopedia libre
  (Redirigido desde el byte nulo )
Saltar a navegación Saltar a búsqueda

El carácter nulo (también terminador nulo ) es un carácter de control con valor cero. [1] [2] [3] [4] Está presente en muchos conjuntos de caracteres , incluidos los definidos por los códigos Baudot e ITA2 , ISO / IEC 646 (o ASCII ), el código de control C0 , el conjunto de caracteres codificados universal ( o Unicode ) y EBCDIC . Está disponible en casi todos los lenguajes de programación convencionales . [5] A menudo se abrevia como NUL.(o NULL aunque en algunos contextos ese término se usa para el puntero nulo , un objeto diferente). En los códigos de 8 bits, se conoce como byte nulo .

El significado original de este carácter era como NOP: cuando se envía a una impresora o terminal , no hace nada (algunos terminales, sin embargo, lo muestran incorrectamente como espacio ). Cuando se utilizaron teleimpresores electromecánicos como dispositivos de salida de computadora, se enviaron uno o más caracteres nulos al final de cada línea impresa para dar tiempo a que el mecanismo regresara a la primera posición de impresión en la siguiente línea. [ cita requerida ] En cinta perforada, el carácter se representa sin ningún agujero, por lo que una nueva cinta sin perforar se llena inicialmente con caracteres nulos y, a menudo, se puede "insertar" texto en un espacio reservado de caracteres nulos al perforar los nuevos caracteres en la cinta sobre los nulos.

Hoy en día, el carácter tiene mucho más significado en C y sus derivados y en muchos formatos de datos, donde sirve como un carácter reservado utilizado para indicar el final de una cadena , [6] a menudo llamada cadena terminada en nulo . [7] Esto permite que la cadena tenga cualquier longitud con solo la sobrecarga de un byte; la alternativa de almacenar un recuento requiere un límite de longitud de cadena de 255 o una sobrecarga de más de un byte (hay otras ventajas / desventajas descritas en el artículo de cadena terminada en nulo ).

Representación [ editar ]

El carácter nulo a menudo se representa como la secuencia de escape \0 en el código fuente , cadenas literales o constantes de caracteres. [8] En muchos lenguajes ( como C , que introdujo esta notación), esta no es una secuencia de escape separada, sino una secuencia de escape octal con un solo dígito octal 0; como consecuencia, \0no debe ir seguido de ninguno de los dígitos 0hasta 7; de lo contrario, se interpreta como el inicio de una secuencia de escape octal más larga. [9] Otras secuencias de escape que se encuentran en uso en varios idiomas son \000, \x00, \z, o \u0000. Se puede colocar un carácter nulo en una URLcon el código de porcentaje %00 .

La capacidad de representar un carácter nulo no siempre significa que la cadena resultante se interpretará correctamente, ya que muchos programas considerarán que el nulo es el final de la cadena. Por lo tanto, la capacidad de escribirlo (en caso de una entrada del usuario no verificada ) crea una vulnerabilidad conocida como inyección de bytes nulos y puede conducir a vulnerabilidades de seguridad. [10]

En notación de intercalación, el carácter nulo es ^@. En algunos teclados, se puede ingresar un carácter nulo manteniendo presionado Ctrly presionando @(en los diseños de EE. UU., Simplemente Ctrl+ funcionará 2a menudo, no es necesario ⇧ Shiftobtener el signo @).

En la documentación, el carácter nulo a veces se representa como un símbolo de ancho de em única que contiene las letras "NUL". En Unicode , hay un carácter con un glifo correspondiente para la representación visual del carácter nulo, "símbolo para nulo", U + 2400 (␀); no debe confundirse con el carácter nulo real, U + 0000.

Codificación [ editar ]

En todos los juegos de caracteres modernos, el carácter nulo tiene un valor de punto de código de cero. En la mayoría de las codificaciones, esto se traduce a una sola unidad de código con un valor cero. Por ejemplo, en UTF-8 es un solo byte cero. Sin embargo, en UTF-8 modificado, el carácter nulo se codifica como dos bytes: 0xC0, 0x80. Esto permite que el byte con el valor cero, que ahora no se usa para ningún carácter, se use como terminador de cadena.

Referencias [ editar ]

  1. ^ Formato ASCII para intercambio de red . IETF . segundo. 5.2. doi : 10.17487 / RFC0020 . RFC 20 . NUL (Nulo): El carácter de todos ceros que puede servir para completar el tiempo de llenado y el llenado de medios.
  2. ^ "El conjunto de caracteres de control de la ISO 646" (PDF) . Secretaría ISO / TC 97 / SC 2. 1975-12-01. pag. 4.4. Archivado desde el original (PDF) el 12 de mayo de 2014. Posición: 0/0, Nombre: Nulo, Abreviatura: Nulo
  3. ^ "Carácter Unicode 'NULL' (U + 0000)" . Consultado el 20 de octubre de 2018 .
  4. ^ "Controles C0 y latín básico" (PDF) . Consorcio Unicode. 2018 . Consultado el 20 de octubre de 2018 .
  5. ^ "Un byte con todos los bits establecidos en 0, llamado carácter nulo , existirá en el juego de caracteres de ejecución básico; se usa para terminar una cadena de caracteres literal". - ANSI / ISO 9899: 1990 (el estándar ANSI C), sección 5.2.1
  6. ^ "Una cadena es una secuencia contigua de caracteres terminada por el primer carácter nulo e incluido" - ANSI / ISO 9899: 1990 (el estándar ANSI C), sección 7.1.1
  7. ^ Borrador de trabajo, Estándar para el lenguaje de programación C ++ (PDF) (Borrador de trabajo del estándar ISO 14882), ISO / IEC , 28 de febrero de 2011, p. 427, N3242 = 11-0012 , obtenido el 27 de febrero de 2013 , Una cadena de bytes terminada en nulo , o NTBS, es una secuencia de caracteres cuyo elemento de dirección más alta con contenido definido tiene el valor cero (el carácter nulo de terminación ); ningún otro elemento de la secuencia tiene el valor cero.
  8. ^ Kernighan y Ritchie, C , p. 38
  9. ^ En YAML, esta combinación es una secuencia de escape separada .
  10. ^ Sección Null Byte Injection WASC Threat Classification Null Byte Attack.

Enlaces externos [ editar ]

  • Inyección de bytes nulos Clasificación de amenazas WASC Sección de ataque de bytes nulos
  • Poison Null Byte Introducción Introducción a Nullify 9
  • Ataque de bytes