В начале 2018 года в нашем блоге появился цикл статей, посвящённый шестой проверке исходного кода проекта Chromium. Цикл включает в себя 8 статей, посвященных ошибкам и рекомендациям по их предотвращению. Две статьи вызвали бурное обсуждение, и до сих пор на почту мне изредка приходят комментарии касательно тем, затронутых в них. Пожалуй, следует дать некоторые дополнительные пояснения и, как говорится, расставить точки над i.
Читать полностью »
Рубрика «C» - 37
Шестая проверка Chromium, послесловие
2019-02-04 в 8:08, admin, рубрики: C, c/c++, c++, chromium, code review, Google Chrome, malloc, memset, null, open source, pvs-studio, static code analysis, undefined behavior, Блог компании PVS-Studio, обработка ошибок, Си, статический анализ кода, статический анализатор кодаИнициализация в С++ действительно безумна. Лучше начинать с Си
2019-02-01 в 14:51, admin, рубрики: braced-init-list, C, c++, copy-list-initialization, агрегированный тип, инициализация, конструктор, обучение программированию, разрешение перегрузкиНедавно мне напомнили, почему я считаю плохой идеей давать новичкам C++. Это плохая идея, потому что в C++ реальный бардак — хотя и красивый, но извращённый, трагический и удивительный бардак. Несмотря на нынешнее состояние сообщества, эта статья не направлена против современного C++. Скорее она частично продолжает статью Саймона Брэнда «Инициализация в C++ безумна», а частично — это послание каждому студенту, который хочет начать своё образование, глядя в бездну.
Типичные возражения студентов, когда им говорят об изучении C:
- «Кто-то его ещё использует?»
- «Это глупо»
- «Почему мы изучаем C?»
- «Мы должны учить что-то лучшее, например, C++» (смех в зале)
Эволюция переключения контекста x86 в Linux
2019-01-29 в 19:52, admin, рубрики: C, CFS, Completely-Fair Scheduler, i386, x86, Алгоритмы, ассемблер, паника ядра, переключатель контекста, планировщик, системное программирование, шедулер, ядро LinuxВ прошлые выходные, изучая интересные факты об аппаратном переключателе контекста 80386, я вдруг вспомнил, что первые версии ядра Linux полагались именно на него. И я погрузился в код, который не видел уже много лет. Сейчас я решил описать это чудесное путешествие по истории Linux. Я покажу все самородки и забавные артефакты, которые нашёл по пути.
Задача: проследить, как изменялось переключение контекста в ядре Linux от первой (0.01) до последней версии LTS (4.14.67), с особым акцентом на первую и последнюю версии.
Читать полностью »
Форматирование исходного кода в Linux средствами ClangFormat: проблемы и решение
2019-01-28 в 11:27, admin, рубрики: C, c++, clang-format, Git, java, javascript, linux, objective-c, protobuf, Программирование, Производство и разработка электроники, Разработка под Linux, Совершенный код
Согласитесь, приятно и полезно, когда в проекте исходный код выглядит красиво и единообразно. Это облегчает его понимание и поддержку. Покажем и расскажем, как реализовать форматирование исходного кода при помощи clang-format, git и sh.
Читать полностью »
System call interception in Linux-kernel module
2019-01-23 в 5:23, admin, рубрики: C, hooking, kernel, linux, rootkit, x86-64, Настройка Linux, Разработка под LinuxThe module was created as a part of my master thesis in the 2010 year. The master thesis theme is Keylogging in Linux kernel. The main idea was to find out a way to intercept system calls for x64 arch Linux kernel, especially for kernel 2.6.34.7-61.fc13.x86_64.
Преодоление порога 32 КБ для данных в ПЗУ микроконтроллеров AVR
2019-01-21 в 9:21, admin, рубрики: arduino, atmel studio, avr, C, c++, gcc, архитектура компьютера, микроконтроллеры, программирование микроконтроллеровЧто может быть хуже костылей? Только неполно документированные костыли.
Перед вами скриншот из последней официальной интегрированной среды разработки для 8-битных микроконтроллеров AVR, Atmel Studio 7, язык программирования Си. Как видно из столбца Value, переменная my_array содержит число 0x8089. Другими словами, массив my_array располагается в памяти, начиная с адреса 0x8089.
В то же время столбец Type даёт нам несколько иную информацию: my_array является массивом из 4 элементов типа int16_t, расположенным в ПЗУ (это обозначается словом prog, в отличие от data для ОЗУ), начиная с адреса 0x18089. Стоп, но ведь 0x8089 != 0x18089. Какой же на самом деле адрес у массива?
Написание собственного неплохого менеджера памяти
2019-01-10 в 22:09, admin, рубрики: allocators, C, kernel, memory managment, Алгоритмы, Занимательные задачки, ПрограммированиеДоброе время суток, читатель. Возможно, вы уже читали мои предыдущие статьи, и знаете, что я занимаюсь написанием собственной ОС. Сегодня мы поговорим, и рассмотрим несложный и достаточно быстрый алгоритм для управления памятью — менеджер памяти — критически важная часть ОС, ведь быстрая, надежная и нерастратная работа с памятью залог хорошей ОС.
Искал я несложные и адекватные идеи для менеджера и в рунете, и на англоязычных сайтах — всё никак не мог найти никаких хороших статей про адекватный, работающий не за O(N) аллокатор. Что же, сегодня мы рассмотрим более хорошую идею для менеджера памяти, продолжение помещаю под кат.
Читать полностью »
Использование GtkApplication. Особенности отрисовки librsvg
2019-01-09 в 16:24, admin, рубрики: C, GTK+, GtkDrawingArea, GtkImage, librsvg, makefile, отрисовка ui компонентов, Программирование, Разработка под LinuxАннотация статьи.
- Использование GtkApplication. Каркас приложения. Makefile.
- Отрисовка библиотекой librsvg.
- Экспорт изображения в GtkImage и его масшабирование.
- Масштабирование SVG самописными функциями.
- Получение полного пути в приложениях.
- Тесты быстродействия GtkDrawingArea vs GtkImage.
Фаззинг в стиле 1989 года
2019-01-09 в 8:20, admin, рубрики: C, linux, open source, информационная безопасность, Тестирование IT-систем, фаззингС наступлением 2019 года хорошо вспомнить прошлое и подумать о будущем. Оглянемся на 30 лет назад и поразмышляем над первыми научными статьями по фаззингу: «Эмпирическое исследование надёжности утилит UNIX» и последующей работой 1995 года «Пересмотр фаззинга» того же автора Бартона Миллера.
В этой статье попытаемся найти баги в современных версиях Ubuntu Linux, используя те же самые инструменты, что и в оригинальных работах по фаззингу. Вы должны прочитать оригинальные документы не только для контекста, но и для понимания. Они оказались весьма пророческими в отношении уязвимостей и эксплоитов на десятилетия вперёд. Внимательные читатели могут заметить дату публикации оригинальной статьи: 1990 год. Ещё более внимательные заметят копирайт в комментариях исходников: 1989.
Читать полностью »