Как стать автором
Обновить
70.52

C *

Типизированный язык программирования

Сначала показывать
Порог рейтинга
Уровень сложности

Выявление ошибок в работе с памятью в C и C++: Сравниваем Sanitizers и Valgrind

Время на прочтение 24 мин
Количество просмотров 1.3K

В этой статье вашему вниманию представлено сравнение двух инструментов для поиска ошибок в работе с памятью в программах, написанных на memory-unsafe (небезопасных при работе с памятью) языках — Sanitizers и Valgrind. Эти два инструмента работают совершенно по-разному. Поэтому, хоть Sanitizers (разработанный инженерами Google) имеет ряд преимуществ перед Valgrind, у каждого из них есть свои сильные и слабые стороны. Следует сразу отметить, что проект Sanitizers имеет название во множественном числе, потому что он состоит из нескольких инструментов, которые мы рассмотрим в этой статье в совокупности.

Читать далее
Всего голосов 3: ↑3 и ↓0 +3
Комментарии 0

Новости

Основы управления ресурсами в C

Уровень сложности Простой
Время на прочтение 6 мин
Количество просмотров 5.9K

Привет, Хабр!

Управлении ресурсами включает в себя распределение, использование и освобождение различных типов ресурсов. В языке программирования C автоматическое управление памятью отсутствует, эта задача ложится на плечи разработчиков.

В этой статьи рассмотрим основные возможности для работы с ресурсами в C.

Читать далее
Всего голосов 21: ↑13 и ↓8 +5
Комментарии 11

Укрощение примитивов синхронизации: сравниваем решения задачи с построением пула потоков на С и Go

Время на прочтение 21 мин
Количество просмотров 2.6K

Эта статья основана на истории об одном личном челлендже. Задача звучала так: помочь с реализацией взаимодействия компонентов в программном комплексе заказчика. Иными словами, понадобилось IPC для дальнейшего развития продукта. Вызов заключался в том, что в обязательных требованиях стояло использование чистого С. Другие языки, включая С++ и Go, не рассматривались. 

В итоге я получил интересный опыт в рамках системного и параллельного программирования. Меня зовут Алексей Буреев, я работаю старшим инженером по разработке ПО в YADRO, сейчас мой основной рабочий язык программирования — Golang. В этой статье я проведу небольшой эксперимент: покажу, как можно решить одну задачу с помощью разных языков программирования. Языку С я противопоставлю Go, в основе которого есть исторические наработки проектирования языка С. Для этого немного заглянем «под капот» стандартных типов данных, которые уже были заботливо созданы для нас разработчиками языка.

Всех заинтересованных прошу под кат.

Читать далее
Всего голосов 19: ↑18 и ↓1 +17
Комментарии 16

Новичковые скитания по поиску идеального языка программирования

Уровень сложности Простой
Время на прочтение 5 мин
Количество просмотров 9K

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

Вкусить тексту!
Всего голосов 37: ↑31 и ↓6 +25
Комментарии 36

Истории

Создание своего UEFI приложения

Уровень сложности Средний
Время на прочтение 5 мин
Количество просмотров 37K

Привет, Хабр! Мне 16 лет, я студент, учусь на первом курсе колледжа на программиста. Начал увлекаться низкоуровневым программированием на Ассемблере и C/C++

Я заметил что на Хабре есть множество статей о написании своих простых "загрузчиков" для BIOS-MBR, которые выводят на экран "Hello World!". И при этом практически нет ни одной статьи о создании того же самого, но только для UEFI, хотя будущее именно за ним, ведь BIOS уже давно устарел! Это я и хочу исправить в этой статье.

Читать далее
Всего голосов 84: ↑83 и ↓1 +82
Комментарии 80

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

Уровень сложности Простой
Время на прочтение 2 мин
Количество просмотров 9K

Я согласен, что ошибка выделения памяти с помощью malloc редкая ситуация, и после такой ошибки, скорее всего, невозможно полноценное функционирование программы. Но меня удивляет, с каким упорством программисты, приводя эти аргументы, предлагают вообще ничего не делать в такой ситуации. Я не призываю всех делать сложные механизмы восстановления работы после нехватки памяти или использовать заранее выделенные резервные буферы. Многим программам не нужны такие сложные механизмы. Тем не менее я не понимаю, почему хотя бы минимально не обработать такие ситуации корректно. Раз других объяснений пока не хватило, попробую в этот раз рассказать короткую притчу.


Притча о нулевом указателе

Читать дальше →
Всего голосов 34: ↑32 и ↓2 +30
Комментарии 26

Фаззинг библиотек

