Обновить
174.43

Системное программирование *

Обеспечение работы прикладного ПО

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

Обзор паттернов интеграции микросервисов. Часть 2

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

Продолжаем обзор паттернов интеграции микросервисов. В первой части мы рассказали, зачем IT-специалистам нужны шаблоны интеграции, и для каких задач они подходят. Подробно остановилисьна Circuit Breaker, Sidecar, Ambassador, Anti-Corruption Layer и Async Request-Reply. Сегодня по плануразобрать Backends for Frontends, Cache-Aside, Gateway, Gateway Aggregation и Gateway Routing. 

Читать далее

Как научить операционную систему «выбрасывать» С++ исключения из системных вызовов и как это можно применять

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

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

Читать далее

Обзор паттернов интеграции микросервисов. Часть 1

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

Недавно мы проводили вебинар «Обзор паттернов интеграции микросервисов». На нём энтерпрайз архитектор Пётр Щербаков рассказал, зачем IT-специалистам нужны шаблоны интеграции, и разобрал, для каких задач они подходят, а для каких нет. Для тех, кто пропустил или предпочитает читать, а не смотреть подготовили текстовый обзор интеграционных паттернов: Circuit Breaker, Sidecar, Ambassador, Anti-Corruption Layer и Async Request-Reply.

Читать далее

Запуск MFC-приложения на не-x86 архитектуре нативно при помощи Winelib и подключение к нему плагина на Qt

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

Занимался я недавно портированием одного старого win32 MFC MDI приложения, до сих пор разрабатываемого с использованием Microsoft Visual Studio 6.0 (среда разработки 1998 года выпуска), на Linux. При чем необходимо было, чтобы под Linux собирался нативный бинарник в формате ELF из исходников. Взгляд упал на проект Wine, позволяющий запускать бинарники Windows (формат PE - Portable Executable). Один из компонентов Wine - библиотека Winelib - является прослойкой (враппером) между вызовами win32 и вызовами библиотек Linux. С помощью Winelib можно под Linux собирать win32 приложения из исходников. В составе Winelib есть десятки врапперов стандартных библиотек Windows. Но вот незадача. Враппера для MFC (Microsoft Foundation Classes) нет. В итоге прослойку между классами MFC и вызовами win32, пригодную для компиляции с использованием Winelib, пришлось готовить самому. Далее будет описан путь к решению задачи, а также компромиссы, на которые пришлось пойти по ходу реализации.

Читать далее

11 языков программирования для DevOps и их применение

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

Мы составили небольшой список языков программирования, с которыми приходится сталкиваться DevOps-инженерам. Подчеркнем, что это не рейтинг, и здесь нет лучших и худших языков — это лишь описание их возможностей и конкретных примеров применения для DevOps, что может оказаться полезным для новичков.

Читать далее

Отладка драйвера Windows

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

Работая со студентами я заметил, что нередко от изучения некоторой области отталкивает не столько сложность непосредственно разработки, сколько проблемы, связанные с настройкой рабочей среды и тестового окружения. Особенно остро эта проблема стоит при низкоуровневой разработке, в частности, драйверов ядра ОС Windows. Данная публикация содержит подробное описание процесса создания, запуска и отладки простейшего драйвера Windows.

Хочу ронять Windows в BSOD

Как устроена разработка ReactOS, зачем в неё контрибьютить и почему она уже 20 лет в альфе

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

Виктор Перевёрткин, cистемный разработчик в «Лаборатории Касперского» и активный участник комьюнити разработчиков ReactOS о том, как устроена и кем создаётся ReactOS и работают ли в ней HOMM III. Статья написана на основе выпуска подкаста «Люди и код» от Skillbox Media (март 2022 года).

Читать далее

Коллоквиум по программированию микроконтроллеров (Теоретический Минимум)

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

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

Вопросы в частности взяты из реальных технических собеседований при устройстве на работу в разные компании. Постарался отобрать только самые приближенные к практике вопросы, которые можно выделить после 13 лет in-sider-ского опыта.

Если вы знаете адекватные, сложные и интересные вопросы по теме разработки на MCU, то пишите их в комментариях.

Читать далее

Аудит входа в Linux через Slack. Разбираемся с PAM

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

Библиотеки PAM (Pluggable Authentication Module) используются для добавления сложного сценария проверки учетных данных и выполнения дополнительных действий при аутентификации пользователя и доступе к службам. В этой статье мы разберемся с внутренней архитектурой PAM, особенностями конфигурации и сделаем простой модуль для отправки уведомлений в Slack при входе пользователя в систему.

Читать далее

Динамическая генерация пользователей в Linux. Разбираемся с NSS

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

Как известно, пользователи и группы в Linux определяются по целочисленному идентификатору, который используется при описании владельца и группы файла, а также для создания контекста текущего пользователя после авторизации. Но как это работает внутри? И можно ли создать свою реализацию для взаимного преобразования имен и идентификаторов и для аутентификации пользователей? В этой статье мы детально рассмотрим анатомию подсистем NSS (Name Service Switch) и создадим свою простую реализацию подсистем для использования с текстовым файлом со списком пользователей и паролей. Во второй части статьи мы поговорим о PAM и обсудим возможные способы ее реализации и применения.

Читать далее

Устройство Стека для Intel386

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

Стек (от англ. Stack) - специально отведённое место в памяти для хранения временных данных. Он подчиняется следующим правилам

Читать далее

