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

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

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

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

Особенности встраивания в ключевые механизмы ядра Linux с использованием LSM

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

Среди способов встраивания в ядро Linux стоит отметить способ, основанный на использовании фреймворка Linux Security Modules (далее, LSM), предназначенного для интеграции различных моделей безопасности, служащих целью расширения базовой дискреционной модели безопасности Linux (DAC).
Читать дальше →

Эдвард руки — С++

Время на прочтение10 мин
Количество просмотров55K
Я искал, с чем бы сравнить программирование на С++ и я вспомнил фильм 1990 года режиссера Тима Бертона — «Эдвард руки-ножницы»
Читать далее

Process Explorer vs Process Hacker

Время на прочтение6 мин
Количество просмотров96K
Многим людям рано или поздно приходит в голову мысль, что стандартный менеджер процессов Windows весьма слаб по функционалу. Начинаются поиски альтернативы, которые в основном тут же и заканчиваются при обнаружении Process Explorer от Марка Руссиновича. Вот и Хабр даже советует эту программу.

Что тут можно сказать? Конечно, Process Explorer — это хорошая программа. Однако, не идеал. Именно в пику её неидеальности существует не только бесплатная, но и свободная альтернатива — Process Hacker. А теперь мы детально и по пунктам рассмотрим, почему Process Hacker не просто «чуть-чуть лучше», а лучше на порядок, лучше на столько, что переводит программу для продвинутого пользователя в класс инструмента системного программиста или администратора.
Читать дальше →

Задачка из реальной жизни: Как восстановить дерево процессов в Linux

Время на прочтение2 мин
Количество просмотров9.5K
Мы разрабатываем проект CRIU (Checkpoint/Restore in Userspace) и у нас возникла достаточно интересная задача о том, как восстановить оригинальное дерево процессов. Я предлагаю вам попытаться решить ее.

Задача


CRIU — это утилита, которая позволяет сохранить состояние процессов на диск и постановить их позднее на этой или на любой другой машине. Одной из подзадач восстановления является нахождение последовательности действий для того, чтобы восстановить дерево процессов. Входные данные содержат набор параметров для каждого процесса: уникальный идентификатор (PID), ссылку на родителя (PPID), идентификатор сессии (SID).

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

Взгляд на свет в новом свете: Учёные создали невиданную форму материи. (перевод статьи)

Время на прочтение4 мин
Количество просмотров77K
Учёные Гарварда и Массачусетского технологического института (MIT — МТИ) меняют общепринятую точку зрения о свете и для этого им не пришлось лететь в другую далёкую-предалёкую галактику.
 Работая с коллегами из центра Ультрахолодных атомов Гарварда-Массачусетcа, группа профессора физики Гарварда Михаила Лукина и профессора физики МТИ Владана Вулетича смогла заговорить фотоны, чтобы они связались вместе в форму молекулы — состояние материи прежде бывшее только в чистой теории. Работа описана в статье Nature 25 сентября.

 Со слов Лукина открытие вскрывает десятилетнее общепринятое противоречие, лежащее в основе природы света. «Фотоны уже давно считались безмассовыми частицами, которые не взаимодействуют друг с другом — ведь сияние двух лучей лазера, просто проходит сквозь друг друга» — говорит он.
«Фотонные молекулы», тем не менее, ведут себя не вполне как традиционные лазеры, а в большей степени как на страницах научной фантастики — световые мечи.
Читать дальше →

Мониторим ядра CPU в Zabbix и создаем произвольные счетчики в Low-level discovery

Время на прочтение5 мин
Количество просмотров48K
Не так давно тут проходила статья про LLD. Мне она показалась скучной т.к. описывает примерно то же, что есть и в документации. Я решил пойти дальше и с помощью LLD мониторить те параметры, которые раньше нельзя было мониторить автоматически, либо это было достаточно сложно. Разберем работу LLD на примере логических процессоров в Windows:
image

