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

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

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

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

Драйвер — это просто

Время на прочтение7 мин
Количество просмотров102K
Многие считают что самому создать драйвер для Windows это что-то на грани фантастики. Но на самом деле это не так. Конечно, разработка драйвера для какого-то навороченного девайса бывает не простой задачей. Но ведь тоже самое можно сказать про создание сложных программ или игр. В разработке простого драйвера нет ничего сложного и я попытаюсь на примерах это показать.
Читать дальше →

Реализация разделяемой памяти между драйвером и приложением

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

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

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

Летняя школа системного программирования ksys labs

Время на прочтение1 мин
Количество просмотров1.8K
В период с 16 июля по 10 августа в Москве мы проводим Летнюю школу системного программирования. В рамках Летней школы все желающие смогут прослушать курсы лекций по архитектуре операционных систем, информационной безопасности и криптографии, а так же принять участие в реальных проектах по разработке операционных систем.
Читать дальше →

Программы в автоматном стиле – трудности перевода

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


Пятая лекция курса «Сетевое программирование в UNIX» от специалистов SkyDNS и компании «Айдеко» уже ждет своих слушателей.

Александр Патраков объясняет, как перевести обычную сетевую программу в программу, основанную на конечном автомате.

О том, что такое конечный автомат, вы узнаете под хабракатом.
Читать дальше →

TCP/IP proxy на Go

Время на прочтение7 мин
Количество просмотров21K
Я снова вернулся к любимой задаче для освоения новых языков. После написания движка для блога на Go, захотелось снова поразмять пальцы, болезный TCP/IP proxy/debugger теперь написан на Go.

Вкратце, TCP/IP proxy — это программа, которая умеет принимать соединения и «пробрасывать» их на указанный адрес. Попутно ведутся логи переданных данных. Это очень удобно при отладке различных самодельных сетевых протоколов.

В плане функциональности версия на Go, как и эрланговская, ведет три лога: двунаправленный шестнадцатеричный дамп и бинарные логи в обоих направлениях, «от» и «к» удаленному хосту. Питоновская версия бинарные логи не ведет.

Конечно, все многопоточно. И так как в Go параллельное программирование настолько просто (и безопасно), количество параллельных активностей для каждого соединения даже больше, чем в версии на Эрланге.
Читать дальше →

Настраиваем пользовательский синий экран смерти

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

Он посинел, ему плохо?


BSOD – реакция ядра на неразрешимую исключительную ситуацию. Если вы его видите, то это значит, что случилось что-то определенно нехорошее.

Среда ядра накладывает множество ограничений на свободу действий программиста: учитывай IRQL, синхронизируй доступ к разделяемым переменным, не задерживайся в ISR, проверяй любые данные из «юзерленда»… Нарушив хотя бы одно из правил, вы получите настоящий выговор из штампованных фраз в стандартном VGA-видеорежиме с худой палитрой.
Читать дальше →

Менеджмент памяти в .Net Framework от Redgate

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

Недавно с рассылкой от компании Redgate (это та компания, которая выпустила всем известные тулы .Net Reflector, SmartAssembly и прочие) получил бесплатную книгу «Under the Hood of .NET Memory Management». Пока что доступна только первая ее часть, но она довольно объемная и раскрывает многие аспекты менеджмента памяти. Самое вкусное обещают во второй части. Приятного скачивания (краткое содержание под катом):



Бонусом по первой ссылке, в том же архиве, идет книга по ANTS Memory Profiler

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

Хуки — это просто

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


Хуки — это технология перехвата вызовов функций в чужих процессах. Хуки, как и любая достаточно мощная технология, могут быть использованы как в благих целях (снифферы, аудио\видеограбберы, расширения функционала закрытого ПО, логирование, багфиксинг) так и со злым умыслом (трояны, кряки, кейлоггеры). О хуках уже не раз писали и на Хабре и не на Хабре. Но вот в чём беда — почему-то каждая статья о хуках буквально со второго абзаца начинает рассказывать о «таблице виртуальных функций», «архитектуре памяти» и предлагает к изучению огромные блоки ассемблерного кода. Известно, что каждая формула в тексте снижает количество читателей вдвое, а уж такие вещи — так и вовсе вчетверо. Поэтому нужна статья, которая расскажет о хуках просто. Под катом нет ассемблера, нет сложных терминов и буквально два десятка строк очень простого кода на С++. Если вы давно хотели изучить хуки, но не знали с чего начать — начните с этой статьи.
Читать дальше →

