LINUX.ORG.RU

Избранные сообщения naszar

Я познаю strict aliasing

Форум — Development

Всем привет, недавно у меня стало возникать слишком много мыслей о том, насколько легитимно приводить типы указателей в некоторых случаях и не нарушает ли это правил strict aliasing.

Компилируется код такой командой (gcc 4.9.2):

gcc test.c -o /dev/null -O3 -Wall -Wextra

Случай №1. Есть какой-то буфер в виде массива чаров, полученный откуда-то (по сети, например). Хочется его распарсить, для этого привести char * к какому-нибудь struct payload * и работать со структурой; выравнивание и порядок байтов к вопросу отношения не имеют, считаем, что там всё правильно. Для примера можно для упрощения вместо struct payload взять обычный int — с ним происходит то же самое:

int main()
{
        char buf[5] = "TEST";
        int *p = (int *)&buf; // По стандарту char может алиасить любой тип, но не наоборот
        *p = 0x48414559; // Но здесь предупреждения о нарушении strict aliasing почему-то нет
        *(int *)buf = 0x48414559; // А вот здесь есть
//        *(int *)(buf+1) = 0x48414559; // Вот так уже не будет, кстати
        return 0;
}
test.c: In function 'main':
test.c:6:2: warning: dereferencing type-punned pointer will break strict-aliasing rules [-Wstrict-aliasing]
  *(int *)buf = 0x48414559;
  ^

Вопрос: чем отличается доступ через указатель p и через buf, приведенный к int *? Почему в одном случае нет варнинга, в другом есть? Действительно ли в одном случае нарушается правило strict aliasing, а в другом нет? Или это потерянный варнинг? Или особенность реализации gcc?

Случай №2. Приведение struct sockaddr_in * к struct sockaddr *, использующееся повсеместно. Для чистоты эксперимента структуры объявнены вручную, а не взяты из хедеров. Да, их наполнение отличается от того, что там должно быть. Итак, я решил продолжить эксперимент с приведением типа указателя без промежуточной переменной.

#include <stdint.h>

struct sockaddr {
        uint16_t sa_family;
        char sa_data[14];
};

struct sockaddr_in
{
        uint16_t sin_family;
        uint16_t sin_port;
        uint32_t sin_addr;
        char sin_zero[8];
};

int main()
{
        {
                struct sockaddr_in addr;
                ((struct sockaddr *)&addr)->sa_family = 2; // Тут варнинга почему-то нет
        }
        {
                char addr[16];
                ((struct sockaddr *)&addr)->sa_family = 2; // А тут есть, как и в предыдущем примере
        }
        {
                uint32_t addr[4];
                ((struct sockaddr *)&addr)->sa_family = 2; // А здесь почему-то снова нет
        }
        return 0;
}

Господа, я в замешательстве. Вот моё мнение по этому поводу:

В первом примере нарушения правила strict aliasing есть в обоих случаях (char может алиасить любой тип, но не наоборот), однако варнинг есть почему-то в одном из случаев, в связи с этим вопрос: это недостающий варнинг или особенность поведения gcc?

Во втором примере нарушений правила strict aliasing нет, поскольку я обращаюсь только к объекту struct sockaddr. Однако в случае, когда addr — это массив чаров (как в первом примере), варнинг возникает. Здесь аналогичный вопрос: это лишний варнинг, или же смысл различен?

Ну и один глобальный вопрос: если я где-то в своих рассуждениях ошибаюсь (или чего-то не понимаю), то где?

 

gentoo_root
()

Кто сталкивался с установкой оборудования в условиях частого появления грозы

Форум — Linux-hardware

Как правильно организовать грозозащиту? Наружное оборудование - WiFi, видеокамеры и наружная витая пара.

 , ,

Siado
()

Выложено видео прошедшей лекции «Linux во встраиваемых системах»

Новости — Конференции и встречи
Группа Конференции и встречи

18 ноября 2014 года в Хакспейс Neuron прошла лекция ncrmnt о Linux-е во встраиваемых системах.

Лекция выложена .

>>> Подробности

 , , ,

DR_SL
()

События при потере и восстановлении линка

Форум — Development

Может кто-нибудь описать или ткнуть в мануал, что происходит в системе, какие события, что она шлет, какие сигналы если мы вытащили кабель актипвного сетевого соединения? Если восстановили кабель на место? Что будет если программа пытается прочитать или отправить данные через сокет в этот период? Желательно прям хронологию событий в системе.

 , ,

hibou
()

«Хорошая» книга по LaTeX

Форум — Talks

Всем привет!

Руки до сабжа дотянулись теперь основательно...Adobe Acrobat меня доканал. Теперь хочу применить скилл «пряморучие» в готовке pdf-текстов.

Я когда-то давно поднимал вопрос...но теперь встал вопрос: а какую книгу лучше всего взять?

