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

C *

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

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

Исследуем саундбар Yamaha YAS-109, часть 2

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

Приветствую!

В конце первой части статьи по исследованию саундбара Yamaha я упомянул о плачевном состоянии его безопасности. Но вот то, насколько оно плачевное, я тогда представлял не до конца.

И что, сифонит таки?
Всего голосов 27: ↑27 и ↓0 +27
Комментарии 8

Новости

Безопасное программирование на Си. Часть 1

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

Статья для первокурсников технических ВУЗов, которым повезло изучать Си в качестве первого языка программирования. В рамках данной работы расскажу и покажу, как избегать типовых ошибок при разработке, а если уж вы эту ошибку допустили - как быстро и безболезненно её найти.

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

Делаем crackme. Часть вторая: шифруем функции

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

Эта статья вторая в цикле по созданию crackme под linux amd64. В этой части мы создадим исполняемый файл, в котором каждая функция будет зашифрована собственным ключом, и будет расшифровываться только на время исполнения. Процесс создания будет полностью автоматизирован, то есть при добавлении нового кода или изменении старого никаких дополнительных действий делать будет не нужно. Код всего проекта находится в репозитории на github.

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

Генерация зависимостей внутри программы

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

В программировании программы часто строятся иерархично. Один программный компонент вызывает функции из другого программного компонента. Как бы представить эту взаимосвязь в законченной программе?

Эту задачу можно решить прибегнув к языку Graphviz и утилитам cpp, dot, make, chrome.

Читать далее
Всего голосов 18: ↑14 и ↓4 +10
Комментарии 43

Истории

Делаем crackme. Часть первая: whitebox AES

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

Эта статья первая из цикла, в котором мы будем создавать crackme для linux amd64. В crackme будут реализованы шифрование каждой функции отдельным ключём и наномиты для противодействия отладке. В данной статье мы рассмотрим алгоритм встраивания ключа шифрования в код для усложнения расшифровки функций пользователем. Если стало интересно, прошу под кат.

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

Как я писал свою первую игру для Dendy

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

Что такое Dendy? Что так любит детвора? Это электронная игра! Ооо, дендиии...

В этой статье я вам расскажу о своем первом опыте разработки игры для NES/Famicom консоли. Постараюсь рассказать о инструментах, которые использовал и о интересных особенностях разработки игр для Dendy с которыми столкнулся во время создания игры.

Погрузиться в мир Dendy
Всего голосов 67: ↑67 и ↓0 +67
Комментарии 20

Замешиваем файлы в тэги. Часть 3

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

Продолжаем создавать модуль ядра в Линукс на примере виртуальной файловой системы.

Часть 1: Описание задачи, Модуль ядра

Часть 2: Модуль ядра, Регистрация файловой системы

Часть 3: Inode, Lookup

Что в результате получилось можно увидеть по ссылкам: демо-видео, код.

Продолжаем разбираться
Всего голосов 7: ↑6 и ↓1 +5
Комментарии 2

Как я сделал переполнение кучи в curl

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

В связи с выпуском curl 8.4.0 мы публикуем рекомендации по безопасности и все подробности о CVE-2023-38545. Эта проблема является самой серьезной проблемой безопасности, обнаруженной в curl за долгое время. Для неё установили ВЫСОКИЙ приоритет.

Хотя рекомендации содержат все необходимые подробности. Я всё же решил сказать пару дополнительных слов и более подробно объяснить для всех, кто хочет понять, как эта уязвимость работает, и как это произошло.

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

Оскар Толедо: потомственный волшебник

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

Семья Толедо (пригород Мехико) и разнообразная техника их кустарного производства, в том числе компьютер, 1980 год

Оскар Толедо — пятикратный победитель программистского конкурса IOCCC, (Международный конкурс обфусцированного кода на С). Он интересен не только сам по себе, но ещё в контексте своей семьи. Это уникальные люди, которые скромно живут в пригороде Мехико и вообще не стремятся к известности. 25 лет назад они написали свою ОС, браузер и кучу софта для него.

Оскар Толедо — просто продолжатель семейного дела, которое началось примерно в 70-е годы прошлого века.
Читать дальше →
Всего голосов 66: ↑64 и ↓2 +62
Комментарии 8

IMSProg — программатор для CH341a в Linux

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

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

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

Современное состояние инструментов поиска утечек памяти

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

Несмотря на большое количество доступных инструментов поиска утечек памяти, в том числе от таких гигантов ИТ как FaceBook, существуют ряд ограничений применимости этих инструментов. В данном статье приводится сравнение существующих инструментов и их границы применимости.

Читать далее
Всего голосов 7: ↑3 и ↓4 -1
Комментарии 13

Конкурс: можно ли написать быструю программу на C/C++?

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

По работе попалась несложная, но достаточно интересная задачка из области обработки данных. Так как она была связана с вычислениями над массивами, то я по-быстрому запрограммировал её на Фортране. Но мне стало интересно, насколько эффективным или неэффективным будет её решение на C или C++. Поэтому, если кто любит решать задачки среднего уровня сложности с литкода, тот может поучаствовать в предлагаемом конкурсе, где я упростил эту задачу, оставив только самое интересное.

Читать далее
Всего голосов 26: ↑6 и ↓20 -14
Комментарии 141

Компиляция моделей МО в С

Уровень сложности Сложный
Время на прочтение 28 мин
Количество просмотров 4.4K

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

Недавно у меня состоялся приятный разговор с моим другом Крисом. Он познакомил меня с основами машинного обучения, когда я разбирал написанный Андреем Карпаты micrograd.