Rust 1.62.0: cargo add, #[default] для перечислений, быстрые мьютексы на Linux и поддержка bare metal x86_64 платформ

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

Команда Rust рада сообщить о новой версии языка — 1.62.0. Rust — это язык программирования, позволяющий каждому создавать надёжное и эффективное программное обеспечение.


Если у вас есть предыдущая версия Rust, установленная через rustup, то для обновления до версии 1.62.0 вам достаточно выполнить команду:


rustup update stable

Если у вас ещё нет rustup, то можете установить его со страницы на нашем веб-сайте, а также ознакомиться с подробным описанием выпуска 1.62.0 на GitHub.


Если вы хотите помочь нам протестировать будущие выпуски, вы можете использовать beta (rustup default beta) или nightly (rustup default nightly) канал. Пожалуйста, сообщайте обо всех встреченных вами ошибках.

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

Три причины неудачных миграций в облако (и как этого избежать)

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

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

Итак, каковы основные причины неудачных миграций в облака, и как снизить риски?

Читать далее

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

Fuchsia OS глазами атакующего

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

Fuchsia — это операционная система общего назначения с открытым исходным кодом, разрабатываемая компанией Google. Эта операционная система построена на базе микроядра Zircon, код которого написан на C++. При проектировании Fuchsia приоритет был отдан безопасности, обновляемости и быстродействию.

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

Читать далее

Виртуальный COM-порт на STM32 или как управлять контроллером через USB не привлекая внимания санитаров

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

Написать эту статью меня сподвигли те сложности, которые пришлось пройти в попытке разобраться, как же именно ядро контроллера STM32F103 работает с драйвером USB, который находится на борту. Имеющиеся туториалы по созданию устройств, в том числе и композитных, в основном сфокусированы на особенностях использования библиотек. Но когда оставшегося места в памяти контроллера мало а парамеры его работы полностью предсказуемы, лучшим решением становится написать собственный обработчик прерываний. А для этого нужно понять,

как же оно всё-таки работает

Во что вам обойдется конкурентная обработка. Иерархия проблем

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

Конкурентность сложно как следует наладить, как минимум, тем из нас, кому не повезло писать на языках, непосредственно открывающих нутро конкурентного аппаратного обеспечения: речь о потоках и разделяемой памяти. Не менее сложно организовать конкурентность так, чтобы она работала и правильно, и быстро. Все, что вы знаете об оптимизации однопоточного кода, зачастую вам не поможет. На микроуровне (отдельные инструкции) просто невозможно применить обычные правила, актуальные для μ-операций, цепочек зависимостей, пределов пропускной способности и т.д. При конкурентности правила другие.

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

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

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

Читать далее

Детальный анализ вредоносного ПО, замаскированного под NOTEPAD++

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

Lazarus привлекала своих жертв при помощи документов о вакансиях в таких компаниях, как LockHeed Martin, BAE Systems и Boeing. В данном конкретном случае злоумышленники привлекали жертв, ищущих работу в Boeing, при помощи документа Boeing BDS MSE.docx ( твит ShadowChasing1). Вредоносное ПО извлекает имя хоста, имя пользователя, информацию о сети, список процессов и другую информацию, которая затем должна была передаваться на один из четырёх серверов C2. Предназначенные для передачи данные сжимались, шифровались XOR, кодировались Base64 и отправлялись на сервер C2. Троян реализует четыре действия, в том числе скачивает и исполняет файл .exe или .dll, загружает PE (Portable Executable) в память процессов и исполняет шелл-код.
Читать дальше →

multiboot usb-drive. своими руками

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

Давненько пользуюсь мультизагрузочным внешним жестким диском, набитым различными дистрибутивами Linux. В свете последних событий и очередной волны импортозамещения понадобилось дополнить его и «отечественными» дистрибутивами. Решил сделать для себя небольшое HOWTO, заодно поделиться с сообществом.

Кому стало неинтересно — расходимся. Никаких сакральных знаний тут не будет.

Читать далее

Обновление производительности BonsaiDb: глубокое погружение в синхронизацию файлов

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

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

tl; dr: BonsaiDb работает медленнее, чем сообщалось ранее 

Я настроил виртуальную машину сервера Ubuntu 20.04 под управлением ядра 5.4.0-110-generic и размышлял, как лучше отключить компьютер после вызова sync_file_range, когда @justinj снова пришел на помощь, указав, что существует /proc/sysrq-trigger. Он также поделился своим постом в блоге, где рассказывал о проведении аналогичных тестов против fsync. С их помощью он хотел изучить, как создавать надежный журнал базы данных. На следующий день после последнего поста @justinj сообщил, что они отследили один из примеров Nebari и не увидели ни одного выполненного системного вызова fsync. Это произошло из-за неправильного трактования термина "true sink" в std::io::Write. Оказалось, выполнение Write::flush() для std::io::File – это не операция, так как "true sink" было ядром, а не диском.

Я выпустил Nebari v0.5.3 в тот же день. Я запустил набор тестов Nebari и... ничего не изменилось. Я запустил пакет на GitHub Actions – никаких изменений. Я запустил пакет на своем выделенном VPS, который использую для более стабильной среды бенчмаркинга, чем GitHub Actions... никаких изменений. Я запустил пакет на своем Mac ... ужасное замедление. Я расскажу ниже, почему так произошло, но первоначальное впечатление было, что я каким-то образом увернулся от пули.

Читать далее

16-битная ОС на fasm + Cи. Часть 1

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

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

Читать далее

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