Как стать автором
Поиск
Написать публикацию
Обновить
134.34

C *

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

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

Компиляция C/C++ на Apple M1

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


Заинтригованный впечатляющими бенчмарками M1, я достал последний Mac Mini, чтобы замерить скорость компиляции на C/C++.

Измеряем локальный build2 (без репозитория пакетов), который включает преимущественно код на C++ (611 единиц трансляции) с некоторыми блоками на C (29) и связками между ними (19). Такой бенчмарк требует только компилятора C++ и входит в тестовый набор Phoronix, поэтому можно сравниться с большим количеством процессоров.

Бенчмарк Phoronix в настоящее время использует build2 0.12.0, у нас 0.13.0 (текущий релиз), здесь сборка выполняется примерно на 10% медленнее.
Читать дальше →

А вы умеете готовить nested_flatbuffers?

Время на прочтение15 мин
Количество просмотров5.2K
У протокола FlatBuffers имеется интересная возможность — использовать вложенную структуру внутри другой структуры, но хранить ее, как массив сырых данных. Такая оптимизация позволяет уменьшить затраты на память и производительность при чтении/записи данных. Для этого необходимо использовать специальный атрибут — nested_flatbuffers.

Правда, как это часто водится за разработчиками протоколов, на нормальные примеры сил им уже не хватает. И даже на тематических форумах типа stackoverflow, groups.google и т.п. сложно найти полную информацию — приходится буквально по крупицам собирать все части паззла, чтобы в конце концов понять, как именно написать рабочий код.

В статье я раскрою проблему подробнее и приведу примеры на C, C++ и Rust.

In concept this is very simple: a nested buffer is just a chunk of binary data stored in a ubyte vector, typically with some convenience methods generated to access a stored buffer. In praxis it adds a lot of complexity.


image
Читать дальше →

Bison, dynamic linking и… обработка BMP изображений

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

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

Если вы заинтересованы в разработке языков или вам необходимо быстро разобраться как писать приложения, динамически загружающие исполняемый код, хранящийся в разделяемых библиотеках (dll, so), то возможно вам будет интересен данный материал.

Читать дальше →

Дизассемблируем циклы, написанные на Си

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

Доброго времени суток.

Сегодня мы будем смотреть дизассемблированный код инструкций if, for, while, swich, которые написаны на языке Си. Воспользуемся radare2.

Дизассемблировать код

Почему PVS-Studio не предлагает автоматические правки кода

Время на прочтение4 мин
Количество просмотров3.1K
Почему PVS-Studio не предлагает автоматические правки кода

Статический анализатор PVS-Studio обнаруживает достаточно сложные и хитрые фрагменты кода, содержащие ошибки. И как их исправить, не всегда понятно даже человеку, и сейчас мы рассмотрим пару примеров. Поэтому лучше вообще не генерировать никаких предположений по автоматическому исправлению кода.
Читать дальше →

bdshemu: эмулятор шелл-кода в Bitdefender

Время на прочтение13 мин
Количество просмотров3.3K
Совсем скоро, 19 ноября, у нас стартует курс «Этичный хакер», а специально к этому событию мы подготовили этот перевод о bdshemu — написанном на языке C эмуляторе с открытым исходным кодом в Bitdefender для обнаружения эксплойтов на 32- и 64-битной архитектуре. Эмулятор очень прост, а благодаря нацеленности на уровень инструкций он работает с любой операционной системой. Кроме того, этот эмулятор зачастую сохраняет расшифрованный эксплойт в бинарный файл. Подробности и пример обнаружения Metasploit — под катом, ссылка на репозиторий проекта на Github — в конце статьи.


Приятного чтения!

Включаем периферию контроллера за 1 такт или магия 500 строк кода

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


Как часто, при разработке прошивки для микроконтроллера, во время отладки, когда байтики не бегают по UART, вы восклицаете: «Ааа, точно! Не включил тактирование!». Или, при смене ножки светодиода, забывали «подать питание» на новый порт? Думаю, что довольно часто. Я, по крайней мере, — уж точно.

На первый взгляд может показаться, что управление тактированием периферии тривиально: записал 1 — включил, 0 — выключил.

Но «просто», — не всегда оказывается эффективно…
Читать дальше →

Пока смерть не разлучит нас или всё о static в C++

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


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

Читать дальше →

Создание тайлов из растровых карт (ч.2)

Время на прочтение10 мин
Количество просмотров6.5K
В этой части статьи мы завершим наш алгоритм создания тайла, узнаем, как использовать полученные тайлы в OpenLayers и в OsmAnd. Попутно продолжим знакомство с ГИС и узнаем про картографические проекции, а также узнаем в чем заключается «привязка» растровой карты и зачем она нужна.
Читать дальше →

Папа может в си, или Простая и аккуратная кодогенерация для SQLite

Время на прочтение4 мин
Количество просмотров3.2K
image

Совсем скоро, 4 и 5 ноября, у нас стартуют новые потоки курсов SQL для анализа данных и C++ разработчик, специально к их старту мы подготовили этот перевод из блога Facebook Engineering с обзором полезного инструмента.