Для тех, кто не знает, micrograd – это небольшая реализация нейронной сети, написанная на чистом Python без библиотек, в которой вычислительными единицами выступают не векторы и матрицы, а скалярные величины.
Читать дальше →
Всего голосов 54: ↑53 и ↓1 +52
Комментарии 0

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

Битва пет-проектов
Дата 25 сентября – 30 ноября
Место Онлайн
Вебинар «Разработка бэкенда на Clojure»
Дата 24 октября
Время 20:00 – 21:30
Место Онлайн
True Tech Champ
Дата 24 октября
Время 9:00 – 17:00
Место Москва Онлайн
Russia Risk Conference 2023 — 19-я конференция по риск-менеджменту
Дата 25 – 26 октября
Время 10:00 – 19:00
Место Москва Онлайн
VK Инклюзия’23
Дата 27 октября
Время 14:00 – 21:30
Место Москва Онлайн
HolyJS
Дата 2 – 12 ноября
Время 15:00 – 19:00
Место Санкт-Петербург Онлайн
IT Recruiting – HR Forum 2023
Дата 8 – 10 ноября
Время 9:00 – 18:00
Место Москва
Онлайн IT HR-конференция HR42
Дата 17 – 18 ноября
Время 10:00 – 14:00
Место Онлайн
HighLoad++ 2023
Дата 27 – 28 ноября
Время 9:00 – 20:00
Место Москва Онлайн

Cross-Detect для Проверки Качества Пайки в Электронных Цепях

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

Как известно электроника это наука о контактах. При этом в реальной разработке контакты часто отсутствуют или не там, где нужно.

Вот пришла электронная плата с производства. Как убедиться, что на этой конкретной плате всё корректно с контактами?

Для этого нужна какая-то технология. Назовем её Cross-Detect.

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

Библиотека libopencm3: Быстрый старт (Часть 2). Работа с GPIO, SPI, отладка проекта при помощи GDB

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

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

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

Пишем компилятор C в 500 строках Python

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

Несколько месяцев назад, закончив пост об SDF-пончике, я поставил перед собой задачу написать компилятор C в 500 строках Python1. Насколько сложна эта задача? Оказалось, что довольно сложна, даже после отказа от достаточно большого количества возможностей. Но в то же время она была довольно интересной, а результат оказался на удивление функциональным и вполне простым для понимания!

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

Создаем проект STM32 C++ FreeRTOS в vscode для очень маленьких

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

Жил себе спокойно, писал кодик в Keil и не парился. Писал изначально на СИ, но кода становилось все больше, а я все ленивее, перешел на С++ и ARM Compiler V6,19. Но пришел к тому что простых прерываний в таймере стало не достаточно, даже можно сказать не правильный подход. Задался желанием подключить какую-нибудь ОС. Выбор пал на FreeRTOS. Довольный, скачиваю операционку, подтягиваю файлы к проекту на плюсах, и получаю кучу ошибок. Попытка их устранить не увенчалась успехом. Вспомнил что есть CubeMX и там можно сгенерировать проект с уже подключенным freertoos. Проверил, 5-ым компилятором и языком СИ, проект отлично собирается, но как только переименовываем main.c в .cpp и выбираем компилятор 6,19, получаем кучу ошибок на ядро ОС, на определение inline и т.п. Так я и не смог подружить подружить ОС и C++ в Keil. Пришлось заменить среду разработки, изначально выбор пал на CubeIDE, все отлично дружится и собирается, но в душе оставались сомнения. В итоге финальным выбором стал vscode, далее опишу как создать проект именно в нем.

Здесь на сайте уже есть статьи по сборке проекта, ими и руководствовался, но пошел немного другим путем.

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

Взлом предка Sims для Amiga

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

В этом посте я расскажу о том, как выполнил частичный реверс-инжиниринг файлов данных Little Computer People, чтобы включить опции конфигурации, недоступные в оригинальной игре. Я написал и выпустил инструмент, работающий с LCP для Amiga, который можно скачать в конце поста.

Little Computer что?

В 1985 году на самых популярных 8-битных домашних компьютерных системах (и Atari ST) была выпущена «игра» под названием «Little Computer People», а через два года появилась версия и для Amiga. Сюжет игры заключается в том, что внутри вашего компьютера живёт маленький человечек, и это ПО позволяет вам следить за его действиями и взаимодействовать с ним. Если вы незнакомы с LCP, в Википедии есть хорошая статья о ней, которую стоит прочитать.

Уилл Райт (дизайнер The Sims) сказал, что игра в LCP и общение с одним из создателей LCP (Ричем Голдом) помогли ему в разработке концепций The Sims, и одно это делает LCP важной вехой в истории ПО.

Для многих людей LCP была скучной игрой. Считалось, что никто не захочет следить за жизнями персонажей на экране. Думаю, наблюдая за успехом франшизы The Sims и бесконечных реалити-шоу, можно с полным правом сказать, что это мнение было совершенно ошибочным. Возможно, LCP просто опередила своё время?

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

Техникум: Конечный Aвтомат Обработки Сигнала с Кнопки

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

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

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

Очевидно, что firmware должно как‑то однозначно распознавать тип нажатия на кнопку; короткое долгое.

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

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

Написание компилятора C в 500 строк Python

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

Компилятор C на 500 строк Python? Почему бы и нет? Это сложно, даже если отказаться от многих функций. Но, в то же время, это ужасно интересно, а результат оказался на удивление функциональным и несложным для понимания!

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

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

Работа

Программист С
59 вакансий