The OpenNET Project / Index page

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

30.10.2013 11:45  Оптимизация кода компилятором может привести к появлению проблем безопасности в приложениях

Группа исследователей из Массачусетского технологического университета (MIT) опубликовала (PDF, 240 Кб) результаты изучения особенностей работы систем оптимизации кода современных компиляторов, способных привести к понижению безопасности приложений. В итоге, выявлены многочисленные факты, когда в процессе компиляции в машинный код из приложения исключаются некорректно написанные блоки, бессмысленные с точки зрения оптимизатора, но влияющие на безопасность.

Например, компилятор исключает неопределённые или нестабильные участки кода, которые на деле могут выступать проверками на появление нулевого указателя или выхода за границы области памяти (например, оптимизатор может заменить "data + x < data" на "x < 0" или считает всегда истинным "-k >= 0" если ранее была проверка "if (k < 0)"). В итоге, данные проверки не включаются в исполняемый файл, и безопасное на уровне исходных текстов приложение становится подвержено уязвимостям на уровне исполняемого кода. Проблеме подвержено большинство современных компиляторов, включая GCC, Clang, ICC, MSVC, open64, pathcc, suncc и т.д.

Например, оптимизатор GCC удалит вторую проверку из следующего кода:


   char *buf = ...;
   char *buf_end = ...;
   unsigned int len = ...;
   if (buf + len >= buf_end) 
      return;  /* len too large */
   if (buf + len < buf) 
      return; /* overflow, buf+len wrapped around write to buf[0..len-1] */

Программист использует условие "buf + len < buf" для проверки на переполнение указателя, подразумевая, что при очень большом значении будет осуществлено переполнение размерности типа. GCC оперирует тем, что по стандарту языка C указатель не должен выходить за пределы объекта более чем на единицу, а в противном случае поведение программы не определено.

В качестве другого примера можно привести код для которого будет удалена проверка на нулевой указатель (gcc считает, что tun не может принимать значение NULL после того, как был произведен доступ к tun->sk):


   struct tun_struct *tun = ...;
   struct sock *sk = tun->sk;
   if (!tun)
      return POLLERR; /* write to address based on tun */

Для выявления проблемных мест в коде на языках C и C++, которые могут быть удалены на стадии оптимизации, исследователями подготовлен специальный статический анализатор STACK. Изучение при помощи STACK типовых открытых проектов выявило 160 подобных проблем, из которых 32 присутствуют в ядре Linux, 3 в Mozilla, 9 в PostgreSQL, 4 в QEMU, 21 в FFmpeg, 3 в Xen, 5 в Python.

