Меня зовут Мария Недяк, я специализируюсь на разработке харденингов нашей собственной микроядерной операционной системы «Лаборатории Касперского» KasperskyOS. Если вкратце: мы стараемся сделать любые атаки на нашу ОС невозможными — или хотя бы очень дорогими :-)
Рубрика «Си»
Стековые канарейки и где они обитают. Приручаем один из ключевых харденингов
2025-03-21 в 10:15, admin, рубрики: stack canaries, защита данных, информационная безопасность, канарейка, канарейка иб, операционная система, операционные системы, СиМногопоточное программирование на C
2025-02-11 в 13:15, admin, рубрики: threading, многопоточное программирование, многопоточность, Си, синхронизация, функции
Многопоточное программирование — это специализированная форма параллельного программирования, которая предполагает выполнение нескольких потоков в рамках одного процесса или приложения. Объясню - каждая система состоит из процессов, а процесс состоит из потоков.Читать полностью »
Путеводитель C++ программиста по неопределённому поведению
2025-01-28 в 10:58, admin, рубрики: C, c++, undefined behavior, баги, Компиляторы, неопределённое поведение, ошибки в коде, ошибки программистов, Программирование, СиВашему вниманию предлагается полный список разделов электронной книги (12 из 11 :)), посвящённой неопределённому поведению. Книга не является учебным пособием и рассчитана на тех, кто уже хорошо знаком с программированием на C++. Это своего рода путеводитель C++ программиста по неопределённому поведению, причём по самым его тайным и экзотическим местам. Автор книги — Дмитрий Свиридкин, редактор — Андрей Карпов.
Операционная система в 1 000 строках кода (Часть 1)
2025-01-19 в 9:01, admin, рубрики: risc-v, ruvds_перевод, UNIX, ассемблер, операционные системы, Программирование, разработка ос, Си, ядро
Всем привет! В этой небольшой книге (серии статей, — прим. пер.) мы с нуля, шаг за шагом, напишем скромную ОС.
Вы можете насторожиться, услышав, что разработка ОС или ядра, в частности, их базовых функций на удивление проста. Даже система Linux, которая воспринимается как масштабный опенсорсный проект, на стадии версии 0.01 включала всего 8 413 строк кода. Сегодня ядро Linux действительно огромно, но начиналось оно, как и типичный хобби-проект, с крохотной базы кода.
В рамках предстоящей серии статей мы на языке С реализуем базовое переключение контекста, страничное распределение памяти, режим пользователя, командную оболочку, драйвер дискового устройства и операции чтения/записи. И хотя такой объём работы может показаться масштабным, всё это уместится всего в 1 000 строк кода.
Но сразу предупрежу — процесс окажется не так прост, как выглядит на первый взгляд. Самой сложной частью создания собственной ОС является отладка. И мы не сможем использовать для этого printf
, пока её не реализуем. Здесь вам потребуется освоить различные техники и приёмы отладки, которые в разработке ПО вы никогда не использовали. В частности, начиная «с нуля», вы будете встречать сложные этапы вроде процесса загрузки и страничной организации памяти. Но не пугайтесь, «отлаживать ОС» мы тоже научимся!
Чем сложнее отладка, тем больше радости от получения рабочего продукта. Так что приглашаю вас погрузиться в захватывающий мир разработки операционных систем!Читать полностью »
Упрощаем «простой» ELF
2025-01-12 в 9:01, admin, рубрики: elf, gcc, ruvds_перевод, ассемблер, Программирование, Си
Давайте-ка напишем простую программу для Linux. Насколько трудной она может быть? Только тут надо учесть, что простота противоположна сложности, но не трудности*, и создать нечто простое на удивление трудно. А что останется, если избавиться от сложности стандартной библиотеки, всех современных средств безопасности, отладочной информации и механизмов обработки ошибок?Читать полностью »
Можно ли уместить игру Minecraft всего в один QR-код?
2025-01-04 в 22:13, admin, рубрики: java, minecraft, ассемблер, оптимизация, СиОтвет: да! И вот же он:

Игра запускается, и вы можете перемещаться по миру 64x64x64 при помощи клавиш WASD. Пробелом прыгаем, мышью осматриваемся. Щёлкнув левой кнопкой мыши, можно разрушить блок, а правой — установить землю.
Можно просмотреть QR-код при помощи следующей команды под Linux:
zbarcam -1 --raw -Sbinary> /tmp/m4k &&chmod +x /tmp/m4k && /tmp/m4k
Стековая виртуальная машина на языке Си
2025-01-01 в 22:11, admin, рубрики: виртуальная машина, Программирование, Си, язык ассемблера
Введение
Разработка виртуальных машин может быть не только интересным занятием на вечер, но также и полезным приложением при обучении студентов языку ассемблера на предметах ОАиП (основы алгоритмизации и программирования) и ААС (архитектура аппаратных средств). Целью данной статьи станет создание простой стековой виртуальной машины с собственным языком ассемблераЧитать полностью »
Самая красивая ошибка, которую я нашёл с помощью PVS-Studio в 2024 году
2024-10-28 в 7:23, admin, рубрики: bugs, C, c++, DPDK, pvs-studio, баги, информационная безопасность, ошибки в коде, Си, статический анализ кодаСразу предупреждаю, мои вкусы очень специфичны. Красота ошибки в том, что человеку её очень сложно найти. Я не верю, что её можно заметить при обзоре кода. Если только заранее знать, что она есть, и искать её целенаправленно.
Ошибку я нашёл в проекте DPDK. В нём есть и другие ошибки, но про них потом. Они меркнут перед этим алмазом. Только не ждите чего-то эдакого. Ошибка проста до безобразия. Вот только найти её, просматривая код, ой как непросто. Собственно, попробуйте сами.
Язык BCPL из которого получился C
2024-10-08 в 6:14, admin, рубрики: история, Си, языки программированияГотовясь к собеседованиям по Go я обратил внимание на то что среди его создателей Кен Томпсон - я смутно помнил что он также стоял у истоков языка C, но без подробностей. На самом деле было примерно так: Мартин Ричардс написал BCPL, Кен Томпсон переделал его в B повыкидывав "ненужное" и улучшив синтаксис, а Деннис Ритчи добавил разнообразие типов чтобы получился язык С который мы уже более-менее представляем.
И вот я решил заглянуть в BCPL - насколько он был похож и в чем отличался. Кратким обзором - сравнением с С я и хочу поделиться! Вы сможете и сами "пощупать" его при желании :)
Небольшая предысторияЧитать полностью »
Портируем декодер AV1 с С на Rust для повышения быстродействия и безопасности
2024-09-15 в 9:01, admin, рубрики: AV1, Rust, ruvds_перевод, безопасность памяти, оптимизация быстродействия, портирование софта, Программирование, Си
AV1 становится всё более значимым видеоформатом, которому требуется безопасный и производительный декодер. Исходя из этой идеи, мы в тандеме с командой из Immutant создали
rav1d
, портировав на Rust написанный на С декодерdav1d
. Перед вами первая из двух статей, посвящённых решению этой задачи.— Джош Аас, глава проекта Prossimo организации ISRG