SQLite используется широко, но написание хорошо протестированных и поддерживаемых уровней доступа к данным в лучшем случае может стать сложной задачей. Многие команды применяют некую генерацию кода, чтобы избежать необходимости менять десятки порядковых номеров каждый раз, когда добавляется столбец, но такой подход приводит к ошибкам. Компилятор CQL в CG/SQL позволяет создавать сложные хранимые процедуры с большими запросами, а с помощью комбинаций синтаксических хелперов и сильной типизации эти процедуры гораздо проще получить и сохранить. Сочетание сильной типизации в языке и средства для хорошего юнит-тестирования может дать уверенность в том, что даже очень сложная логика корректна.
Приятного чтения!

Hack The Box. Прохождение Fuse. RPC, принтеры и опасная привилегия SeLoadDriverPrivilege

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

Продолжаю публикацию решений, отправленных на дорешивание машин с площадки HackTheBox.

В данной статье создадим словарик паролей из косвенной информации о пользователях, посмотрим на информацию о принтерах с точки зрения RPC и повышаем привилегии благодаря SeLoadDriverPrivilege.

Организационная информация
Чтобы вы могли узнавать о новых статьях, программном обеспечении и другой информации, я создал канал в Telegram и группу для обсуждения любых вопросов в области ИиКБ. Также ваши личные просьбы, вопросы, предложения и рекомендации рассмотрю лично и отвечу всем.
Читать дальше →

Готовим C++. Система сборки Bake

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

Наверное, большинство из вас согласится, что на сегодняшний день наибольшую популярность среди систем сборки для проектов на C/C++ имеет CMake. Каково же было мое удивление увидеть в проекте на новой работе собственную систему сборки - Bake.

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

Bake - это кросс-платформенная система сборки для проектов написанных на С/С++, нацеленная в первую очередь на встраиваемые системы. Bake написан на Ruby, с открытым исходным кодом, который по-прежнему поддерживается (в разработке с 2012 г.)

Читать далее

Zx spectrum128, CP/M 2.2 и терминал на STM32F407

Время на прочтение4 мин
Количество просмотров25K
Нарисовав черно-белый Spectrum48 за $3 на телевизоре и получив вопросы как: «а почему не цветной», «а почему без музыки», «а где НЕИГРУШКИ» — решил поправить и опубликовать менее бюджетную версию, Spectrum128+СP/M, примерно на $25 железа.


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

Запуск ОС Андроид с SD-карты для устройств на процессоре Amlogic S912

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

В статье детально, с приведением исходного кода, описывается работа, проведенная по переносу и запуску с SD-карты программной прошивки с ОС Андроид для устройств на процессоре Amlogic S912.

Читать дальше →

В нативный код из уютного мира Java: путешествие туда и обратно (часть 2)

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


Это вторая часть расшифровки доклада Ивана Углянского (dbg_nsk) с JPoint 2020, посвященного связи Java с нативным кодом. В прошлой части мы поговорили про традиционный способ связи — через Java Native Interface (JNI), рассмотрели специфичные ему проблемы и оценили производительность. Картина получилась удручающей, поэтому давайте разбираться, чем можно заменить JNI?

Читать дальше →

Сравнение встраиваемых ЯП по размеру в исполняемом файле

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

В рамках одного из моих SDK-проектов нам понадобилось добавить скриптование, которое бы оказало наименьший эффект на размер конечного бинарного файла, но при этом предоставляло хорошую фунциональность. Это дало старт проекту, который описан в этой статье. Прошу заметить, что т.к. в SDK у нас есть определенные требования, они частично перенеслись на язык скриптования, поэтому в проекте не участвовали некоторые достаточно известные встраиваемые ЯП (но Lua включен для сравнения).


Сайт проекта доступен по ссылке. Скажу сразу, что на данный момент для меня лично победителями являются Chibi-Scheme и Wasm3. Подробности для заинтересовавшихся под катом.

Читать дальше →

8 оттенков серого, или ZX Spectrum48 за $3

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

Прочитав статью Передача аналогового тв сигнала с помощью STM32 решил попробовать нарисовать телевизионный сигнал на дешевой китайской плате stm32f401ccu6 за $2.5 без дополнительного железа.

Когда-то давным-давно

Продолжение: обидно за мнения про статические анализаторы кода

Время на прочтение4 мин
Количество просмотров7.2K
image1.png

Планировалось, что, написав статью "Обидно за мнения про статические анализаторы кода", мы выговоримся и спокойно отпустим тему. Но неожиданно эта статья вызвала бурный отклик. К сожалению, обсуждение пошло не туда, и сейчас мы сделаем вторую попытку объяснить своё видение ситуации.
Читать дальше →

Linux kernel development для самых маленьких

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


Любой программист знает, что теоретически он может внести свой посильный вклад в развитие Linux ядра. С другой стороны, подавляющее большинство уверено, что занимаются этим исключительно небожители, а процесс контрибьюта в ядро настолько сложен и запутан, что обычному человеку разобраться в нём нет никакой возможности. А значит, и надобности.
Сегодня мы попробуем развеять эту легенду и покажем, как абсолютно любой инженер при наличии достойной идеи, воплощённой в коде, может предложить ее на рассмотрение Linux community для включения в ядро.

Читать дальше →

Платформа с web-камерой на ESP32

Время на прочтение16 мин
Количество просмотров48K
Идея собрать мобильную платформу с web-камерой на борту появилась практически спонтанно. Мне хотелось иметь в арсенале скромной домашней автоматизации что-то вроде IP-камеры. И тут вопрос не столь в цене или качестве, сколь в своеобразном творческом эксперименте. Материалом для вдохновения были различные статьи DIY и проекты вроде этого.

image
Читать дальше →

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