Изначально интересовал расширенный монтиринг помимо ядрер CPU и нагрузка на физические диски. До того как обнаружение было введено, эти задачи частично решались ручным добавлением. Я добавлял условные диски в файл конфигурации zabbix_agent и вообще по-разному извращался. В результате это было очень неудобно, добавлялось много неприятной ручной работы и вообще неправильно в общем как-то было :)
В итоге получается схема, которая автоматически определяет ядра в системе, а также физические диски, установленные в системе и добавляет необходимые элементы сбора данных. Для того, чтобы узнать как это реализовать у себя, добро пожаловать под кат. Я попытаюсь более-менее подробно расписать работу на примере CPU и то как сделать тоже самое, но для физических дисков.
Читать дальше →

Расширяем контекстное меню кнопки «Пуск» в Windows 8.1

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


В этой статье мне хотелось бы рассказать о своем опыте расширения Windows Explorer, если конкретнее, контекстного меню, называемого «Power User Menu». Не скажу, что очень нуждаюсь в старом представлении меню кнопки «Пуск», но все таки хотелось бы иметь возможность быстрого и структурированного доступа к основным функциям необходимым в работе. Power User Menu можно вызвать двумя способами: 1. Щелкнуть правой кнопкой мыши на кнопке «Пуск». 2. Нажать комбинацию клавиш Windows Key + X. Корпорация Майкрософт предоставила возможность редактирования этого меню, однако эта возможность достаточно ограниченна и не позволяет создавать иерархию меню, пункты с пиктограммами, и поддерживает только ярлыки, да и то не всех типов. Для реализации описываемого функционала мы выполним dll инъекцию в процесс Windows Explorer, а так же осуществим перехват api вызовов управляющих работой контекстного меню. В качестве подопытной операционной системы будем использовать Windows 8.1 x64.
Читать дальше →

ARM-ы для самых маленьких: компоновка-2, прерывания и hello world!

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


Нашел возможность «добить» цикл еще одной статьей, где я подведу небольшой итог. По сути, только сейчас мы добрались до того, с чего, обычно, начинают программировать:
  • рассматриваем «сложный» сценарий компоновки GNU ld;
  • учимся использовать прерывания;
  • наконец добираемся до hello world!


Предыдущие статьи цикла:


Примеры кода из статьи: https://github.com/farcaller/arm-demos

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

ARM-ы для самых маленьких: тонкости компиляции и компоновщик

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

Продолжая серию статей про разработку с нуля для ARM, сегодня я затрону тему написания скриптов компоновщика для GNU ld. Эта тема может пригодиться не только тем, кто работает со встраиваемыми системами, но и тем, кто хочет лучше понять строение исполняемых файлов. Хотя примеры так или иначе основаны на тулчейне arm-none-eabi, суть компоновки та же и у компоновщика Visual Studio, например.

Предыдущие статьи:


Примеры кода из статьи: https://github.com/farcaller/arm-demos

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

Пишем свой отладчик под Windows [часть 2]

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


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

Предисловие


Эта статья является продолжением предыдущей части «Пишем свой отладчик под Windows». Очень важно, чтобы Вы её прочитали и поняли. Без полного понимания того, что написано в первой части, Вы не сможете понять эту статью и оценить весь материал целиком.
Единственный момент, оставшийся неупомянутым в предыдущей статье, это то, что наш отладчик может отлаживать только машинный код. У Вас не получиться начать отладку управляемого (managed) кода. Может быть, если будет четвёртая часть статьи, я в ней также рассмотрю отладку и управляемого кода.
Я бы хотел показать Вам несколько важных аспектов отладки. Они будут включать в себя показ исходного кода и стека вызовов (callstack), установки точек останова (breakpoints), входа внутрь исполняемой функции (step into), присоединение отладчика к процессу, установка системного отладчика по умолчанию и некоторые другие.
Читать дальше →

ARM-ы для самых маленьких: который час?

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


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

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

ARM-ы для самых маленьких

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


Пару дней назад я опубликовал и потом внезапно убрал в черновики статью о плане написать про создание своей ОС для архитектуры ARM. Я сделал это, потому что получил много интересных отзывов как на Хабре, так и в G+.

Сегодня я попробую подойти к вопросу с другой стороны, я буду рассказывать о том, как программировать микроконтроллеры ARM на нарастающих по сложности примерах, пока мы не напишем свою ОС или пока мне не надоест. А может, мы перепрыгнем на ковыряние в Contiki, TinyOS, ChibiOS или FreeRTOS, кто знает, их там столько много разных и интересных (а у TinyOS еще и свой язык программирования!).