Сортировка писем по imap-папкам на почтовом сервере без использования sieve и иже с ними

Время на прочтение4 мин
Количество просмотров9.4K
Почта в своей конторе разрослась и наличие более чем 1 рабочего места у более чем 1 сотрудника начали требовать большего, нежели простейшая реализация мультидоменного почтового сервера на базе exim+teapop без использования mysql на обычных файликах. Главная причина изменений — постоянное вычищение спама и просто ненужных писем на каждом из рабочих мест по многу раз начало доставать, и было принято решение реализовать-таки почту по известной статье лиссяры "Связка exim и courier-imap". Самое главное, чего в ней не хватало из того, что требовалось, так это сортировщика писем по папкам. Для того, кто подписан на рассылки, весьма полезно раскладывать письма по требуемым каталогам, чтобы: а) не писать сортировщики в каждом клиенте; б) иметь такую же структуру папок при доступе к почте через веб, как и в почтовом клиенте.
Читать дальше →

Сборка библиотеки Microsoft Detours под Visual Studio 2008

Время на прочтение1 мин
Количество просмотров13K
О прекрасной библиотеке Microsoft Detours тут уже писали. Её возможности и правда впечатляют, есть только одно но: библиотеку нужно собирать из исходников (что вообще не характерно для библиотек на платформе Windows и тем более для продуктов Microsoft). Более того, внятную инструкцию как это сделать найти трудно (я так и не смог), а штатный make-файл при сборке с помощью Visual Studio 2008 выдаёт кучу ошибок. Собрав наконец Detours, я решил написать (для себя — на будущее) инструкцию по сборке. Если кому-то она сэкономит пару минут — буду рад.
Читать дальше →

Создание прокси-dll для запуска DirectDraw игр в окне

Время на прочтение5 мин
Количество просмотров20K
В продолжение темы расширения функциональности готовых программ хотелось бы рассказать об ещё одном способе изменения логики работы уже скомпилированной программы, который не требует делать изменений в самом исполняемом файле. Это может пригодиться при распространении вашей модификации в США, где прямое вмешательство в исполняемый файл строго осуждается. Речь пойдёт о создании крошечной прокси-dll (всего ≈4 килобайта) для подмены используемой приложением библиотеки на примере ddraw.dll.
Читать дальше →

Простой индикатор раскладки клавиатуры в курсоре на С++

Время на прочтение2 мин
Количество просмотров38K
Тема отображения текущей раскладки беспокоила хабрасообщество уже не раз. Я опробовал множество существующих решений, но по разным причинам они меня не устроили. Чтобы подобрать для себя наиболее удобный вариант отображения текущей раскладки, я написал небольшое приложение на C++, которое при нажатии на левый Shift отображает язык в системном курсоре редактирования текста. Менее 100 строк кода и около 4 килобайт в скомпилированном виде — на основе этого вы можете достаточно просто реализовать свой взгляд на то, как на самом деле должна выглядеть индикация текущей раскладки.
Читать дальше →

Учимся писать модуль ядра (Netfilter) или Прозрачный прокси для HTTPS

Время на прочтение19 мин
Количество просмотров34K
Эта статья нацелена на читателей, которые начинают или только хотят начать заниматься программированием модулей ядра Linux и сетевых приложений. А также может помочь разобраться с прозрачным проксированием HTTPS трафика.

Небольшое оглавление, чтобы Вы могли оценить, стоит ли читать дальше:
  1. Как работает прокси сервер. Постановка задачи.
  2. Клиент – серверное приложение с использованием неблокирующих сокетов.
  3. Написание модуля ядра с использованием библиотеки Netfilter.
  4. Взаимодействие с модулем ядра из пользовательского пространства (Netlink)

P.S. Для тех, кому только хочется посмотреть на прозрачный прокси-сервер для HTTP и HTTPS, достаточно настроить прозрачный прокси-сервер для HTTP, например, Squid с transparent портом 3128, и скачать архив с исходниками Shifter. Скомпилировать (make) и, после удачной компиляции, выполнить ./Start с правами root. При необходимости можно поправить настройки в shifter.h до компиляции.
Читать дальше →

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

Продолжение истории про переменные окружения, или подменяем PEB