Я пробовал силы через Kottwitz: LaTeX for beginner's guide (легальная копия тутта). Но чета она перегружена «троллингом». Читать можно, но сложно. Хочется, чтобы был текст...и текст. Как в книге.

Посоветуй ЛОР пжст, мотивация есть, необходимость есть. TeXLive на всех компах...а хорошего мануала пока нема.

 , ,

bookman900
()

Мой любимый Vim и Tmux

Галерея — Скриншоты

Вот так вот живем. Минимальная конфигурация редактора, которую я в процессе работы в нем постепенно дописывал. Из того, что сделано:

В консоле курсор может менять свой вид (block mode, insert mode)

Иконки для NERDTree

Собственная модификация шрифтов Menlo for Powerline (кое что добавлено)

Автокомплит через jedi-vim

fugutive и signify для работы с git

airline

bclose (удаляет буфер без закрытия окна)

и пр. незначительные расширения.

Использую oh-my-zsh с этими плагинами:

https://github.com/zsh-users/zsh-history-substring-search

https://github.com/tarruda/zsh-autosuggestions

https://github.com/zsh-users/zsh-syntax-highlighting

Tmux дефолтный, прикручен только powerline.

>>> Просмотр (1000x655, 146 Kb)

 ,

shamkir
()

Уволился. Начинаю изучать математику

Форум — Talks

Если вкратце: у меня есть 3-4 месяца и не менее 16,5 ч. в день, которые я готов разборчиво и ропотно уделять этой проблематике. Для надёжности и качества процесса — изрезал свой относительно небольшой гардероб и оставил только то из него, в чём не стыдно принимать доставку пиццы. Покидать дом на это время, естественно, не намереваюсь.

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

Итак, прежде всего интересует теория вероятностей, мат. статистика, линейная алгебра и, пожалуй, теория игр, для начала это. Дальше — разберёмся.

petushok
()

Требуется помощь в завершении работы над двумя книгами по ядрам Linux 0.01 и 1.0.

Форум — Development

Несколько лет работал над двумя книгами.

Первая похожа на «A Heavily Commented Linux kernel Source Code», но переписана с нуля и рассчитана на школьников или людей с нулевым знанием программирования. Комментарии даны практически к каждой строке.

Вторая содержит инструкцию по сборке ядра 1.0 с нуля, т.е. в первой главе ядро состоит всего из одного файла и далее к нему поочередно присоединяются различные подсистемы (ввода вывода, планировщик, сетевой стек и т.д.).

Все это реализовано процентов на 80-85 (хотя может и меньше).

Думаю разместить книгу в виде открытого wiki. Если кто-то предоставит бесплатный хостинг и поднимет wiki-движок - буду очень благодарен (есть небольшой опыт, но помощь профессионалов не помешает).

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

Здесь я хотел бы узнать ваше мнение о том, найду ли я энтузиастов, и вообще, о том нужны ли такие книги. Заявки на участие в проекте пишите на rtlx73{ Soббakа }gmail.com. Я не хочу зарабатывать на этом, но хотелось бы чтобы материалы как-то были защищены авторским правом.

tlx
()

Учебник по английскому языку

Форум — General

Доброго времени суток. Посоветуйте годных учебников по англ. языку. Желательно с упражнениями. Сейчас играюсь в приложения duolingo, весело, мне нравится. Знания ниже Beginner, имеется некий словарный запас

PS. Собственно зачем мне это надо: Много полезной литературы, уроков и прочих ништяков все на англ.

 

ChuCha
()

Неоконченная серия статей по LaTeX на IBM developerWorks

Новости — Документация
Группа Документация

К сожалению проект «не взлетел», но возможно кому-то вводные статьи окажутся полезными:

Каталог пакетов LaTeX, о котором ранее уже сообщалось, был частью проекта.

>>> Подробности

 

Evgueni
()

Засыпать мгновенно

Форум — Talks

ЖЖ: в след за павлином изучаю возможность полифазного сна. Короче, смысл в том, чтобы спать по 20 минут 6 раз в день. Ну ладно, вначале пусть будет 30.

Возникает проблема, что несчастные 30 минут нужно использовать как можно эффективнее, плотнее. Т.е. засыпать и просыпаться мгновенно.

Вместо этого засыпаю по 10 минут, иногда больше, несмотря на то что спать хочется как будто бы очень сильно, ходячий зомби.

Как это сделать? Засыпать мгновенно.

stevejobs
()

конкурс по си

Форум — Development