Итак, почему ARM? Возиться с 8-битными микроконтроллерами хотя и интересно, но скоро надоедает. Кроме того, средства разработки под ARM обкатаны долгим опытом и намного приятнее в работе. При этом, начать мигать светодиодами на каком-то «evaluation board» так же просто, как и на Arduino.

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

Совместный запуск Linux и baremetal OS

Время на прочтение4 мин
Количество просмотров17K
Недавно я выложил в сеть под BSD лицензией небольшой проект на 8 килострочек C кода. Официально это коллекция бенчмарков для моих клиентов — вендоров промавтоматики. Код очень специфический, и, на первый взгляд, малоприменим за пределами узкой области PLC и motion control. Но есть небольшая изюминка, на которой я не очень акцентировал внимание в статье на IDZ. В поставку бенчмарков включена baremetal среда для их исполнения. В этом посте я опишу, что это такое, и как ее можно использовать.
Читать дальше →

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

Настоящий многопоточный веб-сервер на ассемблере под Linux

Время на прочтение7 мин
Количество просмотров75K
Добрый день, хабр!
Сегодня я вам расскажу как написать свой настоящий веб-сервер на асме.

Сразу скажу, что мы не будем использовать дополнительные библиотеки типа libc. А будем пользоваться тем, что предоставляет нам ядро.

Уже только ленивый не писал подобных статей, — сервер на perl, node.js, по-моему даже были попытки на php.

Вот только на ассемблере еще не было, — значит нужно заполнить пробелы.
Читать дальше →

Выход за границы контейнера Modern-приложений Windows 8

Время на прочтение7 мин
Количество просмотров28K
Ещё в операционной системе Windows Vista компания Microsoft добавила средство создания «песочниц» — так называемые Integrity Levels:
Untrusted < Low < Medium < High < System.

Всё в операционной системе (файлы, ветки реестра, объекты синхронизации, пайпы, процессы, потоки) имеет свой Integrity Level. Процесс, имеющий, к примеру Low Integrity Level не может открыть файл с диска, имеющий Medium Integrity Level (уровень по умолчанию).

Именно на этом механизме работают UAC и «Run as administrator», повышая Integrity Level запускаемого процесса. Именно на этой технологии работает песочница в Google Chrome: все процессы вкладок имеют самый низкий Integrity Level — Untrusted, что делает невозможным взаимодействие процесса вообще ни с какими файлами, процессами, ветками реестра и т.д.



Этот одна из сильных сторон безопасности Хрома — ведь даже найдя в нём какой-нибудь stack overflow вы упрётесь в систему безопасности ОС, которая не даст выйти за границы процесса. Кстати, сама Microsoft такой механизм организации песочниц для браузера применила лишь 4 года спустя в Win8.1 + IE 11 (было в выключенном состоянии в Win8 + IE 10 — но кто же пойдёт это искать и включать, так что не считается).

С выходом Windows 8 компании Microsoft понадобилось сделать механизм изоляции Modern-приложений, аналогичный применяемым в других мобильных ОС. Нужно было дать понять как пользователю, так и разработчику, что программа из магазина никак не достанет приватные данные юзера без его согласия, никак не сломает его систему и не нарушит работу других приложений даже при собственном крахе. Для реализации этой идеи был снова использован механизм Integrity Levels. Microsoft придумала такую штуку как «AppContainer». Читая доки в Интернете и даже глядя на описание процессов в Process Explorer, можно подумать, что AppContainer — это ещё один Integrity Level. Правда, непонятно где он — между Low и Medium? Между Untrusted и Low? Что тут можно сказать: и доки в Интернете и утилита Process Explorer — врут. Я себе не представляю как это маркетологи должны были задурить голову программистами, чтобы поля данных из официальных структур отображались намеренно неверно, но так оно и есть.