Время на прочтение8 мин
Количество просмотров3.5K
Сегодня вечером впервые решил зарегестрироваться на Хабре, дабы отписать вот в этом топике о недочётах ilya314, но был предельно удивлён тем, что я оказывается не могу ничего откомментировать, поскольку не являюсь почётным хабропользователем. Какой ужас.

Поэтому я решил набросать код, дабы высказать свои соображения о проблеме дублирования данных в Сишный рантайм из PEB-a процесса.
Читать дальше →

История с передачей переменной окружения. Разные версии msvcrt, UAC

Время на прочтение2 мин
Количество просмотров3.1K
Возникла казалось бы простая задача – конфигурирование сторонней библиотеки через переменную окружения. В нашем процессе делаем следующее:
  • установить некую переменную окружения VAR=str
  • подгрузить библиотеку library.dll
  • вызвать функцию foo() этой библиотеки
Все работает, но вдруг выясняется, что на моей домашней машине библиотека перестает верно работать. Причем, если запускать с правами администратора, то по прежнему работает нормально.
Читать дальше →

Отладка драйверов под Windows: VirtualBox+WinDbg

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

Предисловие


Однажды мне понадобилось написать драйвер под Windows XP SP2. Сразу встал вопрос отладки. Уж очень не хотелось использовать мудреный SoftIce, ребутиться при кадждой ошибке или делать откаты. Поэтому было решено использовать виртуалку VirtualBox, которой я частенько пользуюсь и характеристиками которой вполне доволен, и отладчиком Windows Debugger от Microsoft. Через несколько часов в окошке WinDbg радостно замаячили строчки на Си, и было решено сделать «напоминалку», которая получилась неплохим «HowTo». Итак, начнем…
Читать дальше →

О замене стандартного /sbin/init

Время на прочтение4 мин
Количество просмотров13K
init — первый пользовательский процесс в Unix-подобных операционных системах
init — запускается непосредственно ядром системы.
init — является пра-родителем всех пользовательских (userspace) процессов системы.

Стандартный /sbin/init читает конфигурационный файл /etc/inittab, стартует систему и управляет системой используя несколько «уровней исполнения» (runlevels).

С помощью одноименного ключа init можно сказать ядру Linux использовать другой файл, вместо стандартного /sbin/init

Воспользуемся этой возможностью и добавим следующую конфигурацию в /boot/grub/menu.lst
title Linux kernel and custom init
root (hd0,1)
kernel /linux/vmlinuz-2.6.26-1-686 root=/dev/hda2 init=/linux/init
initrd /linux/initrd.img-2.6.26-1-686

Кто пользуется возможностью подменить процесс init? Иногда к этому прибегают разработчики встраиваемых систем — таким способом можно упростить разработку устройства и не тащить за собой всё окружение операционной системы.

В моём случае желание подменить init лежало в другой плоскости — хотелось проверить как поведёт себя процесс init системы Xameleon исполняемый Linux ядром. Желаете попробовать тоже?

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

Разработка функций RvaToRaw и RawToRva

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

Цель статьи


Целью этой статьи является желание автора показать некоторые нюансы по разработке функций RvaToRaw/RawToRva, которые являются важными для системных утилит работающих с исполнимыми файлами формата PE.

На кого нацелена статья?


  • Читатель знаком с форматом файлов «Portable Executable»
  • Читатель >= 1 раза писал парсер этого файла
  • Читатель отлично знает что такое «RvaToRaw»

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

Необычное использование генератора отчётов

Время на прочтение5 мин
Количество просмотров7.7K
На заре своей карьеры пришлось столкнуться с обслуживанием и написанием бухгалтерских программ и систем учёта. С тех пор, несмотря на то, что прошло 18 лет, стойко держалось неприятие всего, связанного с учётом и отчётами. И кто бы мог подумать, что судьба забросит меня в компанию, занимающуюся разработкой генератора отчётов. Всё моё естество тянулось (и продолжает тянуться) к системному программированию, а участие в разработке софта для генерации отчётов — наказание за грехи молодости. Собственно говоря, эта статья рассказывает о попытке «вырваться из клетки» и совместить несовместимое — системное программирование и генераторы отчётов.
Читать дальше →

Исправляем ACPI на Samsung N250

Время на прочтение8 мин
Количество просмотров16K
В этой статье я хотел бы описать типичные ошибки проектирования, найденные в BIOS современного нетбука, и методы их обнаружения, изучения и исправления.
Читать дальше →

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