The OpenNET Project / Index page

[ новости /+++ | форум | теги | ]



"Уязвимость в реализации функции memcpy для ARMv7 из состава ..."
Версия для распечатки Пред. тема | След. тема
Форум Разговоры, обсуждение новостей
Исходное сообщение [ Отслеживать ]
Есть идеи по улучшению форума и сайта ? Пишите.
. "Критическая уязвимость в реализации функции memcpy для ARMv7..." +5 +/
Сообщение от PnD (??), 22-Май-20, 14:26 
Объяснил так объяснил. Для далёких. Попробую показать "на пальцах" для остальных.
Число внутри 32-разрядного процессора состоит из 32 записанных друг за другом "битов", содержащих либо "0" либо "1".
Т.о. привычный нам ноль — это 32 бита с "0" внутри процессора.
Дальше будем полагать что числа пишутся/читаются в привычном нам порядке, слева направо. Бывает и наоборот. С какого конца читать — указывают в названии архитектуры процессора (big|litle endian).

Единица в самом правом разряде "00000000000000000000000000000001" соответствует 2º (в степени 0), т.е. = 1. Следующие биты справа налево кодируют 2¹=2, 2²=4 и т.д.
Двоичное число "01000000000000000000000000000000" (единица в 31-м разряде) соответствует 2³º= 1073741824 (десятичное представление).

Чтобы записывать отрицательные числа, договорились использовать 32-й (самый левый) бит.
При этом число "10000000000000000000000000000000" = 2³¹ кодирует самое маленькое (для 32-разрядного процессора) число -2³¹. И оно уникально, т.к. соответствующее ему положительное число в 32 разряда не лезет (или надо знак убирать).

Остальные биты при этом обозначают сколько надо прибавить к -2³¹. То есть:
"10000000000000000000000000000001" = -2³¹ + 1 = -2147483647
"11111111111111111111111111111111" = -1 (прибавили всё кроме последней единицы)

В этом месте нетрудно заметить, что операция сложения чисел со знаком ничем не отличается от той же самой операции "без знака". Например, "-1 + 1":
"11111111111111111111111111111111" + "00000000000000000000000000000001" = "00000000000000000000000000000000".
* Разряды переполнились и обнулились. Не хуже чем на старых арифмометрах.

** В умных книжках такой способ представления отрицательных чисел называется "второе дополнение": в первом дополнении число "переворачивают": например из "1100" получается "0011". Во втором — добавляют 1 (получим "0100"). Но это выносит неокрепший моск и напрочь убивает понимание как с этим обращается процессор.

Ответить | Правка | Наверх | Cообщить модератору

Оглавление
Уязвимость в реализации функции memcpy для ARMv7 из состава ..., opennews, 21-Май-20, 23:29  [смотреть все]
Форумы | Темы | Пред. тема | След. тема



Партнёры:
PostgresPro
Inferno Solutions
Hosting by Hoster.ru
Хостинг:

Закладки на сайте
Проследить за страницей
Created 1996-2024 by Maxim Chirkov
Добавить, Поддержать, Вебмастеру