Более широкая проверка исходных текстов показала, что нестабильные блоки кода присутствуют в 3471 пакете из 8575 пакетов, доступных в репозиториях Debian. Наибольшее число выявленных проблем (59230 проблем в 2800 пакетах) связано с разыменованием нулевого указателя, 5795 проблем могут привести к переполнению буфера, 4364 к проблемам целочисленной арифметики, 3680 - проблемам с переполнением указателя. Таким образом, описанные в работе проблемы не являются единичными, а широко распространены и могут быть использованы злоумышленниками для организации атак.

  1. Главная ссылка к новости (http://www.itworld.com/securit...)
Лицензия: CC-BY
Тип: Проблемы безопасности
Ключевые слова: gcc, compile, security
При перепечатке указание ссылки на opennet.ru обязательно
Обсуждение Ajax/Линейный | Раскрыть все сообщения | RSS
 
  • 1.1, Герберт Уэллс (?), 12:07, 30/10/2013 [ответить] [показать ветку] [···]    [к модератору]
  • +1 +/
    До проверки на нуль выполнение не дойдёт.
     
     
  • 2.5, Дмитрий (??), 12:23, 30/10/2013 [^] [ответить]     [к модератору]
  • +3 +/
    Если почитать оригинал http lwn net Articles 342330 There is one little pro... весь текст скрыт [показать]
     
     
  • 3.53, Герберт Уэллс (?), 14:18, 30/10/2013 [^] [ответить]     [к модератору]  
  • +1 +/
    Если бы мапирование в первые страницы действительно где-либо использовалось, то ... весь текст скрыт [показать]
     
     
  • 4.299, PereresusNeVlezaetBuggy (ok), 17:04, 01/11/2013 [^] [ответить]     [к модератору]  
  • +/
    Ещё не так давно пока не началась эпопея с уязвимостями, эксплуатирующими именн... весь текст скрыт [показать]
     
  • 3.65, dq0s4y71 (ok), 14:46, 30/10/2013 [^] [ответить]    [к модератору]  
  • +10 +/
    Ну, написали бы тогда:

    volatile struct tun_struct * tun = ...
    volatile struct sock * sk = tun->sk;

    Компилятор вовсе не обязан знать, что при каких-то экзотических условиях кривой код всё-таки работает. Но компилятору можно об этом сообщить :)

     
     
  • 4.217, pavlinux (ok), 14:52, 31/10/2013 [^] [ответить]     [к модератору]  
  • +3 +/
    volatile const struct tun_struct const __restrict const __attribute__ const ,... весь текст скрыт [показать]
     
     
  • 5.218, arisu (ok), 14:57, 31/10/2013 [^] [ответить]     [к модератору]  
  • +/
    это будет покруче 171 Фауста 187 Гёте 8230 ... весь текст скрыт [показать]
     
  • 1.2, Аноним (-), 12:13, 30/10/2013 [ответить] [показать ветку] [···]    [к модератору]  
  • +3 +/
    если нет ошибки в программе, значит ошибка в компиляторе..
     
     
  • 2.240, Аноним (-), 16:13, 31/10/2013 [^] [ответить]    [к модератору]  
  • –1 +/
    > если нет ошибки в программе, значит ошибка в компиляторе..

    Ошибка в стандарте языка.

     
  • 1.6, BayaN (ok), 12:29, 30/10/2013 [ответить] [показать ветку] [···]    [к модератору]  
  • +2 +/
    Приведены два примера неистового говнокода, в проблемах безопасности конечно виноват оптимизатор компилятора.
     
     
  • 2.59, анонимотик (?), 14:39, 30/10/2013 [^] [ответить]    [к модератору]  
  • +2 +/
    Комментор умнее исследователей и редакторов научных статей. Гений прям.
     
     
  • 3.70, noname01 (?), 14:51, 30/10/2013 [^] [ответить]     [к модератору]  
  • +4 +/
    Нет, все ещё круче Если учитывать 3471 пакете из 8575 пакетов, доступных в реп... весь текст скрыт [показать]
     
  • 3.75, Аноним (-), 14:58, 30/10/2013 [^] [ответить]    [к модератору]  
  • +/
    Чтобы подобным образом наезжать на комментатора, неплохо бы исследованиями заниматься и научные статьи писать, а не на постинг время тратить.
     
     
  • 4.103, Аноним (-), 16:51, 30/10/2013 [^] [ответить]     [к модератору]  
  • +1 +/
    Если комментатор пишет явную херню, проводить специальные исследования по данном... весь текст скрыт [показать]
     
     
  • 5.181, Аноним (-), 23:13, 30/10/2013 [^] [ответить]     [к модератору]  
  • +/
    Но можно по ссылке сходить и прочитать хотя бы первые буквы работы, которую аме... весь текст скрыт [показать]
     
     
  • 6.233, Аноним (-), 15:56, 31/10/2013 [^] [ответить]     [к модератору]  
  • +/
    Оптимизация UB втихую - это, конечно, мудро и правильно Вместо того, чтобы выда... весь текст скрыт [показать]
     
     
  • 7.243, arisu (ok), 16:26, 31/10/2013 [^] [ответить]     [к модератору]  
  • +/
    в данном случае не было никакой 171 оптимизации UB 187 включение оптимизато... весь текст скрыт [показать]
     
  • 7.246, Аноним (-), 16:29, 31/10/2013 [^] [ответить]     [к модератору]  
  • –1 +/
    Предназначение компилятора - компилировать, т е преобразовать исходный текст пр... весь текст скрыт [показать]
     
     
  • 8.264, Аноним (-), 18:44, 31/10/2013 [^] [ответить]     [к модератору]  
  • +/
    А речь и не идет о философских размышлениях Достаточно лишь довести до сведения... весь текст скрыт [показать]
     
  • 6.336, IRASoldier (?), 12:11, 18/06/2018 [^] [ответить]    [к модератору]  
  • +/
    >"американские ученые"

    Кавычки лишние. Работают и живут в США, значит американские. Что, бомбит?

     
  • 3.85, BayaN (ok), 15:38, 30/10/2013 [^] [ответить]     [к модератору]  
  • +/
    Нет, просто комментатор на стороне создателей компиляторов, а не говнокодеров П... весь текст скрыт [показать]
     
  • 3.192, arisu (ok), 08:25, 31/10/2013 [^] [ответить]     [к модератору]  
  • +/
    в данном случае 8212 умнее авторы компилятора которые стандарты таки читали,... весь текст скрыт [показать]
     
     
  • 4.234, Аноним (-), 15:57, 31/10/2013 [^] [ответить]     [к модератору]  
  • –1 +/
    Стандарт прочитать и обезьянка может А вот корректно обрабатывать отклонения от... весь текст скрыт [показать]
     
     
  • 5.248, arisu (ok), 16:35, 31/10/2013 [^] [ответить]     [к модератору]  
  • +/
    предлагаю тебе надрать им всем задницы и показать, как надо делать компиляторы ... весь текст скрыт [показать]
     
     
  • 6.258, Аноним (-), 17:00, 31/10/2013 [^] [ответить]     [к модератору]  
  • +/
    Ага, для того чтобы это хорошо работало, правда, придется тезисы Тюринга опровер... весь текст скрыт [показать]
     
     
  • 7.260, arisu (ok), 17:52, 31/10/2013 [^] [ответить]     [к модератору]  
  • +/
    не веришь ты в людей это, может, гений среди нас, а ты его расхолаживаешь он т... весь текст скрыт [показать]
     
  • 7.268, Аноним (-), 18:51, 31/10/2013 [^] [ответить]     [к модератору]  
  • –1 +/
    Вас послушать, так для оптимизаций компилятор вообще должен собственным сознание... весь текст скрыт [показать]
     
     
  • 8.270, arisu (ok), 19:00, 31/10/2013 [^] [ответить]    [к модератору]  
  • +/
    > А типичные случаи UB хорошо известны и разжеваны. С их отловом справился
    > бы даже очень тyпой компилятор.

    так когда релиза-то ждать «нетупого компилятора»?

     
     
  • 9.301, Аноним (-), 18:55, 01/11/2013 [^] [ответить]    [к модератору]  
  • +/
    > так когда релиза-то ждать «нетупого компилятора»?

    Я решил эту проблему более эффективным способом :)

     
     
  • 10.308, arisu (ok), 19:15, 01/11/2013 [^] [ответить]    [к модератору]  
  • +2 +/
    >> так когда релиза-то ждать «нетупого компилятора»?
    > Я решил эту проблему более эффективным способом :)

    ага: балабольским. побалаболил и сбежал.

     
  • 2.102, Аноним (-), 16:49, 30/10/2013 [^] [ответить]     [к модератору]  
  • +/
    На сях гoвнокод, как правило, является наиболее простым и эффективным решением п... весь текст скрыт [показать]
     
     
  • 3.193, arisu (ok), 08:27, 31/10/2013 [^] [ответить]     [к модератору]  
  • +1 +/
    это просто потому, что у тебя мозг кроме говнокода ничего больше произвести не в... весь текст скрыт [показать]
     
     
  • 4.232, Аноним (-), 15:54, 31/10/2013 [^] [ответить]    [к модератору]  
  • –1 +/
    > это просто потому, что у тебя мозг кроме гoвнокода ничего больше произвести не в состоянии.

    Не только у меня. Сколько сишных программ не смотрел - никогда не видел, чтобы был не гoвнокод.

     
     
  • 5.239, Аноним (-), 16:13, 31/10/2013 [^] [ответить]    [к модератору]  
  • –1 +/
    > Не только у меня. Сколько сишных программ не смотрел - никогда не видел, чтобы был не гoвнокод.

    Поэтому сам я стараюсь на сях не писать. Благо, задачи не системные, и перл отлично справляется.

     
     
  • 6.257, Аноним (-), 16:58, 31/10/2013 [^] [ответить]    [к модератору]  
  • +/
    > и перл отлично справляется.

    Жаль что на перле операционки не пишут, правда? :)

     
     
  • 7.265, Аноним (-), 18:46, 31/10/2013 [^] [ответить]    [к модератору]  
  • +/
    > Жаль что на перле операционки не пишут, правда? :)

    Когда-нибудь найдется один ценитель истинного юниксвея, а не фанат блобов, и вот тогда...

     
     
  • 8.312, Аноним (-), 00:16, 02/11/2013 [^] [ответить]     [к модератору]  
  • +/
    Тогда ты поймешь насколько удобно в perl делать вещи типа записать бит 5 в ед... весь текст скрыт [показать]
     
  • 7.302, Аноним (-), 18:56, 01/11/2013 [^] [ответить]    [к модератору]  
  • +/
    >> и перл отлично справляется.
    > Жаль что на перле операционки не пишут, правда? :)

    Ага. Тока на Lua :(

     
  • 5.249, arisu (ok), 16:37, 31/10/2013 [^] [ответить]     [к модератору]  
  • +/
    бедняга плохо быть тобой ... весь текст скрыт [показать]
     
     
  • 6.269, Аноним (-), 18:54, 31/10/2013 [^] [ответить]     [к модератору]  
  • –1 +/
    Не только мной ... весь текст скрыт [показать]
     
     
  • 7.313, Аноним (-), 00:42, 02/11/2013 [^] [ответить]    [к модератору]  
  • +/
    > Не только мной.

    FYI, баги встречаются не только в программах на си :).

     
  • 5.256, Аноним (-), 16:58, 31/10/2013 [^] [ответить]     [к модератору]  
  • +/
    Я прямо удивляюсь даже - какой же операционкой вы тогда пользуетесь И если они ... весь текст скрыт [показать]
     
     
  • 6.266, Аноним (-), 18:47, 31/10/2013 [^] [ответить]    [к модератору]  
  • –1 +/
    >> Сколько сишных программ не смотрел - никогда не видел, чтобы был не гoвнокод.
    > Я прямо удивляюсь даже - какой же операционкой вы тогда пользуетесь?

    А я не перфекционист :)

     
     
  • 7.314, Аноним (-), 00:44, 02/11/2013 [^] [ответить]     [к модератору]  
  • +/
    Более того, сажать баги можно на любом ЯП Некоторые из них будут вести к пробле... весь текст скрыт [показать]
     
  • 2.109, Аноним (-), 17:07, 30/10/2013 [^] [ответить]    [к модератору]  
  • +/
    Константин Серебряный, залогиньтесь
     
     
  • 3.304, Аноним (-), 18:59, 01/11/2013 [^] [ответить]    [к модератору]  
  • +/
    > Константин Серебряный, залогиньтесь

    А кто это? Герой повести А.Толстого?

     
     ....нить скрыта, показать (36)

  • 1.7, Аноним (-), 12:31, 30/10/2013 [ответить] [показать ветку] [···]    [к модератору]  
  • –1 +/
    Компиляторы стали слишком умными, началась игра кто кого...
     
     
  • 2.190, Led (ok), 04:11, 31/10/2013 [^] [ответить]    [к модератору]  
  • +/
    > Компиляторы стали слишком умными, началась игра кто кого...

    Относительно. Потому как кодеры в среднем стали на порядок тупее.

     
  • 2.194, arisu (ok), 08:27, 31/10/2013 [^] [ответить]    [к модератору]  
  • +/
    > Компиляторы стали слишком умными

    нет, это говнокодеры продолжают считать, что учить ПДД перед тем, как сесть за руль — излишество.

     
     
  • 3.236, Аноним (-), 16:07, 31/10/2013 [^] [ответить]     [к модератору]  
  • +/
    Тупое следование ПДД чревато Если бы пользующиеся преимуществом водители при п... весь текст скрыт [показать]
     
     
  • 4.250, arisu (ok), 16:38, 31/10/2013 [^] [ответить]     [к модератору]  
  • +1 +/
    так же, как и тупые автомобильные аналогии каюсь, сам первый начал ... весь текст скрыт [показать]
     
     
  • 5.267, Аноним (-), 18:49, 31/10/2013 [^] [ответить]    [к модератору]  
  • –2 +/
    > каюсь, сам первый начал.

    Профессиональный сишник может наступить на грабли даже на ровном месте :)
    Сначала сам их напишет, потом наступит.

     
     
  • 6.315, Аноним (-), 00:46, 02/11/2013 [^] [ответить]     [к модератору]  
  • +/
    А иные будут грести листья лопатой, как дeбилы Потому что грабли видите ли вооб... весь текст скрыт [показать]
     
  • 1.8, BSA (?), 12:36, 30/10/2013 [ответить] [показать ветку] [···]    [к модератору]  
  • +5 +/
    А причем тут компиляторы? Вместо того, чтобы проверить len, проверяется выход указателя за пределы выделенной области. Если в стандарте языка указано, что результат операции переполнения не определен, то нет ничего криминального в том, что компиляторы этим пользуются. Другое дело, что могли бы выдавать предупреждение в этом случае.
    Это косяки программистов.
     
     
  • 2.10, z (??), 12:58, 30/10/2013 [^] [ответить]    [к модератору]  
  • –4 +/
    >Вместо того, чтобы проверить len, проверяется выход указателя за пределы выделенной области.

    А если этот len добавляется к buf в каждой итерации? Умник такой умник

     
     
  • 3.32, ананим (?), 13:41, 30/10/2013 [^] [ответить]    [к модератору]  
  • +2 +/
    Покажите такой код, где нужно в цикле к указателю постоянно добавлять число и я скажу в каком месте и насколько он гoвнo.
     
     
  • 4.87, клоун Стаканчик (?), 15:43, 30/10/2013 [^] [ответить]     [к модератору]  
  • –3 +/
    копирование первого поля структуры struct data dd data1 dd data2 ends mo... весь текст скрыт [показать]
     
     
  • 5.92, ананим (?), 16:01, 30/10/2013 [^] [ответить]     [к модератору]  
  • +1 +/
    Хинт Сабж и данный трэд о С в крайнем случае о С ПС понятно что в ассе... весь текст скрыт [показать]
     
     
  • 6.97, клоун Стаканчик (?), 16:18, 30/10/2013 [^] [ответить]     [к модератору]  
  • –3 +/
    Пример 1 ACPI таблица RSDT состоит из последовательно идущих структур разно... весь текст скрыт [показать]
     
     
  • 7.104, ананим (?), 16:52, 30/10/2013 [^] [ответить]     [к модератору]  
  • –2 +/
    1 Ещё раз для упoрoтых , Об аспи речи не шло аспи кривое по-жизни даже созда... весь текст скрыт [показать]
     
     
  • 8.114, z (??), 17:21, 30/10/2013 [^] [ответить]     [к модератору]  
  • +1 +/
    Для употорых аспи лишь один из примеров, взять любые данные, упакованные в стру... весь текст скрыт [показать]
     
     
  • 9.119, ананим (?), 17:31, 30/10/2013 [^] [ответить]     [к модератору]  
  • +/
    Для дабл-употорых Так где в коде проверки Почему их нет Зыж То что их нет озн... весь текст скрыт [показать]
     
     
  • 10.195, arisu (ok), 08:30, 31/10/2013 [^] [ответить]     [к модератору]  
  • +/
    потому что про проверки никто не спрашивал просили пример кода, где 171 в цик... весь текст скрыт [показать]
     
     
  • 11.211, ананим (?), 12:53, 31/10/2013 [^] [ответить]     [к модератору]  
  • +/
    серьёзно вот ветка При чём последнее 8212 это моё И я уж точно знаю что пр... весь текст скрыт [показать]
     
  • 11.255, Аноним (-), 16:56, 31/10/2013 [^] [ответить]     [к модератору]  
  • +/
    А также например декомпрессоры LZ не гнушаются таких вещей ради эффективности и ... весь текст скрыт [показать]
     
  • 9.130, ананим (?), 18:10, 30/10/2013 [^] [ответить]     [к модератору]  
  • +/
    1 В каком месте компилятор меняет исходники 2 Когда вы предоставили с-код, тр... весь текст скрыт [показать]
     
     
  • 10.131, ананим (?), 18:20, 30/10/2013 [^] [ответить]     [к модератору]  
  • +/
    ззыж Вот и покажи где тут бегают по указателям, потенциально выходящим за предел... весь текст скрыт [показать]
     
  • 10.136, клоун Стаканчик (?), 18:31, 30/10/2013 [^] [ответить]     [к модератору]  
  • +/
    1 компилятор исключил условие 2 на что вы требуете проверять Не выделил ли ... весь текст скрыт [показать]
     
     
  • 11.139, ананим (?), 18:51, 30/10/2013 [^] [ответить]     [к модератору]  
  • +/
    На оверфлоу указателя По поводу чего и был трэд пока вы не пришли с темой к у... весь текст скрыт [показать]
     
     
  • 12.142, клоун Стаканчик (?), 19:06, 30/10/2013 [^] [ответить]     [к модератору]  
  • –1 +/
    32-разрядное адресное пространство ограничено 2 32 степени адресов При этом дан... весь текст скрыт [показать]
     
     
  • 13.153, Аноним (-), 20:15, 30/10/2013 [^] [ответить]     [к модератору]  
  • +/
    Программа в юзерспейсе в общем случае понятия не имеет о том какая там память Э... весь текст скрыт [показать]
     
     
  • 14.171, клоун Стаканчик (?), 22:14, 30/10/2013 [^] [ответить]     [к модератору]  
  • –3 +/
    Программам в юзерспейсе нет необходимости проверять на выход за пределы адресн... весь текст скрыт [показать]
     
     
  • 15.183, Аноним (-), 23:43, 30/10/2013 [^] [ответить]     [к модератору]  
  • +1 +/
    Кажется, Линус тоже плавает - он почему-то не совсем согласен насчет элегантно... весь текст скрыт [показать]
     
     
  • 16.187, клоун Стаканчик (?), 02:54, 31/10/2013 [^] [ответить]    [к модератору]  
  • –1 +/
    Тогда предложите свой гениальный способ страничной адресации 256 Тб памяти (64 бита) с возможностью управления страницами размером 4 кб. До этих пор приведённое высказывание считаю пустобрёхством.
     
     
  • 17.189, Аноним (-), 03:47, 31/10/2013 [^] [ответить]     [к модератору]  
  • +1 +/
    256 Тб памяти 64 бита - это как раз не про режим PAE, а про гениальный спос... весь текст скрыт [показать]
     
     
  • 18.210, клоун Стаканчик (?), 10:14, 31/10/2013 [^] [ответить]    [к модератору]  
  • –2 +/
    Прежде чем продолжать, узнайте что такое PAE, long mode и AMD64.
     
  • 17.212, Michael Shigorin (ok), 12:55, 31/10/2013 [^] [ответить]     [к модератору]  
  • +1 +/
    Зачем Про накладные расходы на страницах минимального размера не думали и про ... весь текст скрыт [показать]
     
  • 15.185, Michael Shigorin (ok), 00:37, 31/10/2013 [^] [ответить]     [к модератору]  
  • +2 +/
    Занавес Наверное, это такие люди просовывают через PCI данные побитно, дёргая н... весь текст скрыт [показать]
     
  • 15.226, Аноним (-), 15:43, 31/10/2013 [^] [ответить]     [к модератору]  
  • +/
    Как-то так переполнения буферов и случаются Что, ты совсем не в состоянии осозн... весь текст скрыт [показать]
     
  • 13.197, arisu (ok), 08:32, 31/10/2013 [^] [ответить]    [к модератору]  
  • +1 +/
    > На какой «оверфлоу» планируете проверять?


    > хранится в 32-битовой парамере

    ты риальне клоун.

     
  • 11.196, arisu (ok), 08:31, 31/10/2013 [^] [ответить]     [к модератору]  
  • +/
    вообще-то, разыменование NULL 8212 это ошибка по стандарту языка , угу ... весь текст скрыт [показать]
     
     
  • 12.227, Аноним (-), 15:44, 31/10/2013 [^] [ответить]    [к модератору]  
  • +/
    > вообще-то, разыменование NULL — это ошибка *по стандарту языка*, угу.

    Разыменование - да. А сам по себе доступ - не обязательно.

     
     
  • 13.251, arisu (ok), 16:39, 31/10/2013 [^] [ответить]     [к модератору]  
  • +/
    расскажи мне, о Гуру, как можно делать 171 доступ 187 без разыменования ... весь текст скрыт [показать]
     
     
  • 14.317, Аноним (-), 09:09, 02/11/2013 [^] [ответить]     [к модератору]  
  • +/
    Упс, перепутал с обращением к освобожденной памяти Нефиг сообщения сонным писат... весь текст скрыт [показать]
     
     
  • 15.324, arisu (ok), 10:58, 02/11/2013 [^] [ответить]    [к модератору]  
  • +/
    я же не спорю, что на уровне аппаратуры может быть валидной.
     
  • 9.184, Аноним (-), 00:11, 31/10/2013 [^] [ответить]     [к модератору]  
  • +1 +/
    Кого именно умнее, тебя клоун Так это дело нехитрое Тебе уже жирно намекали на... весь текст скрыт [показать]
     
  • 4.164, Филипп Филиппович (ok), 21:07, 30/10/2013 [^] [ответить]    [к модератору]  
  • +/
    Ну-ну, расскажите миру, в каком месте это верно про цикл, итерирующий массив структур, инкрементируя указатель.
     
  • 2.12, Аноним (-), 13:00, 30/10/2013 [^] [ответить]    [к модератору]  
  • –1 +/
    Это косяки ЯЗЫКА.
    Стандарт С позволяет не только себе ногу отстрелить, но и покалечить окружающих.
     
     
  • 3.13, Аноним (-), 13:07, 30/10/2013 [^] [ответить]    [к модератору]  
  • +/
    Аноним такой "знаток", что не в силах отличить недостатки от достоинств?
     
     
  • 4.34, Аноним (-), 13:44, 30/10/2013 [^] [ответить]    [к модератору]  
  • +/
    Может быть ты в силах? :)
     
  • 4.35, Аноним (-), 13:44, 30/10/2013 [^] [ответить]    [к модератору]  
  • +/
    > Аноним такой "знаток", что не в силах отличить недостатки от достоинств?

    А, так возможность переполнения - это на самом деле достоинство?
    Как и создаваемая им дыра в безопасности?

     
     
  • 5.38, Аноним (-), 13:46, 30/10/2013 [^] [ответить]    [к модератору]  
  • +3 +/
    >Как и создаваемая им дыра в безопасности?

    Для кого дыра, а для кого и мать родна :)

     
     
  • 6.305, Аноним (-), 19:00, 01/11/2013 [^] [ответить]    [к модератору]  
  • +/
    >>Как и создаваемая им дыра в безопасности?
    > Для кого дыра, а для кого и мать родна :)

    Намек на АНБ?

     
  • 5.64, Аноним (-), 14:46, 30/10/2013 [^] [ответить]    [к модератору]  
  • +2 +/
    да. Это следствие ручного управление памятью. Такое же как низкое ее потребление, например.
     
     
  • 6.221, еще один аноним (?), 15:11, 31/10/2013 [^] [ответить]    [к модератору]  
  • +/
    не путай "следствие" с "достоинством". Это разные понятия
     
  • 6.238, Аноним (-), 16:11, 31/10/2013 [^] [ответить]    [к модератору]  
  • +/
    > да. Это следствие ручного управление памятью.

    Возможность целочисленного переполнения - это _не_ следствие ручного управления памятью.

     
  • 5.154, Аноним (-), 20:18, 30/10/2013 [^] [ответить]     [к модератору]  
  • +2 +/
    Это всего лишь то как по факту работают процессоры в массе своей Обойти сие мож... весь текст скрыт [показать]
     
     
  • 6.166, chinarulezzz (ok), 21:15, 30/10/2013 [^] [ответить]     [к модератору]  
  • +/
    пффф modula-2 3 , oberon ... весь текст скрыт [показать]
     
     
  • 7.229, Аноним (-), 15:46, 31/10/2013 [^] [ответить]     [к модератору]  
  • –1 +/
    Я и смотрю - то-то все низкоуровневые и системные дела на них написаны Ядра, бу... весь текст скрыт [показать]
     
     
  • 8.242, arisu (ok), 16:23, 31/10/2013 [^] [ответить]     [к модератору]  
  • +/
    не тупи, пожалуйста надо ли в очередной раз пояснять, что популярность не обяза... весь текст скрыт [показать]
     
     
  • 9.300, Аноним (-), 18:54, 01/11/2013 [^] [ответить]    [к модератору]  
  • –1 +/
    > да к тому же у них «синтаксис паскалевский, фи, отcтой!»

    А не вы ли случайно употребляли выражение "гвидобейсик" в адрес пистона?

     
     
  • 10.309, arisu (ok), 19:15, 01/11/2013 [^] [ответить]     [к модератору]  
  • +1 +/
    и что характерно 8212 вовсе не за синтаксис сюрприз, да ... весь текст скрыт [показать]
     
     
  • 11.318, Аноним (-), 09:29, 02/11/2013 [^] [ответить]     [к модератору]  
  • +2 +/
    За синтаксис тоже можно он ориентирован на загон дeбила в стойло Пинками Если... весь текст скрыт [показать]
     
     
  • 12.327, arisu (ok), 11:04, 02/11/2013 [^] [ответить]    [к модератору]  
  • +2 +/
    синтаксис отстойный, конечно, я не спорю. но гвидобейсик не потому гвидобейсик. :3
     
  • 9.319, Аноним (-), 09:52, 02/11/2013 [^] [ответить]     [к модератору]  
  • +1 +/
    Теоретически это может быть и так Практически - по логике вещей получается что ... весь текст скрыт [показать]
     
     
  • 10.328, arisu (ok), 11:06, 02/11/2013 [^] [ответить]     [к модератору]  
  • +/
    а чего спорного ты точно описал реальное положение вещей не идиотничай, пожалу... весь текст скрыт [показать]
     
  • 4.199, arisu (ok), 08:37, 31/10/2013 [^] [ответить]     [к модератору]  
  • +/
    вот конктретно 171 неопределённое поведение при целочисленном переполнении 18... весь текст скрыт [показать]
     
     
  • 5.230, Аноним (-), 15:48, 31/10/2013 [^] [ответить]    [к модератору]  
  • +/
    > ведут себя вполне определённо, и именно это поведение имело смысл стандартизировать.

    Тем более что процы умеют выставлять carry-флаг в массе своей на уровне железа, блин...

     
  • 5.235, Аноним (-), 16:04, 31/10/2013 [^] [ответить]     [к модератору]  
  • +/
    Ваши рассуждения очень напоминают поттеринга наше любимое ядро linux поддержив... весь текст скрыт [показать]
     
     
  • 6.253, arisu (ok), 16:48, 31/10/2013 [^] [ответить]     [к модератору]  
  • +/
    любую идею можно довести до абсурда 8212 и тогда получится полная фигня в да... весь текст скрыт [показать]
     
     
  • 7.307, Аноним (-), 19:07, 01/11/2013 [^] [ответить]     [к модератору]  
  • +/
    Ну вот поццеринг примерно так же и рассуждал Кому надо - пусть эмулируют ... весь текст скрыт [показать]
     
     
  • 8.311, Michael Shigorin (ok), 23:44, 01/11/2013 [^] [ответить]    [к модератору]  
  • +/
    > Ну вот поццеринг примерно так же и рассуждал.

    Мягко говоря, некорректное сравнение -- поскольку передёрнули правило и исключение.

     
  • 3.14, Аноним (-), 13:09, 30/10/2013 [^] [ответить]    [к модератору]  
  • +/
    > Это косяки ЯЗЫКА.
    > Стандарт С позволяет не только себе ногу отстрелить, но и покалечить окружающих.

    Могу посоветовать тебе и твоим функциональным аналогам писать на Visual Basic.

     
     
  • 4.36, Аноним (-), 13:44, 30/10/2013 [^] [ответить]     [к модератору]  
  • –3 +/
    Советы свои знаешь куда засунь ... весь текст скрыт [показать]
     
     
  • 5.98, Аноним (-), 16:25, 30/10/2013 [^] [ответить]    [к модератору]  
  • –1 +/
    > Советы свои знаешь куда засунь?

    Да ладно. Барсик - это тайная эротическая мечта любого сишника)

     
     
  • 6.156, Аноним (-), 20:19, 30/10/2013 [^] [ответить]    [к модератору]  
  • +3 +/
    > Да ладно. Барсик - это тайная эротическая мечта любого сишника)

    Вы явно путаете сишников и питонистов. Тут один типаж даже название ему придумал - гвидобэйсик.

     
     
  • 7.241, Аноним (-), 16:14, 31/10/2013 [^] [ответить]     [к модератору]  
  • –1 +/
    Ну так правильно Питонисты имеют то, о чем сишники только мечтают ... весь текст скрыт [показать]
     
     
  • 8.245, arisu (ok), 16:29, 31/10/2013 [^] [ответить]     [к модератору]  
  • +2 +/
    честно не мечтаем мы о том, чтобы смена количества пробелов в начале строки изм... весь текст скрыт [показать]
     
  • 8.320, Аноним (-), 09:57, 02/11/2013 [^] [ответить]     [к модератору]  
  • +1 +/
    Тормозилово, с синтаксисом где дeбила пинками заставляют форматировать гoвнокод ... весь текст скрыт [показать]
     
  • 3.26, Филипп Филиппович (ok), 13:37, 30/10/2013 [^] [ответить]    [к модератору]  
  • +8 +/
    > Это косяки ЯЗЫКА.
    > Стандарт С позволяет не только себе ногу отстрелить, но и покалечить окружающих.

    Стандарт определяет язык, который хорошо переносим и одновременно эффективен. Результат переполнения сильно зависит от аппаратной платформы, поэтому язык НЕ МОЖЕТ регламентировать результат переполнения. Если он регламентирует, к каждой операции с арифметикой указателей придётся генерировать код проверки переполнения и приведения результатов к заданному стандартом виду. Это убьёт эффективность. Косяка в этом никакого нет, очень логичная особенность дизайна, если понимать, что язык изначально позиционировался как переносимая альтернатива ассемблеру.

    Другой вопрос, что сейчас уже не очень естественно писать почти всё прикладное ПО на таком языке. Но традиция пока жива. :-)


     
     
  • 4.44, тоже Аноним (ok), 13:57, 30/10/2013 [^] [ответить]     [к модератору]  
  • –3 +/
    Вообще-то почти все прикладное ПО пишут не на Сях, а скорее на Крестах В кото... весь текст скрыт [показать]
     
     
  • 5.47, Филипп Филиппович (ok), 14:12, 30/10/2013 [^] [ответить]     [к модератору]  
  • +/
    К сожалению, в крестах наследие Си очень сильно В теории -- да, стандартная биб... весь текст скрыт [показать]
     
     
  • 6.52, тоже Аноним (ok), 14:17, 30/10/2013 [^] [ответить]     [к модератору]  
  • –1 +/
    Это скорее legacy-проблемы За последнее время по всему интернету развешаны стат... весь текст скрыт [показать]
     
     
  • 7.57, Филипп Филиппович (ok), 14:30, 30/10/2013 [^] [ответить]     [к модератору]  
  • +/
    Это-то да Но ведь оно же лет без малого пятнадцать так Некоторые сдвиги есть, ... весь текст скрыт [показать]
     
     
  • 8.58, тоже Аноним (ok), 14:32, 30/10/2013 [^] [ответить]    [к модератору]  
  • +1 +/
    Потому что проблема не столько в легаси-коде, сколько в легаси-учебниках ;)

     
     
  • 9.66, Филипп Филиппович (ok), 14:47, 30/10/2013 [^] [ответить]    [к модератору]  
  • +1 +/
    Ну да, разруха не в клозетах. Она в головах. :-D

    Но я всё равно в последние несколько лет не люблю использовать C++ там, где удаётся не использовать.

     
     
  • 10.79, ананим (?), 15:12, 30/10/2013 [^] [ответить]     [к модератору]  
  • –2 +/
    Потому что не уверены в своих силах Я предпочитаю рассчитывать на себя больше, ... весь текст скрыт [показать]
     
     
  • 11.81, Филипп Филиппович (ok), 15:23, 30/10/2013 [^] [ответить]    [к модератору]  
  • +1 +/
    > Потому что не уверены в своих силах?

    Нет, не поэтому. Не хочу.

     
     
  • 12.86, ананим (?), 15:40, 30/10/2013 [^] [ответить]     [к модератору]  
  • –5 +/
    Да я и так понял Порассуждать с надутыми щёками мы все горазды Типа, ох уж эти... весь текст скрыт [показать]
     
     
  • 13.105, Филипп Филиппович (ok), 17:01, 30/10/2013 [^] [ответить]    [к модератору]  
  • +2 +/
    О, да-да, мнение опеннетовского анонима сейчас перевернёт мою вселенную. Впрочем, хотите самоутверждаться -- самоутверждайтесь, мне-то какое дело?
     
     
     
    Часть нити удалена модератором

  • 15.129, Филипп Филиппович (ok), 18:01, 30/10/2013 [^] [ответить]     [к модератору]  
  • +2 +/
    Ну-ну, просветите меня про состав стандартной библиотеки и расскажите, как жить ... весь текст скрыт [показать]
     
  • 10.124, dq0s4y71 (ok), 17:45, 30/10/2013 [^] [ответить]     [к модератору]  
  • +/
    Аналогично Для системного встроенного программирования использую Си, а С в эт... весь текст скрыт [показать]
     
     
  • 11.165, тоже Аноним (ok), 21:13, 30/10/2013 [^] [ответить]     [к модератору]  
  • +/
    Ну, а мне, например, нужно разрабатывать программы, которыми люди потом пользуют... весь текст скрыт [показать]
     
  • 6.200, arisu (ok), 08:40, 31/10/2013 [^] [ответить]    [к модератору]  
  • +/
    > Для начала половина
    > пользователей пишет на нём так, как будто это Си с дополнительными
    > фичами.

    единственный нормальный способ использовать плюсовое недоразумение.

     
     
  • 7.224, ананим (?), 15:39, 31/10/2013 [^] [ответить]     [к модератору]  
  • –1 +/
    Бред Нормальное плюсовое использование 8212 это шаблоны Вот это действитель... весь текст скрыт [показать]
     
     
  • 8.228, arisu (ok), 15:44, 31/10/2013 [^] [ответить]     [к модератору]  
  • +1 +/
    это мощь и красота костылей ещё и на уровне синтаксиса костыльных вообще, наст... весь текст скрыт [показать]
     
     
  • 9.252, ананим (?), 16:46, 31/10/2013 [^] [ответить]    [к модератору]  
  • –1 +/
    Ха! Шаблоны существовали уже тогда, когда маркетолухи ещё и слово то такое, генерики, не придумали.
    Да и сами генерики — облегённый вариант шаблонов для умственно-отсталых.
     
     
  • 10.329, Vkni (ok), 20:47, 02/11/2013 [^] [ответить]    [к модератору]  
  • +1 +/
    Я, честно говоря, тоже в своё время восхищался шаблонами, пока не узнал, что вывод типов появился в 1969-м и переоткрыт в 1978-м.

    Поэтому можно было сделать всё значительно красивее и приятнее.

     
  • 10.330, arisu (ok), 21:17, 02/11/2013 [^] [ответить]     [к модератору]  
  • +1 +/
    угу-угу правда, в Аде их придумали в районе 1978-го года, а первый cfront ни о ... весь текст скрыт [показать]
     
  • 2.16, Xasd (ok), 13:14, 30/10/2013 [^] [ответить]     [к модератору]  
  • +2 +/
    верно какого чёрта -- программист такой умный что уже ПОСЛЕ того как СОВЕРШИ... весь текст скрыт [показать]
     
     
  • 3.18, Аноним (-), 13:23, 30/10/2013 [^] [ответить]    [к модератору]  
  • +4 +/
    > buf >= INT_MAX/2 || len >= INT_MAX/2

    По-моему, это еще более страшный быдлoкод.

     
     
  • 4.21, Xasd (ok), 13:28, 30/10/2013 [^] [ответить]     [к модератору]  
  • –1 +/
    где ты тут код увидил тут лишь одно выражение, которое проверяет что каждое из ... весь текст скрыт [показать]
     
     
  • 5.29, Аноним (-), 13:40, 30/10/2013 [^] [ответить]     [к модератору]  
  • –2 +/
    Да-да, скажи ещё что кот по клавиатуре прошёл и оно само напечаталось Ты показа... весь текст скрыт [показать]
     
     
  • 6.31, Аноним (-), 13:41, 30/10/2013 [^] [ответить]    [к модератору]  
  • –1 +/
    > Плюс хамская манера общения

    Хамская манера общения тут только у тебя (хотя я и использовал слово "быдлoкод" парой сообщений выше).

     
     
  • 7.37, Аноним (-), 13:45, 30/10/2013 [^] [ответить]    [к модератору]  
  • +1 +/
    > Хамская манера общения тут только у тебя (хотя я и использовал слово
    > "быдлoкод" парой сообщений выше).

    Залогинься, Xasd. Щас прям, поверю что пришёл компетентный Аноним тебя защищать.

     
     
  • 8.50, Аноним (-), 14:15, 30/10/2013 [^] [ответить]    [к модератору]  
  • –1 +/
    Ну ты же знаешь, что комент про быдлoкод писал не ты? :)
     
  • 3.20, Аноним (-), 13:25, 30/10/2013 [^] [ответить]    [к модератору]  
  • +2 +/
    За такой код надо тебе по пальцам молотком для мяса пройтись.
     
     
  • 4.23, Xasd (ok), 13:28, 30/10/2013 [^] [ответить]     [к модератору]  
  • –2 +/
    ну напиши как надо балобол так как ты писать ни чего не будешь -- то разговор ... весь текст скрыт [показать]
     
     
  • 5.25, Аноним (-), 13:35, 30/10/2013 [^] [ответить]     [к модератору]  
  • +1 +/
    Лол, как тебя зацепило Нет уж - давай ты свои ошибки сам исправишь Подскажу в... весь текст скрыт [показать]
     
     
  • 6.33, Xasd (ok), 13:43, 30/10/2013 [^] [ответить]     [к модератору]  
  • –4 +/
    да -- я привёл код который просто проверяет переполнение при сложении совершенн... весь текст скрыт [показать]
     
     
  • 7.41, Аноним (-), 13:49, 30/10/2013 [^] [ответить]    [к модератору]  
  • +2 +/
    Оправдываться уже поздно, молодой человек. С вами всё понятно.
     
     
  • 8.45, Xasd (ok), 13:57, 30/10/2013 [^] [ответить]     [к модератору]  
  • –3 +/
    ну слово не воробей если уж я написал свою точку зрения -- назад взять слова не... весь текст скрыт [показать]
     
     
  • 9.177, Аноним (-), 22:32, 30/10/2013 [^] [ответить]     [к модератору]  
  • +/
    Это совершенно нормально По другому запускать код находящийся в known локации и... весь текст скрыт [показать]
     
  • 6.69, ананим (?), 14:51, 30/10/2013 [^] [ответить]     [к модератору]  
  • +/
    Именно что ЛОЛ Обозвал человека, докажи что заслуженно А пока только эти эпите... весь текст скрыт [показать]
     
     
  • 7.78, Xasd (ok), 15:10, 30/10/2013 [^] [ответить]     [к модератору]  
  • –1 +/
    да да, разумеется ULONG_MAX - buf len здесь конечно явно уместнее го... весь текст скрыт [показать]
     
     
  • 8.83, ананим (?), 15:33, 30/10/2013 [^] [ответить]     [к модератору]  
  • +/
    cat 222 c include stdio h main size_t l 0 можно с модификат... весь текст скрыт [показать]
     
     
  • 9.91, pavlinux (ok), 16:01, 30/10/2013 [^] [ответить]    [к модератору]  
  • +2 +/
    > /* Limit of 'size_t' type.  */

    Так не интересно, это читерство. :-P

     
     
  • 10.95, ананим (?), 16:07, 30/10/2013 [^] [ответить]    [к модератору]  
  • +/
    Кстати согласен.
    Такие вещи должны определятся на целевой платформе... но константа не требует вычислений! :D

    Зыж
    А хреневознает, может этот файл генерится при установке? ;)

     
     
  • 11.173, pavlinux (ok), 22:17, 30/10/2013 [^] [ответить]    [к модератору]  
  • +/
    > А хреневознает, может этот файл генерится при установке? ;)

    Какой, <stdint.h> ?  Не, он феншуйный - ISO/IEEE ля-ля-ля:1999

     
  • 8.89, pavlinux (ok), 15:57, 30/10/2013 [^] [ответить]     [к модератору]  
  • +/
    define SIZE_T_MAX 2UL sizeof size_t 8 - 1 - 1 как вариант define... весь текст скрыт [показать]
     
  • 3.30, Аноним (-), 13:40, 30/10/2013 [^] [ответить]    [к модератору]  
  • +1 +/
    > слогаемых

    По русскому у тебя то-же что и по информатике?

     
     
  • 4.39, Xasd (ok), 13:47, 30/10/2013 [^] [ответить]     [к модератору]  
  • +/
    нет, по русскому у меня была почти двойка а почему спрашиваешь может про физку... весь текст скрыт [показать]
     
     
  • 5.46, тоже Аноним (ok), 14:03, 30/10/2013 [^] [ответить]     [к модератору]  
  • +2 +/
    А информатики еще не было вовсе, мы поняли Бросьте позориться Вы написали безг... весь текст скрыт [показать]
     
     
  • 6.49, Xasd (ok), 14:12, 30/10/2013 [^] [ответить]     [к модератору]  
  • –2 +/
    была у нас даже были там в классе -- немножко компьютеров но при чём тут ... весь текст скрыт [показать]
     
     
  • 7.55, тоже Аноним (ok), 14:22, 30/10/2013 [^] [ответить]    [к модератору]  
  • +/
    То, что вы невнимательны, было заметно и до этого комментария.
    Работать с числами, большими половины максимума, вы тоже не видите смысла?
     
     
  • 8.60, Xasd (ok), 14:40, 30/10/2013 [^] [ответить]     [к модератору]  
  • –2 +/
    да, конечно а в некоторых случаях -- я даже не вижу смысла работать с числами к... весь текст скрыт [показать]
     
     
  • 9.168, Аноним (-), 21:33, 30/10/2013 [^] [ответить]     [к модератору]  
  • +4 +/
    Очень жаль что тебе не вкатили двойку в четверди по русскому языку Ты этого н... весь текст скрыт [показать]
     
     
  • 10.331, Xasd (ok), 00:50, 03/11/2013 [^] [ответить]     [к модератору]  
  • –1 +/
    с чего ты взял что такого не случалось как раз такое бывало - всё равно не... весь текст скрыт [показать]
     
     
  • 11.332, arisu (ok), 01:54, 03/11/2013 [^] [ответить]    [к модератору]  
  • +1 +/
    > с чего ты взял что такого не случалось?
    > как раз такое бывало :-) ..

    причём постоянно, судя по твоим текстам.

     
  • 11.334, Led (ok), 03:53, 03/11/2013 [^] [ответить]    [к модератору]  
  • +1 +/
    >> Очень жаль что тебе не вкатили двойку в "четверди" по русскому языку.
    > с чего ты взял что такого не случалось?
    > как раз такое бывало :-) ..

    И ещё будет

     
  • 7.202, arisu (ok), 08:49, 31/10/2013 [^] [ответить]     [к модератору]  
  • –2 +/
    зачем трудиться, если ты сам отлично справляешься с задачей 171 опазоривания ... весь текст скрыт [показать]
     
  • 3.77, ... (?), 15:03, 30/10/2013 [^] [ответить]     [к модератору]  
  • +/
    Подобные проверки перед каждой арифметической операцией негативно повлияют как н... весь текст скрыт [показать]
     
     
  • 4.99, ананим (?), 16:25, 30/10/2013 [^] [ответить]    [к модератору]  
  • –1 +/
    А для этого есть венгерская нотация и тд.
    Опять же, имеет смысл для глобальных (или в нэймспейсах) переменных.
    Для локальных переменных избяточно.
     
     
  • 5.203, arisu (ok), 08:56, 31/10/2013 [^] [ответить]     [к модератору]  
  • +/
    за такое применение венгерской нотации надо бить бамбуковой палкой по пяткам, от... весь текст скрыт [показать]
     
     
  • 6.214, ананим (?), 13:06, 31/10/2013 [^] [ответить]     [к модератору]  
  • +/
    а не нужно выдумывать левые обозначения для стандартных типов int тоже меняется... весь текст скрыт [показать]
     
  • 3.201, arisu (ok), 08:46, 31/10/2013 [^] [ответить]     [к модератору]  
  • +1 +/
    прикинь, процессор тоже делает именно так сюрпрайз, да а то, что си заставляет... весь текст скрыт [показать]
     
     
  • 4.321, Аноним (-), 10:04, 02/11/2013 [^] [ответить]     [к модератору]  
  • +/
    Ну там проблема в том что на ширину регистров завязано, тогда как целочисленные ... весь текст скрыт [показать]
     
     ....нить скрыта, показать (123)

  • 1.9, Аноним (-), 12:36, 30/10/2013 [ответить] [показать ветку] [···]    [к модератору]  
  • +7 +/
    вообще забавно:
    сначала обратиться к структуре по указателю (*sk = tun->sk), а уже затем проверить указатель на NULL
     
     
  • 2.28, Crazy Alex (ok), 13:39, 30/10/2013 [^] [ответить]     [к модератору]  
  • +3 +/
    Да уж, возмущаться таким кодом - умильно С первым примером, конечно, надо ворни... весь текст скрыт [показать]
     
     
  • 3.56, dq0s4y71 (ok), 14:26, 30/10/2013 [^] [ответить]    [к модератору]  
  • +/
    Зачем так сложно? :) Вот то, что имели ввиду авторы, но не осилили реализовать:

            if ((intptr_t)buf + len < buf)

     
     
  • 4.100, Аноним (-), 16:27, 30/10/2013 [^] [ответить]    [к модератору]  
  • +/
    > if ((intptr_t)buf + len < buf)

    И что, компилятор это не выкинет?

     
     
  • 5.111, dq0s4y71 (ok), 17:12, 30/10/2013 [^] [ответить]    [к модератору]  
  • +/
    Проверьте :)
     
  • 4.106, Crazy Alex (ok), 17:04, 30/10/2013 [^] [ответить]    [к модератору]  
  • +/
    Или так, но это optional тип.
     
     
  • 5.113, dq0s4y71 (ok), 17:15, 30/10/2013 [^] [ответить]    [к модератору]  
  • +/
    Что значит optional? Это стандартный тип, начиная с С99.
     
     
  • 6.116, Crazy Alex (ok), 17:29, 30/10/2013 [^] [ответить]    [к модератору]  
  • +/
    n1124.pdf

    7.18.1.4

    ...These types are optional

     
     
  • 7.125, dq0s4y71 (ok), 17:46, 30/10/2013 [^] [ответить]    [к модератору]  
  • +/
    Да, действительно.
     
  • 4.204, arisu (ok), 08:57, 31/10/2013 [^] [ответить]     [к модератору]  
  • +/
    беда в том, что значение этого выражения всё равно не определено, если случилось... весь текст скрыт [показать]
     
  • 1.22, Филипп Филиппович (ok), 13:28, 30/10/2013 [ответить] [показать ветку] [···]    [к модератору]  
  • +9 +/
    Строго говоря, код в примерах не очень корректный. Увы, подобные перлы действительно перестают работать в результате деятельности оптимизатора, но это проблема кода, а не оптимизатора.

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

    Ну и в переводе ошибка. Это не tun->sk не может быть нулевым, это tun не может быть нулевым. Кстати, в этом примере трудно не согласиться с оптимизатором! Если строкой выше идёт доступ к члену структуры, то указатель просто не имеет права быть нулевым. Проверять надо до доступа. Глючный код -- неопределённый результат, в чём удивление? Тот, кто этот код писал, видел за кодом арифметику с указателями  на уровне ассемблерных команд. Это ценное умение. Но одновременно -- отвратительная привычка, если сопровождается тем, что программист рассчитывает на определённую низкоуровневую реализацию. Так он просто не сможет писать переносимый код.

    Рациональное зерно, правда, в том, что кривоватый код, который ранее работал безупречно, может перестать это делать с включением оптимизации или заменой версии компилятора. Но ведь это ожидаемо и очевидно, нет?

     
     
  • 2.48, тоже Аноним (ok), 14:12, 30/10/2013 [^] [ответить]     [к модератору]  
  • –1 +/
    Если позволите, вопрос от не читавшего стандарт А что, в С разыменование указат... весь текст скрыт [показать]
     
     
  • 3.61, Аноним (61), 14:40, 30/10/2013 [^] [ответить]    [к модератору]  
  • +2 +/
    > А что, в С разыменование указателя не сопровождается проверкой на NULL?

    Еще чего не хватало.

     
  • 3.62, Филипп Филиппович (ok), 14:41, 30/10/2013 [^] [ответить]     [к модератору]  
  • +/
    Вы про нулевой указатель и tun- sk Да, там прибавление смещения Но ведь даже ... весь текст скрыт [показать]
     
     
  • 4.67, Аноним (61), 14:49, 30/10/2013 [^] [ответить]    [к модератору]  
  • –1 +/
    > И, кстати, что бинарно представляет собой этот нулевой указатель, иди разбери -- где как.

    На любой вменяемой платформе это 0.

     
     
  • 5.76, Филипп Филиппович (ok), 15:01, 30/10/2013 [^] [ответить]     [к модератору]  
  • +/
    Э, не спешите Если в плоской модели, то наверное Я другого ещё не видел, во вс... весь текст скрыт [показать]
     
     
  • 6.80, Аноним (61), 15:20, 30/10/2013 [^] [ответить]    [к модератору]  
  • +/
    Я же специально написал "на любой вменяемой платформе" :)
     
  • 6.118, dq0s4y71 (ok), 17:30, 30/10/2013 [^] [ответить]    [к модератору]  
  • +/
    Вообще-то, на любой платформе это 0. Внутреннее представление значения не имеет. http://c-faq.com/null/ptrtest.html
     
     
  • 7.128, Филипп Филиппович (ok), 17:59, 30/10/2013 [^] [ответить]    [к модератору]  
  • +/
    Ну я же говорил не о том, что оно сравнивается с нулём на C. Я говорил именно о том, что там бинарно, выше же так и написано.
     
  • 7.206, arisu (ok), 09:03, 31/10/2013 [^] [ответить]     [к модератору]  
  • +/
    тут нюанс NULL 8212 это всегда 0, и всегда обозначает 171 негодный указате... весь текст скрыт [показать]
     
  • 4.71, тоже Аноним (ok), 14:54, 30/10/2013 [^] [ответить]     [к модератору]  
  • +/
    Да, пардон, это я напутал Никаких проверок в самом коде, конечно Это система в... весь текст скрыт [показать]
     
     
  • 5.72, Аноним (61), 14:55, 30/10/2013 [^] [ответить]     [к модератору]  
  • +/
    Разумеется это не так ... весь текст скрыт [показать]
     
  • 5.74, Филипп Филиппович (ok), 14:58, 30/10/2013 [^] [ответить]     [к модератору]  
  • +/
    Нет, всё не так - Очень много где будет защита и от чтения Стандарт такую пр... весь текст скрыт [показать]
     
  • 5.107, Crazy Alex (ok), 17:05, 30/10/2013 [^] [ответить]    [к модератору]  
  • +/
    На каком-нибудь эмбеде запись по нулевому адресу может быть абсолютно корректной. На AVR том же.
     
     
  • 6.127, dq0s4y71 (ok), 17:56, 30/10/2013 [^] [ответить]     [к модератору]  
  • +/
    Такая запись, возможно, не вызовет исключения, но это не значит, что она будет к... весь текст скрыт [показать]
     
     
  • 7.135, Crazy Alex (ok), 18:25, 30/10/2013 [^] [ответить]    [к модератору]  
  • +/
    На AVR по нулевому адресу находится регистр R0. Читать/писать его таким образом абсолютно корректно.
     
     
  • 8.151, Аноним (-), 20:05, 30/10/2013 [^] [ответить]     [к модератору]  
  • +/
    AVR вообще гарвардец, по поводу чего у него несколько адресных пространств в сам... весь текст скрыт [показать]
     
     
  • 9.162, Crazy Alex (ok), 21:01, 30/10/2013 [^] [ответить]     [к модератору]  
  • +1 +/
    Угу, гаврвардец Но ещё у него регистры спроецированы в адресное пространство Ч... весь текст скрыт [показать]
     
     
  • 10.169, Аноним (-), 21:45, 30/10/2013 [^] [ответить]     [к модератору]  
  • +/
    Да, иногда это удобно Был тут один проц - ему переполнение буфера перезаписы... весь текст скрыт [показать]
     
     
  • 11.198, тоже Аноним (ok), 08:35, 31/10/2013 [^] [ответить]     [к модератору]  
  • +/
    Два способа навскидку ассемблерные вставки и какое-нибудь PRAGMA_I_KNOW_WHAT_I_... весь текст скрыт [показать]
     
  • 10.207, arisu (ok), 09:05, 31/10/2013 [^] [ответить]     [к модератору]  
  • +/
    а это туда, к дизайнерам стандарта NULL оно же 0 8212 это 171 негодный у... весь текст скрыт [показать]
     
     
  • 11.322, Аноним (-), 10:17, 02/11/2013 [^] [ответить]     [к модератору]  
  • +/
    Дяденьки, идите нафиг На сях можно и как-то так void entry void 0x0 in... весь текст скрыт [показать]
     
     
  • 12.325, arisu (ok), 11:02, 02/11/2013 [^] [ответить]    [к модератору]  
  • +/
    > На это gcc даже warning не выдает.

    и не должно.

     
  • 7.146, Филипп Филиппович (ok), 19:24, 30/10/2013 [^] [ответить]     [к модератору]  
  • +/
    Это к вопросу про то, какой указатель Там было несколько моделей памяти, в том ... весь текст скрыт [показать]
     
  • 3.205, arisu (ok), 09:00, 31/10/2013 [^] [ответить]     [к модератору]  
  • +/
    нет этого делать нельзя, но по рукам никто не ударит, и код проверки тоже не вс... весь текст скрыт [показать]
     
     ....нить скрыта, показать (24)

  • 1.24, Tav (ok), 13:32, 30/10/2013 [ответить] [показать ветку] [···]    [к модератору]  
  • +5 +/
    В приведенных примерах компилятор следует стандарту, а программист предполагает определенное поведение в случаях, для которых оно не определено. Это не проблема компилятора.
     
     
  • 2.27, Филипп Филиппович (ok), 13:39, 30/10/2013 [^] [ответить]     [к модератору]  
  • +/
    Именно так Но, возможно, проблема пользователя, который получил некорретно рабо... весь текст скрыт [показать]
     
  • 1.40, commiethebeastie (ok), 13:49, 30/10/2013 [ответить] [показать ветку] [···]    [к модератору]  
  • +1 +/
    -ffast-math годный дырооптимизатор.
     
  • 1.42, Андерй (?), 13:54, 30/10/2013 [ответить] [показать ветку] [···]    [к модератору]  
  • –1 +/
    Интересно, какие ошибки компилятора нужны АНБ, что используется именно определённая старая версия для TrueCrypt?...
     
  • 1.54, dq0s4y71 (ok), 14:19, 30/10/2013 [ответить] [показать ветку] [···]    [к модератору]  
  • +2 +/
    Как здесь справедливо заметили, это - косяки программистов. В первом примере, если вы ожидаете переполнения (т.е. перехода в область отрицательных значений), то вы должны и проверять его КОРРЕКТНО, т.е.:

            if ((intptr_t)buf + len < buf)

    Этот код работает как надо при любой оптимизации, можете проверить.

    Второй пример вообще странный. Если tun == NULL, то ваша программа упадёт ещё до того, как она достигнет оптимизируемого участка. Обвинять оптимизацию в том, что она неправильно компилит и без того кривую программу - это, конечно, сильно...


     
     
  • 2.123, клоун Стаканчик (?), 17:40, 30/10/2013 [^] [ответить]     [к модератору]  
  • –1 +/
    Если len объявлена беззнаковым числом, то buf len buf ложно при любых значениях ... весь текст скрыт [показать]
     
     
  • 3.132, dq0s4y71 (ok), 18:23, 30/10/2013 [^] [ответить]     [к модератору]  
  • +/
    Почему это Сравниваются ведь указатели, а не целые, поэтому целое будут преобра... весь текст скрыт [показать]
     
     
  • 4.137, клоун Стаканчик (?), 18:43, 30/10/2013 [^] [ответить]     [к модератору]  
  • –2 +/
    Почему это Сравниваются ведь указатели, а не целые, поэтому целое будут преобра... весь текст скрыт [показать]
     
     
  • 5.143, Ordu (ok), 19:06, 30/10/2013 [^] [ответить]    [к модератору]  
  • +/
    > buf + len >= buf. Всегда для беззнакового len. Согласны?

    Нет. Пример для 32-х битной платформы: buf=(void*) 0xffffffff; len=1

     
  • 5.144, ананим (?), 19:06, 30/10/2013 [^] [ответить]     [к модератору]  
  • +3 +/
    Проводить сравнение методом 171 а давайте попробуем вызвать переполнение 187... весь текст скрыт [показать]
     
  • 5.150, Аноним (-), 19:55, 30/10/2013 [^] [ответить]     [к модератору]  
  • +/
    Вот ты и показал что ты болванчик Как ты думаешь, что будет если к 32-битному u... весь текст скрыт [показать]
     
     
  • 6.159, Аноним (-), 20:27, 30/10/2013 [^] [ответить]    [к модератору]  
  • +/
    >> buf + len >= buf. Всегда для беззнакового len. Согласны?
    > Вот ты и показал что ты болванчик. Как ты думаешь,

    Так думает не он, разработчики компиляторов.

     
     
  • 7.167, ананим (?), 21:21, 30/10/2013 [^] [ответить]    [к модератору]  
  • +/
    Неа. Так думаешь ты и ахтур этого гoвнoкoда.
    А компилятор думает а) С детишкам не игрушка и б) совсем тyпoй код надо выкинуть, если ахтур попросил его оптимизировать этот гoвнoкoд.
     
  • 7.170, Аноним (-), 22:08, 30/10/2013 [^] [ответить]    [к модератору]  
  • +/
    > Так думает не он, разработчики компиляторов.

    На самом деле все проще: математика у процов так работает.

     
  • 7.208, arisu (ok), 09:09, 31/10/2013 [^] [ответить]     [к модератору]  
  • +4 +/
    нет разработчики компиляторов следуют стандарту, в котором сказано, что перепол... весь текст скрыт [показать]
     
     ....нить скрыта, показать (10)

  • 1.63, annulen (ok), 14:45, 30/10/2013 [ответить] [показать ветку] [···]    [к модератору]  
  • +4 +/
    Оптимизации компилятора не нарушают стандарт языка, так что достаточно не писать код с undefined behavior, или выявлять его с помощью инструментов, таких как UB sanitizer в Clang.
     
  • 1.68, iZEN (ok), 14:50, 30/10/2013 [ответить] [показать ветку] [···]    [к модератору]  
  • –4 +/
    Доигрались. Вот так.
     
     
  • 2.73, ананим (?), 14:58, 30/10/2013 [^] [ответить]     [к модератору]  
  • +2 +/
    До чего Что быдлo-кoд также ещё и быдлo-oптимизируется Так это и без этой рекл... весь текст скрыт [показать]
     
  • 2.148, Аноним (-), 19:47, 30/10/2013 [^] [ответить]    [к модератору]  
  • +4 +/
    Жду когда изя перепишет фряшечку на яву :).
     
  • 1.84, Пиу (ok), 15:36, 30/10/2013 [ответить] [показать ветку] [···]    [к модератору]  
  • +1 +/
    новость - боян и фигня. уже много лет говорят про UB и что нужно его избегать.

    было бы куда интереснее, если бы они взяли настоящие баги компиляторов (а их много) и нашли те, которые бы приводили бы к проблема безопастности приложений.
    а так - это курсовая второкурсника на факультете информационной безопастности

     
  • 1.90, Аноним (-), 15:59, 30/10/2013 [ответить] [показать ветку] [···]    [к модератору]  
  • –1 +/
    Главное, что они написали анализатор, который тычет программистов в их косяки. А, по-хорошему, этим должен бы заниматься компилятор. Тот же Clang гордиться своими многословными отчётами.
     
     
  • 2.110, Crazy Alex (ok), 17:10, 30/10/2013 [^] [ответить]     [к модератору]  
  • +1 +/
    Вот как раз компилятор этого делать и не должен Он должен запускаться один раз ... весь текст скрыт [показать]
     
     
  • 3.160, NoName (?), 20:54, 30/10/2013 [^] [ответить]    [к модератору]  
  • +/
    SRP вообщето...
     
     
  • 4.163, Crazy Alex (ok), 21:05, 30/10/2013 [^] [ответить]    [к модератору]  
  • +/
    Ну да, с аббревиатурами я не в ладах - в голове оно всё же не словами хранится. Сорри.
     
  • 3.306, Аноним (-), 19:03, 01/11/2013 [^] [ответить]     [к модератору]  
  • –1 +/
    Ага И так как про сообщения об ошибках компиляции в стандарте ничего не сказано... весь текст скрыт [показать]
     
  • 3.310, annulen (ok), 21:43, 01/11/2013 [^] [ответить]     [к модератору]  
  • –1 +/
    Собственно, clang это и делает, если не просить о большем Замечательно И как т... весь текст скрыт [показать]
     
  • 2.176, Аноним (-), 22:29, 30/10/2013 [^] [ответить]     [к модератору]  
  • +1 +/
    Давайте компилятор еще и программы писать начнет вместо программиста А программ... весь текст скрыт [показать]
     
  • 1.96, pavlinux (ok), 16:14, 30/10/2013 [ответить] [показать ветку] [···]    [к модератору]  
  • +/
    > подготовлен специальный статический анализатор STACK.

    Они его ужо открыли?

     
     
  • 2.112, Crazy Alex (ok), 17:13, 30/10/2013 [^] [ответить]    [к модератору]  
  • +/
    git clone git://g.csail.mit.edu/stack
     
     
  • 3.219, pavlinux (ok), 15:03, 31/10/2013 [^] [ответить]    [к модератору]  
  • +/
    > git clone git://g.csail.mit.edu/stack

    Да ладно!?!?!

     
  • 1.108, BratSinot (ok), 17:05, 30/10/2013 [ответить] [показать ветку] [···]    [к модератору]  
  • +1 +/
    Мне кажется или подобные "проверки" на выход за пределы сами по себе ошибки?
     
     
  • 2.149, Аноним (-), 19:51, 30/10/2013 [^] [ответить]     [к модератору]  
  • +4 +/
    Особенно порадовало if buf len buf Хакиры, однако Про переполнение зна... весь текст скрыт [показать]
     
     
  • 3.220, pavlinux (ok), 15:10, 31/10/2013 [^] [ответить]     [к модератору]  
  • +/
    Ваш вариант определения переполнения суммы, при условии, что операнды должны быт... весь текст скрыт [показать]
     
     
  • 4.223, arisu (ok), 15:39, 31/10/2013 [^] [ответить]     [к модератору]  
  • +/
    а тут уже не раз приводили, вообще-то в данном случае 8212 UINTPTR_MAX- ui... весь текст скрыт [показать]
     
     
  • 5.271, Аноним (-), 23:45, 31/10/2013 [^] [ответить]     [к модератору]  
  • +/
    так нельзя, т к UINTPTR_MAX может быть больше фактического значения адреса Во... весь текст скрыт [показать]
     
     
  • 6.274, arisu (ok), 06:05, 01/11/2013 [^] [ответить]     [к модератору]  
  • –1 +/
    хм портабельного метода узнать 171 место, где Земля закругляется 187 нет н... весь текст скрыт [показать]
     
     
  • 7.280, all_glory_to_the_hypnotoad (ok), 12:36, 01/11/2013 [^] [ответить]     [к модератору]  
  • +2 +/
    для тупых ещё раз объясняю, uintptr_t может иметь большую битность чем void , не... весь текст скрыт [показать]
     
     
  • 8.285, arisu (ok), 13:21, 01/11/2013 [^] [ответить]    [к модератору]  
  • –1 +/
    читать учись, дятел.
     
  • 6.277, клоун Стаканчик (?), 11:03, 01/11/2013 [^] [ответить]     [к модератору]  
  • –2 +/
    Проблема возникает исключительно при программировании ядра Линукс Для всех оста... весь текст скрыт [показать]
     
     
  • 7.278, arisu (ok), 11:07, 01/11/2013 [^] [ответить]     [к модератору]  
  • +1 +/
    а потом офигевают отчего это их говнософт не собирается на другой платформе ах... весь текст скрыт [показать]
     
     
  • 8.282, клоун Стаканчик (?), 13:03, 01/11/2013 [^] [ответить]     [к модератору]  
  • –2 +/
    Для реализации специфического функционала делают HAL Внешне код из ifdef X86 ... весь текст скрыт [показать]
     
     
  • 9.286, arisu (ok), 13:22, 01/11/2013 [^] [ответить]     [к модератору]  
  • +2 +/
    8230 и радостно вызывают внешнюю функцию для сложения круто я понимаю, п... весь текст скрыт [показать]
     
     
  • 10.287, клоун Стаканчик (?), 13:46, 01/11/2013 [^] [ответить]    [к модератору]  
  • –1 +/
    inline bool isOverflow(ptr,size);

    if(isOverflow(buf,len))fail();

     
     
  • 11.288, arisu (ok), 13:49, 01/11/2013 [^] [ответить]    [к модератору]  
  • +1 +/
    других операций у нас не бывает, ага.
     
     
  • 12.289, клоун Стаканчик (?), 14:24, 01/11/2013 [^] [ответить]    [к модератору]  
  • –1 +/
    Не затруднит привести пример кода на Си, который, по твоему мнению, нельзя выделить в отдельную функцию?
     
  • 9.298, Michael Shigorin (ok), 15:13, 01/11/2013 [^] [ответить]    [к модератору]  
  • +1 +/
    > Тут я один профессионально программированием занимаюсь?

    Разве что себя, поскольку одноплатформенный профессионал -- это оксюморон.

     
  • 7.279, тоже Аноним (ok), 11:07, 01/11/2013 [^] [ответить]     [к модератору]  
  • +/
    И очень этим радуют неадекватных людей, которые собирают не только под x86 Толь... весь текст скрыт [показать]
     
  • 7.281, all_glory_to_the_hypnotoad (ok), 12:41, 01/11/2013 [^] [ответить]    [к модератору]  
  • +/
    > Проблема возникает исключительно при программировании ядра Линукс.

    в ядре всегда известна модель памяти. И нигде нет необходимости проверять переполнение указателя, это выдуманная проблема.

     
  • 7.297, Michael Shigorin (ok), 15:10, 01/11/2013 [^] [ответить]    [к модератору]  
  • +1 +/
    > Из темы ядро никто не разрабатывал

    Врёте.

     
  • 5.273, pavlinux (ok), 02:33, 01/11/2013 [^] [ответить]    [к модератору]  
  • +/
    В общем если так дрочить код, то проще изначально не создавать проблем.
     
     
  • 6.275, arisu (ok), 06:07, 01/11/2013 [^] [ответить]     [к модератору]  
  • +/
    p s павлин, ну хлоп твою железку ну перестань же ПОЛНОСТЬЮ посты перед... весь текст скрыт [показать]
     
  • 4.323, Аноним (-), 10:45, 02/11/2013 [^] [ответить]    [к модератору]  
  • +/
    > Ваш вариант определения переполнения суммы,

    Изначально неверная постановка задачи. На самом деле цель - поймать выход за границы буфера.

     
     ....нить скрыта, показать (21)

  • 1.133, Аноним (-), 18:23, 30/10/2013 [ответить] [показать ветку] [···]     [к модератору]  
  • +1 +/
    Пардон, но если программист в своём коде допускает случаи, когда поведение прогр... весь текст скрыт [показать]
     
     
  • 2.141, клоун Стаканчик (?), 18:57, 30/10/2013 [^] [ответить]    [к модератору]  
  • +/
    Это называется парадокс римского права: знать все законы невозможно, при этом незнание законов не избавляет от ответственности. В рамках строгой логики данный парадокс неразрешим.
     
  • 2.174, Аноним (-), 22:28, 30/10/2013 [^] [ответить]     [к модератору]  
  • +1 +/
    Именно так - при том уповать на то что не описано в стандарте и или а вроде раб... весь текст скрыт [показать]
     
     
  • 3.209, arisu (ok), 09:12, 31/10/2013 [^] [ответить]     [к модератору]  
  • +/
    притом в конкретно описаной ситуации и там же сказано, что в другой ситуации по... весь текст скрыт [показать]
     
  • 3.222, pavlinux (ok), 15:21, 31/10/2013 [^] [ответить]     [к модератору]  
  • +1 +/
    Всё такие вумные Если уж вдаваться в абсолютизм, то НЕЛЬЗЯ ОБЕСПЕЧИТЬ КОРРЕКТН... весь текст скрыт [показать]
     
     
  • 4.225, Crazy Alex (ok), 15:40, 31/10/2013 [^] [ответить]    [к модератору]  
  • +/
    Этот абсолютизм к реальной жизни ни малейшего отношения не имеет.
     
     
  • 5.259, pavlinux (ok), 17:43, 31/10/2013 [^] [ответить]    [к модератору]  
  • +/
    > Этот абсолютизм к реальной жизни ни малейшего отношения не имеет.

    Нужно добавить к твоей реальной жизни.

    В институтах, на мех.-мате МГУ, в МИФИ,... много работ по этой теме.  

     
  • 4.231, arisu (ok), 15:51, 31/10/2013 [^] [ответить]     [к модератору]  
  • +/
    чушь возможно, даже в случае, когда не гарантируется, что все 171 примитивы ... весь текст скрыт [показать]
     
     
  • 5.261, pavlinux (ok), 17:53, 31/10/2013 [^] [ответить]     [к модератору]  
  • +/
    Знаешь такую фичу, что корректность перевода на иностранный язык, с целью понима... весь текст скрыт [показать]
     
     
  • 6.262, arisu (ok), 17:58, 31/10/2013 [^] [ответить]    [к модератору]  
  • +1 +/
    > Вроде test eax, ebx  и cmp eax, ebx одно и тоже, но на разных наречиях…

    это для тех, кто язык плохо выучил. а для тех, кто хорошо выучил — «есть нюанс».

     
     
  • 7.272, pavlinux (ok), 01:55, 01/11/2013 [^] [ответить]     [к модератору]  
  • +/
    Этот нюанс зовётся компилятор, ибо на C ты напишешь if x 0 , а компулятор... весь текст скрыт [показать]
     
     
  • 8.276, arisu (ok), 06:09, 01/11/2013 [^] [ответить]    [к модератору]  
  • +/
    > Этот нюанс зовётся компилятор

    нет, этот нюанс зовётся «процессор». test — это побитовый and, видишь ли, а cmp — это sub.

     
     
  • 9.316, pavlinux (ok), 02:14, 02/11/2013 [^] [ответить]     [к модератору]  
  • +/
    Ну вот и представь ституёвину, когда программа после команды test ломается , та... весь текст скрыт [показать]
     
     
  • 10.326, arisu (ok), 11:03, 02/11/2013 [^] [ответить]    [к модератору]  
  • +/
    если предполагается, что примитивы могут косячить, то не поверишь — сначала проверяют примитивы.
     
     
  • 11.333, pavlinux (ok), 02:08, 03/11/2013 [^] [ответить]     [к модератору]  
  • +/
    Ну вот слава яйца, хоть народ до компилятора добрался и отловили описанные в нов... весь текст скрыт [показать]
     
     ....нить скрыта, показать (14)

  • 1.147, Аноним (-), 19:42, 30/10/2013 [ответить] [показать ветку] [···]    [к модератору]  
  • –1 +/
    Выход один, компилятор должен компилировать, а вот оптимизировать ли код должен решать конечный пользователь компилятора. Согласен с оптимизацией значит должен понимать что приносишь в жертву.
     
     
  • 2.152, const86 (ok), 20:14, 30/10/2013 [^] [ответить]    [к модератору]  
  • +1 +/
    Это полумера. Достаточно заковыристый код может и без оптимизатора стать дырой в безопасности.
     
  • 2.175, Аноним (-), 22:28, 30/10/2013 [^] [ответить]    [к модератору]  
  • +1 +/
    > Выход один, компилятор должен компилировать, а вот оптимизировать ли код должен решать
    > конечный пользователь компилятора.

    gcc -O0 вам в руки :)

     
     
  • 3.186, Сталин (?), 00:56, 31/10/2013 [^] [ответить]    [к модератору]  
  • –1 +/
    gcc -O0  | upx -9
     
  • 1.191, arisu (ok), 08:22, 31/10/2013 [ответить] [показать ветку] [···]    [к модератору]  
  • +4 +/
    после первого говнопримера читать прекратил: результат 'buf + len' при переполнении тупо не определён. «группе исследователей» — гоугоу читать стандарты, а потом уже делать заявления.

    дятлы.

     
  • 1.244, Аноним (-), 16:27, 31/10/2013 [ответить] [показать ветку] [···]     [к модератору]  
  • +/
    Это просто ещё одно доказательство, что убогий сипипи не приспособлен для промыш... весь текст скрыт [показать]
     
     
  • 2.247, arisu (ok), 16:32, 31/10/2013 [^] [ответить]     [к модератору]  
  • +/
    а они там уже перестали язык-то перетрясать и стандартные библиотеки пока что ... весь текст скрыт [показать]
     
  • 2.263, тоже Аноним (ok), 18:38, 31/10/2013 [^] [ответить]     [к модератору]  
  • +/
    Вообще-то это аксиома любой убогий язык не приспособлен для мэйнстрима Просто ... весь текст скрыт [показать]
     
  • 1.335, rihad (?), 16:41, 06/11/2013 [ответить] [показать ветку] [···]    [к модератору]  
  • +/
    Код сам неосторожно написан. Компилятор просто следует стандарту, а стандарт гласит, что любая арифметика на указателях должна ссылаться на один и тот же массив, выходя не больше, чем на 1 элемент после него. Поведение программы в противном случае не определено.

       char *buf = ...;
       char *buf_end = ...;
       unsigned int len = ...;
       if (buf + len >= buf_end)
          return;  /* len too large */
       if (buf + len < buf)
          return; /* overflow, buf+len wrapped around write to buf[0..len-1] */

    Во второй проверке, результат сложения в случае переполнения ссылался бы до объекта, поэтому поведение было бы не определено. Значит компилятор избегает неопределенного поведения.
    Лучше было бы вместо обоих условий простое if (buf_end - buf <= len) return;

    Во втором примере
       struct tun_struct *tun = ...;
       struct sock *sk = tun->sk;
       if (!tun)
          return POLLERR; /* write to address based on tun */

    Если бы tun было NULL, обращение tun->sk не определено. Опять же, компилятор избегает не определенного кода if (!tun).

     
  • 1.337, IRASoldier (?), 12:15, 18/06/2018 [ответить] [показать ветку] [···]    [к модератору]  
  • +/
    Компилятор выкидывает из кода костыли и грязные хаки (" неопределённые или нестабильные участки кода") - виноват компилятор, а не писатель костылей и грязных хаков, мда.
     

     Добавить комментарий
    Имя:
    E-Mail:
    Заголовок:
    Текст:


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