Flipper Zero — швейцарский нож для гиков и пентестеров с открытым исходным кодом. Так получилось, что пути этого проекта и анализатора PVS-Studio пересеклись. Философский вопрос: начинать ли проверять проект, зная, что авторы проекта уже исправляют ошибки? Попробуем.
Рубрика «Си» - 4
Си должен умереть
2021-11-29 в 11:17, admin, рубрики: C, информационная безопасность, Компиляторы, неопределённое поведение, Программирование, Си, системное программированиеЯзык Си - один из наиболее влиятельных языков программирования за всю историю. Он стал незаменимым инструментом разработки операционных систем, сместив с этого пьедестала языки ассемблера. Изучение Си обязательно для любого уважающего себя программиста. Этот язык любим за свою внешнюю простоту и ненавидим за беспощадность к ошибкам. Благодаря нему у нас есть ядро Linux и тысячи уязвимостей в нём же в придачу. Попробуем понять, что же такое этот противоречивый язык Си - благословение или проклятие?
FizzBuzz по-сениорски
2021-01-31 в 11:26, admin, рубрики: C, fizzbuzz, высокая производительность, интервью, ненормальное программирование, оптимизация, Си, собеседование- Добрый день, я на интервью на позицию старшего разработчика.
- Здравствуйте, давайте начнем с небольшого теста, пока я ваше CV смотрю. Напишите программу, которая выводила бы числа от 1 до, скажем, миллиарда, притом если число кратно трем, то вместо числа выводится Fizz, если кратно пяти, то Buzz, а если и трем, и пяти, то FizzBuzz.
Серьезно, FizzBuzz? Задачка для начальной школы, на сениорскую позицию? Ну ладно.
Я достаю свой верный лаптоп, и пишу такой Читать полностью »
Продолжение: обидно за мнения про статические анализаторы кода
2020-10-16 в 7:36, admin, рубрики: C, c++, pvs-studio, volatile, Блог компании PVS-Studio, опечатки, ошибки в коде, С++, Си, Совершенный код, статический анализ кода, статический анализатор кода
Планировалось, что, написав статью "Обидно за мнения про статические анализаторы кода", мы выговоримся и спокойно отпустим тему. Но неожиданно эта статья вызвала бурный отклик. К сожалению, обсуждение пошло не туда, и сейчас мы сделаем вторую попытку объяснить своё видение ситуации.
Читать полностью »
Обидно за мнения про статические анализаторы кода
2020-10-12 в 13:30, admin, рубрики: C, c++, pvs-studio, Блог компании PVS-Studio, Программирование, Си, статический анализ кода, статический анализатор кодаИнструменты статического анализа кода ушли далеко вперёд. Это вовсе не те "линтеры", которые активно применялись 20 лет тому назад. Однако многие по-прежнему относятся к ним как к очень простым инструментам. Обидно. Обидно как за методологию анализа кода в целом, так и за инструмент PVS-Studio.
История двух стандартных библиотек Си
2020-09-28 в 7:50, admin, рубрики: glibc, musl, musl-vs-glibc, Анализ и проектирование систем, безумие отладки, ненормальное программирование, Программирование, Си, системное программирование, стандартная библиотекаСегодня мне пришел баг-репорт от пользователя Debian, который скормил какую-то ерунду в утилиту scdoc и получил SIGSEGV
. Исследование проблемы позволило мне провести отличное сравнение между musl libc
и glibc
. Для начала посмотрим на стектрейс:
==26267==ERROR: AddressSanitizer: SEGV on unknown address 0x7f9925764184
(pc 0x0000004c5d4d bp 0x000000000002 sp 0x7ffe7f8574d0 T0)
==26267==The signal is caused by a READ memory access.
0 0x4c5d4d in parse_text /scdoc/src/main.c:223:61
1 0x4c476c in parse_document /scdoc/src/main.c
2 0x4c3544 in main /scdoc/src/main.c:763:2
3 0x7f99252ab0b2 in __libc_start_main
/build/glibc-YYA7BZ/glibc-2.31/csu/../csu/libc-start.c:308:16
4 0x41b3fd in _start (/scdoc/scdoc+0x41b3fd)
В исходниках на данной строчке написано вот что:
if (!isalnum(last) || ((p->flags & FORMAT_UNDERLINE) && !isalnum(next))) {
Подсказка: p
— это корректный, ненулевой указатель. Переменные last
и next
имеют тип uint32_t
. Сегфолт случается на втором вызове функции isalnum
. И, самое важное: воспроизводится только при использовании glibc, но не musl libc. Если вам пришлось перечитать код несколько раз, вы не одиноки: тут попросту нечему вызывать сегфолт.Читать полностью »
ИК датчик движения на STM32
2020-09-18 в 18:24, admin, рубрики: ir, stm32, Беспроводные технологии, датчик, движения, диод, ИК, Интернет вещей, инфракрасный, Программирование, программирование микроконтроллеров, Производство и разработка электроники, Разработка для интернета вещей, Си, таймерПриветствую, в этой статье вы узнаете: как сделать датчик движения с использованием ИК диода и ИК приемника на STM32 с минимальным использованием ядра (т.е. с максимальной загрузкой периферии) на регистрах, используя таймеры.
В статье максимально подробно рассмотрены вопросы программирования. Материал рассчитан на начальный уровень подготовки, но также и подойдет для более опытных. Часть подробностей скрыта под спойлерами для снижения загруженности статьи.
Оглавление:
История IT. Когда компьютеры были большими…
2020-07-21 в 8:00, admin, рубрики: Блог компании Конференции Олега Бунина (Онтико), Кобол, Программирование, Си, языки программированияНекоторое время назад меня попросили рассказать или дать ссылки на историю развития IT-разработки, в которой была бы видна внутренняя логика развития, а не просто факты и события. Казалось бы, об этом должны быть книги или обзорные курсы, ведь логика развития IT-разработки в значительной мере овеществлена в логике развития языков программирования, и только в последние лет двадцать к этому добавилась логика развития фреймворков, платформ и концептуальных подходов к проектированию. Но я не нашел хороших источников.
Поэтому появился авторский текст, написанный, преимущественно, на основе моих собственных представлений. Он проверен по материалам википедии – там есть общий таймлайн в серии статей (этот откроется на 1957, наверху можно выбрать конкретный год), есть обзорная английская статья, которая, на мой взгляд, не раскрывает логику развития, а говорит о фактах, и есть статьи, посвященные отдельным языкам. Статьи по отдельным языкам как раз включают не только его описание, но и логику создания и развития языка. Но – изолированно от других, и простая сборка не даст целостной картины, а наоборот, будет содержать противоречивые фрагменты. Зато эти статьи позволяют проверить, насколько твои представления соответствуют реальной истории, и поправить их – что я и проделал.
История оказалась интереснее, чем я ее себе представлял. Мне было интересно ее писать и, надеюсь, вам будет интересно ее читать. При этом в статье наверняка осталось много моих собственных интерпретаций, которые не будут совпадать с вашими представлениями, и я буду рад обсудить различия.
Начало коллекционирования ошибок в функциях копирования
2020-04-04 в 8:37, admin, рубрики: bugs, C, c++, memcpy, static code analysis, баги, Блог компании PVS-Studio, ошибки в коде, Си, статический анализ кода
Уже несколько раз замечал, что программисты допускают ошибки в простых функциях копирования данных. Эта тема потребует в будущем ещё много времени для изучения и подбора материала, чтобы написать основательную статью. Но захотелось поделиться парой примеров, недавно замеченных мною.
Читать полностью »