Символ нуль (также нулевая терминатора ) представляет собой управляющий символ с нулевым значением. [1] [2] [3] [4] Он присутствует во многих наборах символов , включая те, которые определены кодами Бодо и ITA2 , ISO / IEC 646 (или ASCII ), управляющим кодом C0 , универсальным набором кодированных символов ( или Unicode ) и EBCDIC . Он доступен практически на всех основных языках программирования . [5] Часто сокращается как NUL.(или NULL, хотя в некоторых контекстах этот термин используется для нулевого указателя , другого объекта). В 8-битных кодах он известен как нулевой байт .
Первоначальное значение этого символа было похоже на NOP - при отправке на принтер или терминал он ничего не делает (однако некоторые терминалы неправильно отображают его как пробел ). Когда электромеханические телепринтеры использовались в качестве компьютерных устройств вывода, один или несколько нулевых символов отправлялись в конце каждой напечатанной строки, чтобы дать механизму время вернуться в первую позицию печати на следующей строке. [ необходима цитата ] На перфоленте символ представлен вообще без отверстий, поэтому новая неперфорированная лента изначально заполняется нулевыми символами, и часто текст может быть «вставлен» в зарезервированное пространство нулевых символов путем перфорирования новых символов в ленту по нулям.
Сегодня персонаж имеет гораздо большее значение в C и его производных и во многих форматах, где он служит зарезервированный символом , используемым для обозначения конец строки , [6] часто называется строкой завершается нулем . [7] Это позволяет строке иметь любую длину с затратами только на один байт; Альтернатива хранения счетчика требует либо ограничения длины строки 255, либо служебных данных более одного байта (есть другие преимущества / недостатки, описанные в статье о строках с нулевым символом в конце ).
Представление
Нулевой символ часто представляется как escape-последовательность \0
в исходном коде , строковых литералах или символьных константах. [8] Во многих языках ( таких как C , в котором введена эта нотация) это не отдельная escape-последовательность, а восьмеричная escape-последовательность с одной восьмеричной цифрой 0; как следствие, \0
не должно сопровождаться какой - либо из цифр 0
через 7
; в противном случае это интерпретируется как начало более длинной восьмеричной escape-последовательности. [9] Другие управляющие последовательности , которые находятся в эксплуатации в различных языках \000
, \x00
, \z
или \u0000
. Нулевой символ может быть помещен в URL-адрес с кодом процента %00
.
Возможность представлять нулевой символ не всегда означает, что результирующая строка будет правильно интерпретирована, так как многие программы будут рассматривать нулевой символ как конец строки. Таким образом, возможность вводить его (в случае непроверенного ввода пользователя ) создает уязвимость, известную как инъекция нулевого байта, и может привести к уязвимостям безопасности. [10]
В обозначении каретки нулевым символом является ^@
. На некоторых клавиатурах можно ввести нулевой символ, удерживая Ctrlи нажимая @(в макетах для США часто будет работать только Ctrl+, знак @ 2нет необходимости ⇧ Shift).
В документации нулевой символ иногда представляется как символ шириной до одной em, содержащий буквы «NUL». В Юникоде есть символ с соответствующим глифом для визуального представления нулевого символа, «символ для нуля», U + 2400 (—) - не путать с фактическим нулевым символом, U + 0000.
Кодирование
Во всех современных наборах символов нулевой символ имеет нулевое значение кодовой точки. В большинстве кодировок это преобразуется в одну кодовую единицу с нулевым значением. Например, в UTF-8 это единственный нулевой байт. Однако в Modified UTF-8 нулевой символ кодируется как два байта: 0xC0, 0x80. Это позволяет использовать байт с нулевым значением, который теперь не используется ни для одного символа, в качестве признака конца строки.
Рекомендации
- ^ Формат ASCII для сетевого обмена . IETF . сек. 5.2. DOI : 10,17487 / RFC0020 . RFC 20 .
NUL (Null): символ из всех нулей, который может использоваться для заполнения по времени и медиа-заполнения.
- ^ «Набор управляющих символов стандарта ISO 646» (PDF) . Секретариат ISO / TC 97 / SC 2. 1975-12-01. п. 4.4. Архивировано из оригинального (PDF) 12 мая 2014 года.
Позиция: 0/0, Название: Null, Сокращение: Nul
- ^ «Символ Юникода 'NULL' (U + 0000)» . Проверено 20 октября 2018 .
- ^ "C0 Controls и Basic Latin" (PDF) . Консорциум Unicode. 2018 . Проверено 20 октября 2018 .
- ^ "Байт со всеми битами, установленными в 0, называемый нулевым символом , должен существовать в базовом наборе символов выполнения; он используется для завершения литерала строки символов." - ANSI / ISO 9899: 1990 (стандарт ANSI C), раздел 5.2.1
- ^ « Строка - это непрерывная последовательность символов, которая заканчивается первым нулевым символом и включает его» - ANSI / ISO 9899: 1990 (стандарт ANSI C), раздел 7.1.1
- ^ Рабочий проект стандарта языка программирования C ++ (PDF) (рабочий проект стандарта ISO 14882), ISO / IEC , 28 февраля 2011 г., стр. 427, N3242 = 11-0012 , получено 27 февраля 2013 г. ,
нулевой байтом байт строка
, или НТБ, представляет собой последовательность символов ,
чья высокая адресацию элемента с определенным содержанием имеет значение нуля (
пустой символ завершения
);
никакой другой элемент в последовательности не имеет нулевого значения.
- ^ Керниган и Ричи, C , стр. 38
- ^ В YAML эта комбинация представляет собой отдельную escape-последовательность .
- ^ Инъекция нулевого байта Классификация угроз WASC Раздел "Атака нулевым байтом".
Внешние ссылки
- Внедрение нулевого байта Классификация угроз WASC Раздел «Атака нулевым байтом»
- Poison Null Byte Введение Введение в Nullify 9
- Байтовая атака