Как стать автором
Обновить
27
Cherniaev Andrei @DungeonLordsread⁠-⁠only

Пользователь

Отправить сообщение

Вызываем демонов с printf

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

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

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

Надежно как швейцарские часы, CubeSatы и надежность

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

Приветствую всех читателей Хабра!

В этой статье затрагиваются основные аспекты надёжности электронных систем в малых космических аппаратах (МКА) форм фактора cubesat. Все написанное ниже является личным мнением автора, его знакомых работающих с космосом, а также открытых/закрытых документах различных компаний данной отрасли.

В конце статьи приведены ссылки на дополнительные источники по данной теме. А в комментариях ждут вашего мнения :-)

Читать далее
Всего голосов 44: ↑43 и ↓1+54
Комментарии14

Отладка в C++ геометрии и топологии

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

Генерация 3д объекта - как правило, многоэтапный процесс (например в булевых операциях сначала поиск графа пересечений, нахождение геометрии кривых пересечения и построение топологии результирующего тела). Закономерно возникает сложность с его отладкой. Положим при генерации что-то пошло не так и имеем наполовину готовый объект, который не может быть визуализирован разрабатываемой CAD системой. Что делать? Как локализовать место и момент ошибки? Анализировать глазами тысячи xyz координат промежуточных результатов и вспомогательных объектов на момент выдачи исключения? Или хуже, если отклонения желаемого результата от фактического незначительные, тогда и все числа внешне будут корректны. Работая С++ программистом в области 3Д моделирования и построения различных CAD/САПР систем, я регулярно сталкивался с проблемой визуализации вспомогательных/промежуточных сущностей.               

Сформировал себе универсальный инструментарий DumpSTL, позволяющий с минимальными усилиями, в любом C++ проекте дампить в .stl файлы любые внутренние объекты в проекте.
Почему именно .stl? Так уж исторически сложилось. Много использовал чпу фрезера и 3д принтера, где основным и простейшим форматом моделей является .stl.

Суть использования сводится к однократной адаптации инструмента под структуры данных конкретного проекта, затем:
1) подключить один DumpSTL.h
2) вызвать к необходимым данным метод DUMP::save(...)
3) получить на выходе множество файлов с 3д моделями, которые можно открыть в любом 3д редакторе

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

Работа со звуком на практике

Время на прочтение5 мин
Количество просмотров25K
Здравствуйте!

В свое время я не без удовольствия прочитал замечательную статью «Гитаризм для линуксоида — why not?». И решил написать небольшое продолжение этой статьи и рассказать о некоторых вещах более практического плана, а именно создать небольшое руководство для тех, кто, скажем, неожиданно решил увековечить свое творчество путем записи относительно непростого гитарного произведения. :)
Итак, поехали.

Читать дальше →
Всего голосов 72: ↑67 и ↓5+62
Комментарии57

Linux на esp32s3

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

Вопрос о том, можно ли загрузить линукс на микроконтроллерах Espressif я
впервые услышал в 2015, в период бума esp8266. Тогда мой ответ на него
был: "нет, не это ядро и не на этом железе". Но прошло 8 лет и ответ
изменился на "да, и у меня есть рабочий пример". Дальше рассказ о том,
как это произошло.

Читать далее
Всего голосов 120: ↑119 и ↓1+148
Комментарии21

Тестирование блоков питания. Часть 1. Методическая

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

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

Всем интересующимся — добро пожаловать под кат!
image
Читать дальше →
Всего голосов 37: ↑37 и ↓0+37
Комментарии24

Реализации машины в qemu

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

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

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

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

Реализация утилиты cat на C

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

Идея довольно проста - принять файл в качестве аргумента, открыть его, занести в буфер по частям и вывести на стандартный вывод. Утилита cat также оснащена различными флагами опций, которые позволяют пользователю манипулировать буфером перед его отправкой на стандартный вывод.

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

Что делать, если для вашего любимого языка нет статического анализатора?

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

Ну, если под любимым языком подразумевается русский, английский и т. д., то это в другой хаб. А если язык программирования или разметки, то конечно писать анализатор самим! На первый взгляд, это очень сложно, но, к счастью, существуют готовые многоязыковые инструменты, в которые относительно легко добавить поддержку нового языка. Сегодня я покажу, как можно с достаточно незначительными затратами времени добавить поддержку языка Modelica в анализатор PMD.


Кстати, знаете, что может ухудшить качество кодовой базы, полученной из последовательности идеальных pull request-ов? Тот факт, что сторонние программисты копировали в свои патчи куски существующего кода проекта вместо грамотного абстрагирования. Согласитесь, в какой-то мере такую банальность отловить ещё сложнее, чем некачественный код — он же качественный и даже уже тщательно отлаженный, поэтому тут недостаточно локальной проверки, нужно держать в голове всю кодовую базу, а человеку это непросто… Так вот: если на добавление полной поддержки Modelica (без создания конкретных правил) до состояния «может запускать примитивные проверки» у меня ушло около недели, то поддержку только copy-paste detector часто можно вообще добавить за день!

