The OpenNET Project / Index page

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



Вариант для распечатки  
Пред. тема | След. тема 
Форум Разговоры, обсуждение новостей
Режим отображения отдельной подветви беседы [ Отслеживать ]

Оглавление

Microsoft открыл CHERIoT, аппаратное решение для повышения безопасности кода на языке Си, opennews (??), 01-Мрт-23, (0) [смотреть все]

Сообщения [Сортировка по времени | RSS]


203. "Microsoft открыл CHERIoT, аппаратное решение для повышения б..."  +1 +/
Сообщение от Аноним (-), 02-Мрт-23, 02:43 
Диды иногда тоже жгут от души. Вон красавчики, дереференсят массив по входу функции. А там тип int. Ну вы поняли куда оно может там дереференснуть если caller сделает что-то странное. Проверок на это конечно же нет, так что вот вам вулн готовый, может половину памяти промотать вместо этого массива... и послать ее по коммуникационному протоколу, чтоб не скучать... :)

И тут скажите еще спасибо если я каталку пожелаю. А мог бы и катафалк за такое то. А зачем индекс signed делать вообще?! Кто-нибудь объяснит мне это вообще?

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

233. "Microsoft открыл CHERIoT, аппаратное решение для повышения б..."  +1 +/
Сообщение от RM (ok), 02-Мрт-23, 13:31 
>А зачем индекс signed делать вообще?! Кто-нибудь объяснит мне это вообще?

Диды (K&R) говорили что просто int может быть по умолчанию или signed или unsigned. в зависимости от того, что эффективнее на конкретной платформе. И если нет разницы, то пиши int, будет быстрее, точно не медленнее.
А в эпоху дидов caller был локальным и контролируемым, не то что сейчас - аноним с интернетов

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

333. "Microsoft открыл CHERIoT, аппаратное решение для повышения б..."  +/
Сообщение от Аноним (-), 08-Мрт-23, 09:08 
> Диды (K&R) говорили что просто int может быть по умолчанию или signed
> или unsigned. в зависимости от того, что эффективнее на конкретной платформе.

За это мы теперь жестко отдуваемся, когда вон те красавцы отрицательный индекс массиву скармливают. Потому что могут. И даже никаких вам варнингов при typo и проч. Сказано же что на вход функции - int, а то что он или какое-то вычисление от него в массив потом, ну, кто ж знал. Т.е. знал конечно но это ж не баг так писать. А прогер глядя на такой тип аргумента может вообще-то и не париться особо, что не факт что при вычислении именно положительное получилось. Кто сказал что он начинку вызываемой функции и лимиты применимости ее аргументов наизусть знает? А, никто? Ну вот и даст отрицательное, раз там int, значит так можно. А дид еще и никаких проверок на входе не сделает, не царское дело на невалидных аргументах корректно вываливаться, лучше давайте всю оперативку воооон туда в коммуникационный интерфейс сдампим. Иногда это капец как удобно - но только не легитимным создателям или овнерам системы :)

И кстати если кто удумает int сделать unsigned по дефолту - он столько нового узнает сразу, когда вон те древние функции if ... < 0 как error использовали, плин. Ах да, ну конечно, структурированые antibug апи и прочие глупости - для лохов и нувориш. Которые так то прочухали что даже на сях можно какой-нибудь return struct забахать и это даже не настолько уж и неэффективно если не борзеть чрезмерно, а вернуть можно и статус операции и какие-то добавочные детали и еще что-то. Без какой-то левой черной магии с if abc > 100500 то это оказывается совсем не result а ашипку так сигналят, дескать, но поди там догадайся еще.

А эффективность это прекрасно но только до того момента когда вон там кодеры делают допущение что int это минимум 32 бита, но тут оказывается что 16 так то тоже формально ладушки - и вооооот вам тут всем дикий багодром. А по стандарту и не подкопаешься, так можно. И если в C89 это еще простительно было то в C99 и тем более 11 такие спеки уже совсем незачет.

> И если нет разницы, то пиши int, будет быстрее, точно не медленнее.

Ага, и оно быстро так оперативку куда-то налево дампит. А чо - caller видит что там int параметром и не парится (a - b) или (b - a), int ведь и отрицательное должен знать. А то что там кто-то массив дереференснет это ж сорц функции читать надо. Агаблин вот все читают сорц подключаяемых либ, от и до. Вот прям из их объектного кода сразу.

> А в эпоху дидов caller был локальным и контролируемым, не то что
> сейчас - аноним с интернетов

Диды не писали сложнее хелло ворлда и либы не признавали в принципе? А как тогда те навороты с линковкой появились? Они ж как раз для вот этого вот.

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

352. "Microsoft открыл CHERIoT, аппаратное решение для повышения б..."  +1 +/
Сообщение от RM (ok), 04-Апр-23, 20:50 
Я писал в контексте вопроса ">А зачем индекс signed делать вообще?! Кто-нибудь объяснит мне это вообще?"
И написал в том числе "И если нет разницы, то пиши int, будет быстрее, точно не медленнее."
Еще раз - "И если нет разницы" и про (K&R) C.
Т.е. если это индекс массива в аргументе функции и надо hint - так вот и пиши unsigned int, кто ж за руки держит.
И доку/маны тогда все же писали и читали, не то что сейчас "все самодокументировано", действительно замучаешься читать код либ.

А по большому счету - так я с твоими доводами согласен, в смысле что в нынешних условиях можно и получше.
Только когда K&R C придумывали, весь UNIX крутился на 64 KB и не жужжал.

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

358. "Microsoft открыл CHERIoT, аппаратное решение для повышения б..."  +/
Сообщение от Аноним (358), 04-Янв-24, 22:32 
>Диды (K&R) говорили что просто int может быть по умолчанию или signed или unsigned.

Мощное заявление, пруфов конечно же не будет.

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

359. "Microsoft открыл CHERIoT, аппаратное решение для повышения б..."  +/
Сообщение от RM (ok), 04-Янв-24, 23:25 
>>Диды (K&R) говорили что просто int может быть по умолчанию или signed или unsigned.
> Мощное заявление, пруфов конечно же не будет.

Да, память меня подвела, признаю, распространил я в своей голове поведение char на все int (целыe).

Я, когда все это читал, не захотел зазубривать всякие тонкости преобразований по умолчанию и потом при написании кода это еще крутить в голове до/вместо компилятора.
Поэтому вывел для себя это правило - писать как если бы signed или unsigned по умолчанию был не определен.
Вот если уже без конкретного подозрительного преобразования не обойтись - то представлять как процу/компилятору это легче сделать - он скорее всего так и сделает. Или просто смотреть нагенерённый асм.

А вообще там интересна, главная фраза
"The int types all represent signed values unless specified otherwise."
Specified видимо стоит читать как "не написано рядом unsigned спецификатора"
Хотя можно было бы в порядке троллинга и поспорить что мол не специфицировано мануалом на проц/компилятор.

НО, как всегда есть исключение - битовые поля.
Вот тама уже так как я написал.
"A field member (which need not have a declarator and thus may be unnamed) has type int, unsigned int, or signed int, and is interpreted as an object of integral type of the specified length in bits; whether an int field is treated as signed is implementation-dependent."
Ну и "Fields may be declared only as ints; for portability, specify signed or unsigned explicitly"

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

Архив | Удалить

Рекомендовать для помещения в FAQ | Индекс форумов | Темы | Пред. тема | След. тема




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

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