Уровень сложности Средний
Время на прочтение 5 мин
Количество просмотров 2.6K

Ещё недавно, как я начал изучать веб хакинг, я счёл интересным занятие исследовать Linux и Windows на предмет бинарных уязвимостей. Хотя легально заработать в одиночку хакером у нас в России я думаю можно только веб хакингом, я всё равно хочу изучать все интересующие аспекты атакующей и защищающей стороны. Кто знает, вдруг я когда-нибудь буду в red team. Ну а пока я просто грызу гранит науки.

Слегка поразмыслив над решением задачи, я определил что нужно для осуществления моей проблемы. Я не знаю как другие проводят фаззинг библиотек, у которых нет исходных текстов, но додумался до одного варианта. Далее будут два примера для Linux и Windows.

Читать далее
Всего голосов 6: ↑5 и ↓1 +4
Комментарии 31

Проверяем Blender

Уровень сложности Средний
Время на прочтение 16 мин
Количество просмотров 8.2K

Командный центр PVS-Studio: "Как быстро летит время... А ведь в этом году, второго января, Blender исполнилось 30 лет! Как будто ещё вчера мы публиковали статью с разбором ошибок... Как 8 лет назад? Надо срочно исправлять ситуацию!".

Читать далее
Всего голосов 27: ↑26 и ↓1 +25
Комментарии 9

Xv6: учебная Unix-подобная ОС. Глава 6. Блокировки

Уровень сложности Средний
Время на прочтение 12 мин
Количество просмотров 1.6K

Ядро ОС выполняет программы параллельно и переключает потоки по таймеру. Каждый процессор выполняет поток независимо от других. Процессоры используют оперативную память совместно, поэтому важно защитить структуры данных от одновременного доступа. Потоки испортят данные, если процессор переключится на другой поток, когда первый поток еще не завершил запись.

Потоки конкурируют за доступ к структуре данных. Ядро кишит структурами, которые потоки используют совместно. Блокировки защищают данные при конкурентном доступе.

Глава расскажет, зачем нужны блокировки, как xv6 реализует и использует блокировки.

Читать далее
Всего голосов 6: ↑6 и ↓0 +6
Комментарии 3

Можно ли запустить ембедед С-проект на базе РТОС в режиме симуляции под Windows?

Уровень сложности Средний
Время на прочтение 8 мин
Количество просмотров 1.5K

Если у вас есть эмбедед(embedded) проект и он написан на С или на С++ вы можете попробовать запустить этот проект в режиме симуляции на десктопном ПК и даже под Windows, по крайней мере у нас это получилось.

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

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

Читать далее
Всего голосов 2: ↑2 и ↓0 +2
Комментарии 49

Xv6: учебная Unix-подобная ОС. Глава 5. Прерывания и драйверы устройств

Уровень сложности Средний
Время на прочтение 6 мин
Количество просмотров 2.7K

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

Устройство прерывает процессор, когда требует внимания. Обработчик прерывания опознает устройство и вызовет процедуру драйвера. В xv6 это делает процедура devintr.

Файл kernel/console.c содержит код драйвера терминала. Драйвер обрабатывает символы из последовательного порта UART на RISC-V, которые человек вводит на клавиатуре.

QEMU эмулирует микросхему 16550 UART и подключает клавиатуру и экран к UART. На реальном компьютере 16550 управляет портом RS232, который работает с терминалом или другим компьютером.

Драйвер накапливает символы в кольцевом буфере cons.buf. Индекс cons.r указывает на первый символ, который прочтет функция consoleread. Буфер хранит строки символов, а индекс cons.w указывает на начало последней строки, которую еще вводит человек. Индекс cons.e указывает позицию курсора в последней строке для ввода следующего символа.

Читать далее
Всего голосов 9: ↑9 и ↓0 +9
Комментарии 0

Почему проверять результат вызова malloc c помощью assert плохая идея

Уровень сложности Средний
Время на прочтение 3 мин
Количество просмотров 7.9K

malloc и assert


Указатель, который вернула функция malloc, необходимо проверить перед использованием. Неправильным решением будет использовать для этого макрос assert. В этой статье мы разберём, почему это является антипаттерном.

Читать дальше →
Всего голосов 29: ↑25 и ↓4 +21
Комментарии 117

Установка GCC в сборке MinGW

Уровень сложности Простой
Время на прочтение 4 мин
Количество просмотров 3.3K

Установка коллекции компиляторов GCC (GNU Compilers Collection) в Windows и первичная настройка для дальнейшей работы.

Читать далее
Всего голосов 13: ↑10 и ↓3 +7
Комментарии 11

Ближайшие события

