Сегодня вечером впервые решил зарегестрироваться на Хабре, дабы отписать вот в
этом топике о недочётах
ilya314, но был предельно удивлён тем, что я оказывается не могу ничего откомментировать, поскольку не являюсь почётным
хабропользователем. Какой ужас.
Поэтому я решил набросать код, дабы высказать свои соображения о проблеме дублирования данных в Сишный рантайм из PEB-a процесса.
Возникла казалось бы простая задача – конфигурирование сторонней библиотеки через переменную окружения. В нашем процессе делаем следующее:
- установить некую переменную окружения VAR=str
- подгрузить библиотеку library.dll
- вызвать функцию foo() этой библиотеки
Все работает, но вдруг выясняется, что на моей домашней машине библиотека перестает верно работать. Причем, если запускать с правами администратора, то по прежнему работает нормально.
Предисловие
Однажды мне понадобилось написать драйвер под Windows XP SP2. Сразу встал вопрос отладки. Уж очень не хотелось использовать мудреный SoftIce, ребутиться при кадждой ошибке или делать откаты. Поэтому было решено использовать виртуалку VirtualBox, которой я частенько пользуюсь и характеристиками которой вполне доволен, и отладчиком Windows Debugger от Microsoft. Через несколько часов в окошке WinDbg радостно замаячили строчки на Си, и было решено сделать «напоминалку», которая получилась неплохим «HowTo». Итак, начнем…
12 октября 2011, 09:07
87
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 ядром. Желаете попробовать тоже?
28 сентября 2011, 02:32
7
Цель статьи
Целью этой статьи является желание автора показать некоторые нюансы по разработке функций RvaToRaw/RawToRva, которые являются важными для системных утилит работающих с исполнимыми файлами формата PE.
Article-limitation
- Читатель знаком с форматом файлов «Portable Executable»
- Читатель >= 1 раза писал парсер этого файла
- Читатель отлично знает что такое «RvaToRaw»
27 сентября 2011, 17:29
2
На заре своей карьеры пришлось столкнуться с обслуживанием и написанием бухгалтерских программ и систем учёта. С тех пор, несмотря на то, что прошло 18 лет, стойко держалось неприятие всего, связанного с учётом и отчётами. И кто бы мог подумать, что судьба забросит меня в компанию, занимающуюся разработкой генератора отчётов. Всё моё естество тянулось (и продолжает тянуться) к системному программированию, а участие в разработке софта для генерации отчётов — наказание за грехи молодости. Собственно говоря, эта статья рассказывает о попытке «вырваться из клетки» и совместить несовместимое — системное программирование и генераторы отчётов.
22 сентября 2011, 14:28
2
В этой статье я хотел бы описать типичные ошибки проектирования, найденные в BIOS современного нетбука, и методы их обнаружения, изучения и исправления.
14 сентября 2011, 15:36
35
Этот код написан с целью самообучения. Чтоб закрепить материал я решил немного прокомментировать проделанную работу.
Сразу скажу: на компилируемых языках не писал.
Что делает приложение
[к] — клиент
[c] — сервер
1. По установленному TCP соединению, [к] передает публичный ключ rsa.
2. При помощи принятого публичного ключа, [c] шифрует и отправляет сообщения [к]
3. [к] расшифровывает и выводит сообщения.
Вот как это выглядит в консоли:
16 августа 2011, 23:41
35
Если вы когда-либо изучали язык Си или сталкивались с новой средой разработки, то наверняка хотя бы раз писали простейшее приложение, выводящее «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
Элементарно? До тех пор, пока вы не решите собрать и запустить это приложение, например, под управлением своей собственноручно написанной операционной системы. Далее я подробно расскажу об этом процессе и держу пари, что не каждый найдёт в себе силы дочитать статью до конца.
Приветствую.
Сразу предупрежу, что пост полон личных соображений автора, которые могут быть ошибочными, да и тема эта обширна и интересна, так что обсуждение по теме в комментариях приветствуется.
Только сейчас осознал, что во-первых, не рассказал я многого, что полезно было бы знать перед тем, как писать код. К тому же есть намного более хорошие пути для реализации многозадачности, чем я упоминал в прошлом выпуске.
Также постараюсь последовать многочисленным советам и систематизировать содержание статей.