На опеннете есть новость про то как сотрудник redhat шлёт левые патчи в ядро чтобы обойти проблемы systemd (http://www.opennet.ru/opennews/art.shtml?num=39476). Собстно, вот патчик:

http://lkml.iu.edu//hypermail/linux/kernel/1404.0/01327.html

Имхо, это ужас. Вот уж действительно товарищ принял упорин. Во-первых, он так и не понял почему редактирование /proc/cmdline это зло. Во-вторых, код ужасен, не? Неужели в сях нет способа проще вырезать подстроку? Ну и само по себе использование «магических» цифр 4 и 5 позорит код.

Так вот, конкурс по вырезанию произвольного слова из строки объявляю открытым! Учтите что слово может встречаться несколько раз.

 ,

true_admin
()

Посоветуйте книгу по си

Форум — Development

В которой будут описаны интересные приемы типа эмуляции интерфейсов ООП через union + struct как в обработчике событий Xlib, например.

 ,

sambist
()

Как вывести содержимое C-структуры?

Форум — Development

После нескольких лет джаваскрипта осваиваю сишечку. Не хватает аналога console.dir(object), который выводит на экран содержимое объекта в виде:

поле: значение
... 

Возможно ли такое в си для структур?

makoven
()

Вопрос безопасности памяти

Форум — Talks

Всё время возвращаюсь мыслями к этому вопросу, но как-то не складывается целостного понимания. На ruBSD13 был доклад на эту тему: там речь шла об ASLR, random ordering, PIE, mmap ASLR. Использовании .rodata и malloc randomisations. Есть еще stack execute invalidation (NX bit), Stack Smashing Protector - ProPolice, stackghost итд.

Пишу всё по-английскии, т.к. об этих понятиях знаю почти только из англоязычных источников: различных статей, вот этого доклада, книги Absolute OpenBSD (но там совсем немного).

Ссылка trl.ibm.com/trl/projects/security/ssp из презентации уже не работает.

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

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

Мой вопрос в том, что:
1.) Проблема безопасности памяти недооценена? Стара? Или актуальна? Как вообще в реальной жизни к этому относятся? Что сейчас происходит в мире интересного на эту тему?
2.) Посоветуйте серьезную литературу (можно англоязычную) почитать об этом.

 , ,

Deleted
()

Матан

Форум — Talks

Замечаю все чаще, что при разборе той или иной около-алгоритмической проблемы - не хватает матана. В универе на каком-то уровне учил, но этого явно недостаточно. Начал читать учебники Зорича и Фихтенгольца и вот какое дело: читаю до какого-то момента - все понятно, потом раз и застрял и дальше никак, смотрю в википедиях и прочих интернетах - там везде либо «отсюда очевидно следует» (а с моим математических критинизмом - это совсем не очевидно), либо же очень много подробностей, в которые закапываюсь и через 4 - 5 часов я уже не помню какой был начальный вопрос, а в голове каша.

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

 

Goganchic
()

Кодинг в зашумлённом пространстве.

Форум — Development

Никак не могу понять как можно кодить в наушниках с музыкой. Код который не нужно рефакторить завтра утром, у меня рождается только в полнейшей тишине. Под музыку я могу только жать клавиши в такт, и после каждой песни видеть на экране какой-то «абырвалг».

Сейчас в соседнем офисе очень шумный ремонт. Никак не могу сконцентрироваться. А коллеги говорят что всё-равно почти ничего не слышат потому-что сидят в наушниках.

В понедельник планирую купить беруши (никогда не пользовался и не видел их, поэтому даже не знаю, поможет ли).

Как они умудряются и музычку слушать и кодить?

Или так: а у вас получается кодить в зашумлённом пространстве?

 

a84
()

Что еще можно применить вместо fork()?

Форум — Development

Работаю в сфере встраиваемых решений. Есть ситуация, ошибочная, когда с помощью fork() невозможно запустить другую программу из приложения. Ситуация ошибочна потому, что приложение «съело» столько озу, что на fork() места не остается.

Что еще можно применить вместо fork()? Есть ли еще какие-нибудь идеи, мысли, методы запуска программ из программ?

 , , memfree,

Vic
()

Подскажите музыку для программирования

Форум — Development

Хочу что-то меланхоличное, спокойное, какой-то рок, например - RHCP , Pete and The Pirate , Billy Milligan

abs
()

MyPaint: есть ли жизнь на master?

Галерея — Скриншоты

Пока Krita собирает деньги на разработку, MyPaint неспешно идет к светлому будущему, радуя разнообразными нововведениями: в master-ветке уже есть начальная поддержка векторных слоев, групп слоев и целая куча режимов наложений.

С запуском, правда, пришлось повозиться, за что можно поблагодарить мэйнтейнеров пакета python-gobject в Сусе 13.1: они выпилили из него файл pygtkcompat.py и соответствующий каталог, из-за чего сборка проходила нормально, но при запуске python ругался на отсутствующий модуль. Проблема решилась выдергиванием нужных файлов из тарболла.

  • Дистрибутив: openSUSE 13.1
  • WM: Enlightenment

>>> Просмотр (1366x768, 210 Kb)

 

ishido
()