Правильное положение дел показывает сторонняя утилита ProcessHacker. Как мы видим из неё, AppContainer — это не новый Integrity Level. Это всего-лишь специальная метка, которая добавляется к работающему в общем-то под Low Integrity Level процессу. При этом эта метка уникальна для каждого приложения и используется как дополнительный барьер, ограничивая доступ не только к приложениям с более высокими Integrity Levels, но даже между процессами с Low Integrity Levels, но разными AppContainer-метками.

До этого момента всё было ещё более или менее логично. А вот отсюда начинается мракобесие.
Читать дальше →

OpenMCAPI: одновременный запуск Linux и RTOS на многоядерных процессорах

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


В повседневной практике разработчика встраиваемых систем приходится сталкиваться с необходимостью запуска двух и более разноплановых ОС на n-ядерных системах на кристалле. Это, как правило, Linux и специализированная RTOS. На плечи Linux ложится работа с тяжеловесными стеками протоколов, а RTOS же занимается задачами реального времени.
 
Одна из основных задач, которая встает при такой организации системы — обеспечение механизма взаимодействия, то есть межъядерный обмен данными. Если вам интересно узнать один из вариантов решения на базе открытой библиотеки OpenMCAPI, пролистать пару десятков строк программного кода и увидеть реальные цифры пропускной способности при использовании этой библиотеки, добро пожаловать под кат.
Читать дальше →

Устройство файла UEFI BIOS, часть вторая: UEFI Firmware Volume и его содержимое

Время на прочтение9 мин
Количество просмотров78K
Позади уже полторы (первая, полуторная) части этой статьи, теперь наконец пришло время рассказать о структуре UEFI Firmware Volume и формате UEFI File System.
Читать вторую часть

Устройство файла UEFI BIOS, часть полуторная: UEFI Platform Initialization

Время на прочтение6 мин
Количество просмотров93K
В первой части этой статьи мы познакомились с форматом UEFI Capsule и Intel Flash Image. Осталось рассмотреть структуру и содержимое EFI Firmware Volume, но для понимания различий между модулями PEI и драйверами DXE начнем с процесса загрузки UEFI, а структуру EFI Firmware Volume отставим на вторую часть.
Читать полуторную часть

Устройство файла UEFI BIOS, часть первая: UEFI Capsule и Intel Flash Image

Время на прочтение7 мин
Количество просмотров214K
Выпуск материнских плат на чипсетах Intel шестой серии (P67 и его братьях) принес на массовый рынок ПК новый вариант BIOS — UEFI. В этой статье мы поговорим об устройстве файлов UEFI Capsule и Intel Flash Image.
Структура EFI Firmware Volume и полезные в хозяйстве патчи будут описаны во второй части.
Читать первую часть

Как запустить программу без операционной системы: часть 4. Параллельные вычисления

Время на прочтение18 мин
Количество просмотров30K
После долгого перерыва продолжаем делать интересные штуки, как всегда на чистом железе без операционной системы. В этой части статьи научимся использовать весь потенциал процессоров: будем запускать программу сразу на нескольких ядрах процессора в полностью параллельном режиме. Чтобы провернуть такое, нам потребуется многое сделать для расширения функциональности программы полученной в части 3.

Просто так выполнять какие-то вычисления на ядрах процессора – скучно, поэтому нужна задача, которая требует больших вычислительных ресурсов, хорошо раскладывается на параллельные вычисления, да и выглядит прикольно. Предлагаем сделать программу, которая рендерит простенькую 3D-сцену, используя алгоритм обратной трассировки лучей, или, по-простому, Ray Tracing.

Начнем с самого начала: наша цель параллельные вычисления на всех ядрах процессора. Все современные процессоры для PC, да и ARM уже тоже (я молчу про GPU) – это многоядерные процессоры. Что же это означает? Это означает, что вместо одного вычислительного ядра у процессора на одном компьютере присутствует несколько ядер. В общем случае, все выглядит несколько сложнее: на компьютере может быть установлено несколько сокетов (чипов процессора), в рамках каждого чипа (в рамках одного кристалла) может находиться сразу несколько физических ядер, а в рамках каждого физического ядра может находиться несколько логических ядер (например, те, что возникают при использовании технологии Hyper Threading). Все это схематично представлено на рисунке ниже, и называется топологией.


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

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