Узнать как...
Всего голосов 29: ↑29 и ↓0+29
Комментарии0

Нюансы разработки парсера для своего языка программирования

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

image


Недавно прочитал на Хабре статью Свой язык, или как я устал от ассемблера и С, и невольно взглядом зацепился за один абзац:


Я решил не сильно париться, поэтому использовал библиотеку parglare. Она очень легкая и удобная, всем рекомендую. Для описания синтаксиса парсер принимает строку в соответствующем формате, использует регулярные выражения (не надо осуждать регулярки, они всесильны!).

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


Ведь в жизни практически любого программиста может наступить момент, когда ему в голову приходит светлая идея — разработать свой собственный язык программирования. Может быть и не ради захвата мира, наравне с C/C++, Python или хотя бы PHP, а в качестве личного пет-проекта, с которым он, длинными зимними вечерами будет оттачивать собственное мастерство.


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


Это история — заметки на память о муках выбора связки лексер-парсер для разбора грамматики NewLang. А так же попытка описать и систематизировать выводы об особенностях разных анализаторов с которыми пришлось поработать при выборе парсера для разбора грамматики у своего языка программирования.

Читать дальше →
Всего голосов 25: ↑23 и ↓2+28
Комментарии55

Кое-что об inode

Время на прочтение5 мин
Количество просмотров83K
Периодически, с целью переезда в ЦРС собеседуюсь в разных крупных компаниях, в основном Питера и Москвы на должность DevOps. Обратил внимание, что во многих компаниях (во многих хороших компаниях, например в яндексе) задают два сходных вопроса:

  • что такое inode;
  • по каким причинам можно получить ошибку записи на диск (или например: почему может закончиться место на диске, суть одна).

Как часто бывает, я был уверен, что эту тему знаю хорошо, но как только начал объяснять — обозначились провалы в знаниях. Чтобы систематизировать свои знания, заполнить пробелы и больше не позориться, пишу эту статью, может еще кому пригодится.

Начну «снизу», т.е. с жесткого диска (флешки, SSD и прочие современные штуки отбросим, для примера рассмотрим любой 20 или 80 гиговый старый диск, т.к. там размер блока 512 байт).

Жесткий диск не умеет адресовать свое пространство побайтно, условно оно разбито на блоки. Нумерация блоков начинается с 0. (называется это LBA, подробности тут: ru.wikipedia.org/wiki/LBA)


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

Ретро-компьютер уровня «Радио-86РК» с RISC-V процессором на плате OMDAZZ

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

Статья про то, как из недорогой отладочной платы OMDAZZ c ПЛИС  CycloneIV EP4CE6 получить ретро-компьютер с монитором, клавиатурой и тетрисом, но с современным процессором на базе RSIC-V и компилятором GCC.

Как же это сделать
Всего голосов 60: ↑60 и ↓0+60
Комментарии14

Пишем под FPGA без HDL. Сравнение высокоуровневых средств разработки

Время на прочтение16 мин
Количество просмотров19K
В последнее время производители FPGA и сторонние компании активно развивают методы разработки для FPGA, отличающиеся от привычных подходов использованием высокоуровневых средств разработки.

Являясь FPGA-разработчиком, в качестве основного инструмента я использую язык описания аппаратуры (HDL) Verilog, но растущая популярность новых методов вызвала у меня большой интерес, поэтому в данной статье я решил сам разобрать что к чему.

Эта статья — не руководство или инструкция к пользованию, это мой обзор и выводы о том, что могут дать различные высокоуровневые средства разработки FPGA-разработчику или программисту, который хочет окунуться в мир FPGA. Для того, чтобы сравнить самые интересные на мой взгляд средства разработки, я написал несколько тестов и проанализировал полученные результаты. Под катом — что из этого вышло.
Читать дальше →
Всего голосов 33: ↑33 и ↓0+33
Комментарии24

Десятичный счётчик-дешифратор K561ИЕ8 (CD4017) и красивый эффект на нём

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

Привет, Хабр! Бегущие огни многие из нас уже собирали. А что, если сделать их не одномерными, а двумерными? То есть, чтобы они бегали не по вектору, а по матрице?

Получится эффект со множеством вариантов настройки, в зависимости от частоты вертикальной и горизонтальной развёртки.

И воплотим мы его не на Ардуино и микроконтроллерах, а на микросхемах стандартной логики. Которые и от импорта не зависят, и программному взлому не поддаются, а ещё они олдскульные, тёплые, почти ламповые.
Кроме того, соберём ещё три динамичных светодиодных эффекта.
Всего голосов 52: ↑49 и ↓3+64
Комментарии9

Захват видео с USB камер на устройствах под управлением Linux

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

Предыстория


