1.41, Ordu (ok), 10:33, 22/05/2020 [ответить] [﹢﹢﹢] [ · · · ]
| +23 +/– |
Наблюдаю в комментах непонимание, поэтому краткая справка для далёких от машинного представления чисел.
Знаковые числа и беззнаковые -- это просто наборы бит. Никто не запрещает один и тот же набор бит интерпретировать как знаковый или беззнаковый. Чаще всего, получается примерно такое соответствие:
0 <=> 0
1 <=> 1
...
2^31-2 <=> 2^31-2
2^31-1 <=> 2^31-1
2^31 <=> -2^31
2^31+1 <=> -2^31+1
...
2^32-1 <=> -1
Для знакомых с группами вычетов Z/nZ: знаковые и беззнаковые -- это одна и та же факторизация множества целых чисел, но представители классов выбраны разные. Это как группу Z/3Z можно представлять как множество элементов {0, 1, 2}, а можно как {-1, 0, 1}.
(Кстати обратите внимание, если не сталкивались с этим раньше: abs(abs(x)) не всегда равен x. -2^31 -- это самое большое по модулю число, и оно одно, для него нет положительной пары. Бага системы кодирования чисел, которая иногда становится занозой в заднице).
При этом, что удачно, при таком подходе к кодированию целых, можно использовать одни и те же операции сложения/вычитания для работы как со знаковыми числами, так и с беззнаковыми. Но когда речь заходит об умножении, делении, сравнении чисел, на уровне машинных команд код начинает различаться, в зависимости от знаковости аргументов.
Обсуждаемый бажный memcpy работал с size как со знаковым числом. Для значений меньше чем 2^31 это работало как надо, потому что если такие беззнаковые числа интерпретировать как знаковые, то они по смыслу будут тем же самым. А вот для значений больше либо равных 2^31 уже не работало, потому что если их интерпретировать как знаковые, то получатся отрицательные числа.
И собственно эксплуатация бага свелась к тому, чтобы добиться передачи в memcpy буфера с размером в 2Gb или больше. То есть код, использующий memcpy может быть 100% безбажным, и тем не менее эксплоит будет возможен, при наличии такой бажной реализации memcpy.
| |
|
2.51, CAE (ok), 12:20, 22/05/2020 [^] [^^] [^^^] [ответить]
| +6 +/– |
Гм. Современное поколение программистов не знает что такое прямой, обратный и дополнительный код? :))
| |
|
3.80, Аноним (80), 05:13, 24/05/2020 [^] [^^] [^^^] [ответить]
| +/– |
Программист - слишком громкое название для вебмакаки, там из образования книжка по пэхапэ прочитанная за неделю. И все, можно идти твАрить.
| |
3.86, Аноним (86), 01:49, 25/05/2020 [^] [^^] [^^^] [ответить]
| +/– |
Ох уж эта русскоязычная терминология. Конечно, современные программисты ее не знают.
По-английски это называется ones’ complement.
| |
|
2.53, Аноним (53), 13:54, 22/05/2020 [^] [^^] [^^^] [ответить]
| +7 +/– |
> abs(abs(x)) не всегда равен x.
Вообще-то никогда не равен, если x - отрицательное.
| |
|
3.58, Ordu (ok), 14:29, 22/05/2020 [^] [^^] [^^^] [ответить]
| +1 +/– |
А, простите, перепутал операцию. Да, имелось в виду -(-x).
| |
|
2.56, PnD (??), 14:26, 22/05/2020 [^] [^^] [^^^] [ответить] | +5 +/– | Объяснил так объяснил Для далёких Попробую показать на пальцах для остальных... большой текст свёрнут, показать | |
|
|
4.81, Аноним (-), 05:23, 24/05/2020 [^] [^^] [^^^] [ответить]
| +/– |
Такая даже была на заре развития компьютеров, но популярности не снискала, только тогда уж "троичная".
| |
|
3.74, BSA (?), 15:33, 23/05/2020 [^] [^^] [^^^] [ответить]
| +/– |
"Второе дополнение"? Обычно, это называется просто "дополнительный код числа" и он именно от "дополнения единицей". Число не "переворачивают", а инвертируют: 0 заменяют на 1, а 1 на 0.
Ваше объяснение тоже не сильно лучше. А местами просто вводит в заблуждение.
| |
|
4.84, Аноним (84), 07:00, 24/05/2020 [^] [^^] [^^^] [ответить]
| +/– |
да он только вчера книжку прочитал, ещё не все термины запомнил, вероятно, имелось в виду "дополнение до двух"
| |
|
|
2.77, InuYasha (?), 17:12, 23/05/2020 [^] [^^] [^^^] [ответить]
| +/– |
С древних времён у меня вызывало недоумение: кто и зачем всякие memcpy() определяет в signed-типами?...
Ну и всякие int count, int size и т.п. Проверки на -1 - не оправдание - это симптом уже случившегося кабздеца.
| |
|
3.82, Аноним (-), 05:28, 24/05/2020 [^] [^^] [^^^] [ответить] | +/– | На самом деле кабздец - вообще не там Проблема в том что когда делается математ... большой текст свёрнут, показать | |
|
4.85, InuYasha (?), 11:11, 24/05/2020 [^] [^^] [^^^] [ответить]
| +/– |
> Ну и кому будет надо всю алгоритмику на скорости 1/3 от того что
> сейчас есть, даже если это чуть безопаснее?
Всем. В debug-версии. И ещё горы ASSERT-ов и логов. Отладил - и можно в релиз, где проверок меньше. А в редко используемых функциях типа Init и Create я проверки вообще не вырубаю.
| |
4.90, Аноним (90), 09:34, 27/05/2020 [^] [^^] [^^^] [ответить]
| +/– |
нужна аппаратная поддержка корректности
типа (условный ассемблер)
add Ax,Bx ; сложение когда переполнение не ошибка
add Ax,Bx ; сложение когда переполнение ошибка, выполняется процем параллельно и на производительность не влияет.
| |
|
|
|
|
2.2, BSDun (?), 23:38, 21/05/2020 [^] [^^] [^^^] [ответить]
| +11 +/– |
Хорошо звучит. Можно будет рутовать ARMv7 устройства, а затем обновлять глибси.
| |
|
3.10, Аноним (10), 00:21, 22/05/2020 [^] [^^] [^^^] [ответить]
| +4 +/– |
Всякую встроенку которая никогда не обновится теперь можно ломать.
| |
|
2.18, Ivan_83 (ok), 00:58, 22/05/2020 [^] [^^] [^^^] [ответить]
| +2 +/– |
Если у тебя в memcpy() приходит контролируемое удалённым пользователем значение длинны и код его до этого никак не валидировал - то memcpy() не виновато что в него мусор заслали.
И вообще станно, у memcpy() для размера должен sixe_t использоваться, а он без знаковый.
Короче, если и найдётся софт в котором из за этого дырка - то там она будет явно не одна.
| |
|
3.32, sfdsf (?), 08:58, 22/05/2020 [^] [^^] [^^^] [ответить]
| +7 +/– |
> станно, у memcpy() для размера должен sixe_t использоваться, а он без знаковый
Вы Чукчи Писатели уже раздражать начинаете. Черным по бежевому написано же:
>>в реализации для ARMv7 вместо size_t в добавленных для оптимизации ассемблерных вставках оно обрабатывается как signed integer | |
3.34, Аноним (34), 09:23, 22/05/2020 [^] [^^] [^^^] [ответить]
| –3 +/– |
Во времена мамонтов были процессоры в которых беззнаковая арифметика была реализована, как то иначе чем у большинства. Из за этих героев весь мир должен страдать многие десятки лет.
| |
3.47, пох. (?), 11:51, 22/05/2020 [^] [^^] [^^^] [ответить] | +1 +/– | в memcpy, внезапно, частенько приходят данные пользователя - и длинна их контрол... большой текст свёрнут, показать | |
|
|
1.3, Аноним (3), 23:47, 21/05/2020 [ответить] [﹢﹢﹢] [ · · · ]
| +2 +/– |
Что-то непонятное на скриншоте. Вроде речь идёт о системе, основанной на GLibc, а запускают какой-то ехешник.
| |
|
2.5, Аноним (5), 23:54, 21/05/2020 [^] [^^] [^^^] [ответить]
| +3 +/– |
Что тут непонятно, запустили netcat на винде для атаки на внешний хост по сети.
| |
2.38, Аноним (38), 10:11, 22/05/2020 [^] [^^] [^^^] [ответить]
| +/– |
Взлом системы с уже открытым портом, на котором уже висит рут-шелл с помощью вантузного нетката. Что непонятного? Это сиска... Там ещё питоновские файлы в некрософт-шояде редактируют и перфорс используют вместо гита. Сам видел. А ещё там заставляют людей использовать cisco-webex тех, кто не убедил начальство переползти на slack или skype, на худой уонец.
| |
|
1.4, Аноним (4), 23:53, 21/05/2020 [ответить] [﹢﹢﹢] [ · · · ]
| +/– |
Стоит отметить, что и Android проблема тоже не затрагивает ввиду использования bionic вместо libc. Мало ли кто об этом не знает.
| |
|
2.7, Аноним (5), 23:56, 21/05/2020 [^] [^^] [^^^] [ответить]
| +/– |
А какая связь bionic и glibc (GNU libc)? Это совершенно разные libc.
| |
2.11, gogo (?), 00:30, 22/05/2020 [^] [^^] [^^^] [ответить]
| +2 +/– |
Не знает тот, кто не прочитал статью, а строчит комменты.
| |
|
|
|
5.62, Аноним (3), 18:40, 22/05/2020 [^] [^^] [^^^] [ответить]
| +1 +/– |
>Я еще понимаю критику windows и из пользователей.
А чем Макось и её пользователи лучше? Тоже закрытая хрень. И кому до того какое дело, что она официально сертифицирована на UNIX.
| |
|
|
|
2.73, Anonn (?), 10:47, 23/05/2020 [^] [^^] [^^^] [ответить]
| +/– |
Ну вот, а Google винили в NIH-синдроме. Не даром они и boring ssl сделали, и много чего другого.
| |
|
1.24, Аноним (24), 03:42, 22/05/2020 [ответить] [﹢﹢﹢] [ · · · ]
| –4 +/– |
Совершенно непонятная новость. У memcpy аргумент имеет тип size_t как он в безанковый тип передали отрицательное число?
| |
|
2.29, Аноним (5), 08:24, 22/05/2020 [^] [^^] [^^^] [ответить]
| +1 +/– |
В коде использовались ассемблерные вставки с инструкциями для работы со знаковыми числами.
| |
|
|
|
5.83, Аноним (-), 05:31, 24/05/2020 [^] [^^] [^^^] [ответить]
| +/– |
Боль - это пытаться объяснить вебмакаке как работает рид-соломон :)
| |
|
|
|
|
1.26, Аноним (26), 06:21, 22/05/2020 [ответить] [﹢﹢﹢] [ · · · ]
| –5 +/– |
Предупреждали - не делать в коде С ассемблерных системно зависимых вставок.
| |
|
2.28, Онаним (?), 08:21, 22/05/2020 [^] [^^] [^^^] [ответить]
| +/– |
Увы, если в коде эмбедовки делать это не делать - она ворочаться будет как Windows 2000 на 80486-25.
| |
|
3.36, Аноним (26), 09:51, 22/05/2020 [^] [^^] [^^^] [ответить]
| –1 +/– |
Согласен. Сам таким баловался, когда по просьбе знакомых докторов вьвер для томографа написал в начале 90-х.
| |
3.37, Аноним (37), 09:51, 22/05/2020 [^] [^^] [^^^] [ответить]
| +1 +/– |
Не запустится. 80486 на 25 МГц — это SX, без сопроцессора, и более чем уверен, что специфические для Pentium инструкции были использованы. Плюс я не помню чипсетов для 80486, поддерживающих хотя бы 32 МБ ОЗУ (минимум для первых версий винтукея, на которых он только и может, что запуститься, где-то за полчаса).
| |
|
4.43, Zenitur (ok), 11:22, 22/05/2020 [^] [^^] [^^^] [ответить]
| +/– |
Сопроцессоры для 486 SX выпускались отдельно. https://ru.wikipedia.org/wiki/Intel487SX
У меня на материнке с Am386DX-40 (1993 год) можно максимум установить 32 Мб ОЗУ, судя по документации. 8 30-pin SIMM-модулей по 4 Мб каждый. Но я не пробовал. На 486 и 72-pin SIMM не должно быть проблем
| |
4.45, Онаним (?), 11:45, 22/05/2020 [^] [^^] [^^^] [ответить]
| +/– |
> минимум для первых версий винтукея, на которых он только и может, что запуститься, где-то за полчаса).
Вот!
| |
4.48, Онаним (?), 11:53, 22/05/2020 [^] [^^] [^^^] [ответить]
| +2 +/– |
> 80486 на 25 МГц — это SX
Am486 DX-25 был вполне себе с сопром. Более того, двухштучник сопра и P5 не требовал и за полчасика взлетал и на SX.
| |
|
|
2.63, Аноним (3), 18:42, 22/05/2020 [^] [^^] [^^^] [ответить]
| +/– |
>Предупреждали - не делать в коде С ассемблерных системно зависимых вставок.
Кто и кого предупреждал?
| |
|
1.27, Аноним (27), 07:13, 22/05/2020 [ответить] [﹢﹢﹢] [ · · · ]
| +2 +/– |
"встроенный в автомобильные информационные системы http-сервер". блин, дайте мне другой глобус
| |
|
2.49, пох. (?), 12:00, 22/05/2020 [^] [^^] [^^^] [ответить]
| +1 +/– |
В принципе, и этот глобус - достаточно большой, чтобы хватило на всех веб-макак.
Я думаю, даже 2x1.5 им жырно, можно просто сваливать в одну траншею.
Хотя, с другой стороны, чего матеръял-то зря переводить...
"За холмом открывалось огромное поле. В поле, точно по линеечке,
стояли рядами не то кресты, не то деревья, не то вязанки рогов. И перед
каждым из них виднелись могильные холмики."
| |
|
3.71, Lex (??), 08:11, 23/05/2020 [^] [^^] [^^^] [ответить]
| +1 +/– |
Веб-макаками уже стали ассемблерные программисты под арм?)
А вообще, даже забавно наблюдать за настолько нелепыми ошибками у «системных_и_не_веб_программистов»
| |
|
|
|
2.39, Аноним (39), 10:12, 22/05/2020 [^] [^^] [^^^] [ответить]
| +/– |
Директивы препроцессора на С. (Хотя не знаю, можно ли препроцессор считать частью языка).
А, еще комментарии сишные есть!
| |
|
3.65, Аноним (3), 18:49, 22/05/2020 [^] [^^] [^^^] [ответить]
| +/– |
Нельзя. Препроцессор о синтаксисе C не знает, он просто тупо подставляет. Поэтому не может давать адекватных сообщений о проблемах.
| |
3.70, Аноним (30), 06:02, 23/05/2020 [^] [^^] [^^^] [ответить]
| +/– |
Во многих ассемблерах были макросы (TASM, MASM), но в линуксовом их нет и добавили препроцессор из С. Этот препроцессор для много чего может использоваться, можно вызывать его отдельно.
| |
|
4.75, BSA (?), 15:39, 23/05/2020 [^] [^^] [^^^] [ответить]
| +/– |
Есть там макросы .macro/.endm. Они позволяют создавать макросы, используемые как инструкции.
| |
|
|
2.69, Аноним (30), 05:54, 23/05/2020 [^] [^^] [^^^] [ответить]
| –2 +/– |
Три человека, что поставили минус. Всё теперь ясно о компетентности комментаторов в программировании.
| |
|
1.33, ЛениваяЖ (?), 09:05, 22/05/2020 [ответить] [﹢﹢﹢] [ · · · ]
| +2 +/– |
Размер копируемой должен быть от 2 Гб, для того, чтобы получить отрицательное значение
| |
|
2.44, Аноним (5), 11:26, 22/05/2020 [^] [^^] [^^^] [ответить]
| +1 +/– |
2ГБ чтобы выйти на минус и ещё 2ГБ чтобы указатель сместить в конец первых 2ГБ. Следующие данные уже полезут за ожидаемый буфер.
| |
2.76, BSA (?), 15:41, 23/05/2020 [^] [^^] [^^^] [ответить]
| +1 +/– |
Если послать через сжатый канал (например, http+gzip), то объемы будут значительно меньше.
| |
|
1.42, Аноним (42), 11:17, 22/05/2020 [ответить] [﹢﹢﹢] [ · · · ]
| +/– |
Разработчики glibc в принципе не умеют в форматирование кода? Что там за каша?
| |
1.61, mos87 (ok), 18:36, 22/05/2020 [ответить] [﹢﹢﹢] [ · · · ]
| +1 +/– |
нестрашно, добрый вендор всегда оберегает тебя через TrustZone бггг
| |
1.66, Аноним (66), 18:55, 22/05/2020 [ответить] [﹢﹢﹢] [ · · · ]
| –1 +/– |
просто надо было писать на rush а параметры передавать через https+json
| |
|
2.79, Аноним (21), 00:39, 24/05/2020 [^] [^^] [^^^] [ответить]
| +1 +/– |
Кто-то из POSIX. Глупые наверное, и конвенции сишные глупые выдумали. Совсем дурачки. Ты-то умный, вон сразу видно, надо было спросить у тебя.
| |
|
|