Московский туристический хакатон
Дата 23 марта – 7 апреля
Место
Москва Онлайн

Xv6: учебная Unix-подобная ОС. Глава 4. Прерывания и системные вызовы

Уровень сложности Средний
Время на прочтение 10 мин
Количество просмотров 3.5K

Глава расскажет, как xv6 обрабатывает прерывания на RISC-V и о хитростях виртуальной памяти: как использовать ошибки доступа к страницам, чтобы оптимизировать работу ОС.

Глава расскажет о копировании страниц при записи, ленивой выдаче страниц, выдаче страниц по необходимости и сбросе страниц на диск.

Читать далее
Всего голосов 8: ↑8 и ↓0 +8
Комментарии 0

ToolChain: Настройка сборки прошивок для микроконтроллеров Artery из Makefile

Уровень сложности Простой
Время на прочтение 21 мин
Количество просмотров 2.6K

Настало время освоить очередное семейство микроконтроллеров: от компании Artery Technology.

Компания Artery Technology уже возвела полноценную экосистему для своих процессоров. Есть фирменные отладочные платы, программаторы, документация, исходные коды MCAL и даже кодо генераторы.

В этом тексте я представил пошаговую инструкцию того как запрограммировать микроконтроллер Artery.

Читать далее
Всего голосов 13: ↑10 и ↓3 +7
Комментарии 11

Собираем удобный CAN bus сниффер с интерактивной консолью за $3

Уровень сложности Средний
Время на прочтение 13 мин
Количество просмотров 14K

Привет, Хабр!

Протокол CAN сейчас широко распространён не только в автомобильной сфере, но и на предприятиях, в различных самоделках, и даже в Средствах Индивидуальной Мобильности (контроллеры VESC, например). В ноябре прошлого года я сделал для себя удобный инструмент для анализа CAN и отправки фреймов, сейчас же хочется сделать код опенсорсным и рассказать о самом проекте.

Читать далее
Всего голосов 34: ↑34 и ↓0 +34
Комментарии 18

Окно индикации какого-то процесса на Qt

Уровень сложности Средний
Время на прочтение 3 мин
Количество просмотров 3.4K

Итак хочу поделится большой радостью ибо наконец-то сделал универсальное всплывающее окно (на Qt) для индикации (логгирования) хода выполнения каких-то долгих команд.

Основная идея универсальности в вызове у об'екта слота по наименованию , передача параметров через QVariant (до 10шт.), возврат результата тоже через QVariant.

Все это реализуется без проблем через вызов метода invokeMethod.

Через параметры QVariant мы можем передавать и возвращать все , что угодно - какие-то свои классы, главное не забыть в конце определения таких классов добавлять макрос Q_DECLARE_METATYPE(имя вашего класса)

Читать далее
Всего голосов 8: ↑4 и ↓4 0
Комментарии 43

Xv6: учебная Unix-подобная ОС. Глава 3. Таблицы страниц

Уровень сложности Средний
Время на прочтение 13 мин
Количество просмотров 3K

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

Глава рассказывает, как xv6 работает с виртуальной памятью и об устройстве виртуальной памяти RISC-V.

Читать далее
Всего голосов 15: ↑15 и ↓0 +15
Комментарии 0

Заметка про сохранение структур во flash памяти на STM32

Уровень сложности Простой
Время на прочтение 5 мин
Количество просмотров 5.6K

При разработке проекта для микроконтроллера часто возникает необходимость сохранения данных во Flash-память перед выключением устройства. Глобальные структуры содержат информацию о настройках различной периферии, данные с внешних датчиков и прочее. В этом посте я хочу показать простенький механизм записи структуры во FLASH память микроконтроллера STM32, которым я сам часто пользуюсь в своих проектах.

Читать далее
Всего голосов 23: ↑21 и ↓2 +19
Комментарии 18

Что будет, если переименовать суперпользователя? Экспериментируем, удивляемся и расстраиваемся…

Время на прочтение 15 мин
Количество просмотров 21K

В интернете много желающих перебирать пароли к SSH, чтобы получить мощности вашего сервера безвозмездно. Как это можно предотвратить? Отключить вход по паролю? Лениво. Использовать нестандартный порт? Не поможет. Поставить fail2ban? Скучно. Переименовать root? Вот это хорошая идея!

На профильных площадках можно встретить вопрос о том, как переименовать суперпользователя, и теоретические ответы с предупреждением о потенциальной деструктивности этого действа. В этой статье я расскажу, что может сломаться в теории и на практике.
Читать дальше →
Всего голосов 86: ↑86 и ↓0 +86
Комментарии 42

Вклад авторов

Работа

Программист С
41 вакансия