Некоторое время назад я загорелся желанием “улучшить” танк из известного набора “Танковый бой”, добавив возможность играть, как «если бы я был водителем танка». Идея появилась после прочтения нескольких статей на Хабре (например здесь: geektimes.ru/post/257528), в них же я нашел, как это можно сделать имея маленький WiFi-роутер и USB-камеру. Решение выглядело подкупающе простым: роутер прошивается специальной прошивкой, к нему подключается камера, танк управляется родным пультом, а видео смотрится в браузере. Быстро собрав прототип, я обнаружил, что видео захватывается в отвратительном качестве. Это было либо 320х240х30, либо 640х480х30. При включении режима 1280х720 в лучшем случае было рваное видео с артефактами, в худшем — его не было вообще. Режим 1920х1080 не работал в принципе. Меня это сильно расстроило, так как на PC камера поддерживала режимы вплоть до 1920х1080х30 и имела аппаратное MJPG сжатие. Моя интуиция подсказывала, что реализация далека от совершенства.
Читать дальше →
Всего голосов 25: ↑25 и ↓0+25
Комментарии12

Осваиваем кросс-компиляцию с помощью Clang и LLVM

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

Каждый, кто когда-либо пробовал собрать программу на C/C++ через кросс-компиляцию знает, насколько болезненным может быть этот процесс. Главными причинами столь печального положения вещей являются недружелюбность систем сборки при конфигурации кросс-компиляции, а также запутанность процесса настройки набора утилит (тулчейна).


Одним из основных виновников этих проблем, по моему опыту, является тулчейн GNU — древний мамонт, на котором много десятилетий строится весь мир POSIX. Подобно многим компиляторам былых времён, семейство GCC и binutils никогда не ориентировалось на поддержку множества различных целей сборки в одной установке, и единственным способом хоть как-то добиться желаемого была настройка полной кросс-билд-системы для каждой целевой платформы на каждом хосте.

Читать дальше →
Всего голосов 12: ↑11 и ↓1+15
Комментарии8

Создание нового языка для микроконтроллеров

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

Некоторое время я был занят написанием простенького редактора для языка ассемблер под ARM Cortex семейства микроконтроллеров (подробности в моих статьях), и вот сейчас, поднакопив некоторый опыт как в части самого ассемблера так и способов написания программ в них решился на написание нового редактора.

Плюс еще подоспел интерес к RISC‑V архитектуре и было принято решением делать редактор который смог бы редактировать программы на ассемблере для различных архитектур (в том числе может быть и с лагеря AVR кто нить захочет присоединиться).

В общем подумалось: а что если попытаться создать asm‑base'д язык программирования который при выборе архитектуры просто бы транслировался автоматически в асм инструкции выбранной платформы?

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

STM32. CMSIS. Определение частоты внешнего тактирующего осциллятора

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

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

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

Qt Framework: потоки, иерархический конечный автомат, работа с USB-устройствами = QThread + QStateMaсhine + libUSB

Время на прочтение68 мин
Количество просмотров25K
Почти все разработчики программного обеспечения рано или поздно подходят к этапу, когда необходимо применить технологию распределения задач по отдельным потокам. Сейчас трудно представить разработку без применения того или иного фреймворка (framework).
Множество из них содержат необходимые инструменты для создания многопоточных приложений. Не исключение и Qt Framework.

Поговорим о методах Qt многопоточной разработки подробнее.

Сообщество разработчиков ПО на Qt Framework огромно. Люди охотно делятся навыками и приёмами создания многопоточных приложений. Существует множество замечательных книг и статей по вопросам изящного и не очень решения задачи работы с несколькими потоками.
Казалось бы, всё уже решено. Что ещё можно добавить?
Попробую описать работу потока на основе функционирования конечного автомата. Признаюсь, не находил материалы с подобным решением в сети.
Если статья поможет вам с идеей, что, по моему мнению, гораздо ценнее написанного кода, буду очень рад.

Выражаю отдельную благодарность А. Н. Боровскому за книгу «Qt4.7+.Практическое программирование на C++».
Рекомендую к обязательному прочтению!
Читать дальше →
Всего голосов 19: ↑19 и ↓0+19
Комментарии28

Руководство новичка по эксплуатации компоновщика

Время на прочтение32 мин
Количество просмотров208K
David Drysdale, Beginner's guide to linkers (http://www.lurklurk.org/linkers/linkers.html).

Цель данной статьи — помочь C и C++ программистам понять сущность того, чем занимается компоновщик. За последние несколько лет я объяснил это большому количеству коллег и наконец решил, что настало время перенести этот материал на бумагу, чтоб он стал более доступным (и чтоб мне не пришлось объяснять его снова). [Обновление в марте 2009: добавлена дополнительная информация об особенностях компоновки в Windows, а также более подробно расписано правило одного определения (one-definition rule).

Типичным примером того, почему ко мне обращались за помощью, служит следующая ошибка компоновки:
g++ -o test1 test1a.o test1b.o
test1a.o(.text+0x18): In function `main':
: undefined reference to `findmax(int, int)'
collect2: ld returned 1 exit status

Если Ваша реакция — 'наверняка забыл extern «C»', то Вы скорее всего знаете всё, что приведено в этой статье.
Читать дальше →
Всего голосов 194: ↑193 и ↓1+192
Комментарии38

Информация

В рейтинге
Не участвует
Зарегистрирован
Активность