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

индекс
203,75

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

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

Поэтому я решил набросать код, дабы высказать свои соображения о проблеме дублирования данных в Сишный рантайм из PEB-a процесса.
+12
2 февраля 2012, 16:03
26

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

Возникла казалось бы простая задача – конфигурирование сторонней библиотеки через переменную окружения. В нашем процессе делаем следующее:
  • установить некую переменную окружения VAR=str
  • подгрузить библиотеку library.dll
  • вызвать функцию foo() этой библиотеки
Все работает, но вдруг выясняется, что на моей домашней машине библиотека перестает верно работать. Причем, если запускать с правами администратора, то по прежнему работает нормально.
+17
23 января 2012, 01:40
16

Отладка драйверов под Windows: VirtualBox+WinDbg из песочницы

Предисловие


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

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

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 ядром. Желаете попробовать тоже?

+3
28 сентября 2011, 02:32
7

Разработка функций RvaToRaw и RawToRva из песочницы

Цель статьи


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

Article-limitation


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

+4
27 сентября 2011, 17:29
2

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

На заре своей карьеры пришлось столкнуться с обслуживанием и написанием бухгалтерских программ и систем учёта. С тех пор, несмотря на то, что прошло 18 лет, стойко держалось неприятие всего, связанного с учётом и отчётами. И кто бы мог подумать, что судьба забросит меня в компанию, занимающуюся разработкой генератора отчётов. Всё моё естество тянулось (и продолжает тянуться) к системному программированию, а участие в разработке софта для генерации отчётов — наказание за грехи молодости. Собственно говоря, эта статья рассказывает о попытке «вырваться из клетки» и совместить несовместимое — системное программирование и генераторы отчётов.
+5
22 сентября 2011, 14:28
2

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

В этой статье я хотел бы описать типичные ошибки проектирования, найденные в BIOS современного нетбука, и методы их обнаружения, изучения и исправления.
+78
14 сентября 2011, 15:36
35

Go Language. Небольшое клиент-серверное приложение из песочницы

Этот код написан с целью самообучения. Чтоб закрепить материал я решил немного прокомментировать проделанную работу.
Сразу скажу: на компилируемых языках не писал.

Что делает приложение


[к] — клиент
[c] — сервер
1. По установленному TCP соединению, [к] передает публичный ключ rsa.
2. При помощи принятого публичного ключа, [c] шифрует и отправляет сообщения [к]
3. [к] расшифровывает и выводит сообщения.

Вот как это выглядит в консоли:
image
+19
16 августа 2011, 23:41
35

Изучаем микроядро L4 и пишем приложение «Hello world» для системы Xameleon

Если вы когда-либо изучали язык Си или сталкивались с новой средой разработки, то наверняка хотя бы раз писали простейшее приложение, выводящее «Hello world». Итак, один из возможных вариантов на языке Си:

#include <stdio.h>
int main(int argc, char * argv[], char * envp[])
{
puts("Hello world!");
return 0;
}

Сохраним этот код в файл «hello.c» и с помощью компилятора gcc cоберём исполняемый файл используя следующую команду:
gcc hello.c -o hello

В результате, если на вашей системе установлен компилятор, файлы заголовков и библиотеки, получим исполняемый файл hello. Выполним его:
./hello

Элементарно? До тех пор, пока вы не решите собрать и запустить это приложение, например, под управлением своей собственноручно написанной операционной системы. Далее я подробно расскажу об этом процессе и держу пари, что не каждый найдёт в себе силы дочитать статью до конца.
+36
20 июня 2011, 04:24
24

Память и задачи

Приветствую.
Сразу предупрежу, что пост полон личных соображений автора, которые могут быть ошибочными, да и тема эта обширна и интересна, так что обсуждение по теме в комментариях приветствуется.
Только сейчас осознал, что во-первых, не рассказал я многого, что полезно было бы знать перед тем, как писать код. К тому же есть намного более хорошие пути для реализации многозадачности, чем я упоминал в прошлом выпуске.
Также постараюсь последовать многочисленным советам и систематизировать содержание статей.
+6
19 июня 2011, 05:49
8