Реализация загрузчика PE файлов в Windows

Продолжается погружение в запутанный мир системного программирования. Это вторая вторая часть и сегодня мы реализуем загрузчик исполняемых файлов Windows в точности по этому алгоритму.

Так как я сам являюсь гордым пользователем Linux Ubuntu, вся работа выполнена с помощью виртуальной машины. И вообще говоря, если вы занимаетесь системным программированием или разработкой драйверов, никогда не тестируйте свой код на реальной машине. Думаю тут без комментариев все понятно. Итак, виртуальная машина с win, язык низкого уровня и полный запас энтузиазма, поехали.

Система: Windows XP SP2
Язык программирования: C

читать далее «Реализация загрузчика PE файлов в Windows»

Что меня больше всего раздражает в блогах

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

читать далее «Что меня больше всего раздражает в блогах»

Быстрая шпаргалка: откровение про eof()

Проблема: в программе на C++ из файла считывается лишняя информация, либо последняя строка считывается дважды.

Пример кода

while(!file.eof()) {
    int a;
    file >> a;

    cout << a;
}

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

while(true) {
    int a;
    file >> a;

    if(file.eof()) {
        break;
    }
    
    cout << a;
}

 

Мое мнение о ловле покемонов в храме

Лето 2016, все ловят покемонов

Я совершенно спокойно относился к буму с покемонами. Ну новости, ну ловят, пусть ловят. Один раз появилось желание посмотреть ролик на ютубе, но я отвлекся и благополучно про него забыл. Так продолжалось до тех пор, пока не вмешались наши правоохранительные органы. Да, правоохранительные, те самые, которые должны защищать наши с вами права.

Дело вот в чем

читать далее «Мое мнение о ловле покемонов в храме»

Алгоритм загрузки PE файлов в Windows

Привет всем, кто забрел на эту заметку. Мной будет затронута не самая любимая тема: системное программирование. Дело в том, что волей судьбы я с ним столкнулся, в университете, если быть точнее. Пришлось знатно покопаться в самых низких слоях программирования, алгоритм разгрузки pe файлов оттуда. Надеюсь, что кому-нибудь пригодится мой опыт в этом деле, что вряд ли. Но тем не менее, я им поделюсь.

Если вам не интересен краткий экскурс в теорию работы pe загрузчика, то добро пожаловать сразу к реализации загрузчика PE файлов на C. Конечно же на Си, никаких скриптов, абстракций и прочего высокоуровнего кайфа, только хардкор!

Что такое PE файл

PE(Portable Executable) это основной формат исполняемых файлов для операционных систем семейства Windows NT. Используется для представления исполняемых файлов (.exe), динамических библиотек (.dll) и драйверов (.sys). Является расширением формата исполняемых файлов для DOS, то есть PE файл является корректной программой для системы DOS, но это нам не интересно. Мы будем запускать PE файлы под Windows собственноручно написанным загрузчиком.

Зачем? Для разных целей. Например, мне просто дали такое задание в университете для затравочки и подготовки к изучению методов взлома и защиты программных данных. Кто-то пишет всякие читы, трейнеры для игр(это очень плохо, я их осуждаю). Есть и такие, для кого это просто хобби, как писать на ассемблере. В любом случае, сейчас я вкратце расскажу последовательность действий операционной системы при загрузке pe файла.

Алгоритм загрузки PE файла в Windows

читать далее «Алгоритм загрузки PE файлов в Windows»