Форум программистов, компьютерный форум CyberForum.ru
Наши страницы

C++ и WinAPI

Войти
Регистрация
Восстановить пароль
 
zombivadim
8 / 8 / 1
Регистрация: 03.04.2016
Сообщений: 198
#1

Брожение по структурам PE файла - C++ WinAPI

08.01.2017, 21:18. Просмотров 308. Ответов 2
Метки нет (Все метки)

Увлекся изучением структур PE файла. Не знаю в теме ли пишу. Вроде все получалось до определенного момента, пока не дошел до таблиц. В данном коде задачей было вывести количество ресурсов в файле.
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
    HANDLE File = CreateFile("D:\\PE.exe", GENERIC_READ, FILE_SHARE_READ, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL); //Открываем файл
    HANDLE Mapping = CreateFileMapping(File, 0, PAGE_READONLY, 0, 0, 0); //Создаем адресное пространство из файла//PAGE_READONLY
    LPVOID WinINI = MapViewOfFile(Mapping, FILE_MAP_READ, 0, 0, 0); //Резервируем регион//FILE_MAP_READ
 
    PIMAGE_DOS_HEADER pDOSHead;
    pDOSHead = (PIMAGE_DOS_HEADER)WinINI;
    if (pDOSHead->e_magic == IMAGE_DOS_SIGNATURE)
    {
        cout << "Найден ДОС заголовок" << endl;
 
        PIMAGE_NT_HEADERS pPEHeader;
        pPEHeader = (PIMAGE_NT_HEADERS)((DWORD)WinINI + pDOSHead->e_lfanew);//получаем смещение до PIMAGE_NT_HEADERS
        if (pPEHeader->Signature == IMAGE_NT_SIGNATURE)
        {
 
            PIMAGE_FILE_HEADER FileHeader;
            FileHeader = (PIMAGE_FILE_HEADER)&pPEHeader->FileHeader;
    
            PIMAGE_OPTIONAL_HEADER OptionHeader;
            OptionHeader = (PIMAGE_OPTIONAL_HEADER)&pPEHeader->OptionalHeader;
 
            if (OptionHeader->Magic == IMAGE_NT_OPTIONAL_HDR_MAGIC)//IMAGE_NT_OPTIONAL_HDR32_MAGIC
            {
 
                PIMAGE_DATA_DIRECTORY  QDATA_DIRECTORY;
                QDATA_DIRECTORY = (PIMAGE_DATA_DIRECTORY)&OptionHeader->DataDirectory [IMAGE_DIRECTORY_ENTRY_RESOURCE];
 
                PIMAGE_RESOURCE_DIRECTORY QSECTION_HEADER;
                QSECTION_HEADER = (PIMAGE_RESOURCE_DIRECTORY)((DWORD)WinINI + QDATA_DIRECTORY->VirtualAddress);//получаем смещение до PIMAGE_RESOURCE_DIRECTORY
                cout << QSECTION_HEADER->NumberOfNamedEntries << "\t" << "NumberOfNamedEntries " << endl;
                cout << QSECTION_HEADER->NumberOfIdEntries << "\t" << "NumberOfIdEntries " << endl;
                //поля, NumberOfNamedEntries и NumberOfIdEntries, используемые для указания количества элементов, содержащихся в каталоге.
            }
 
 
        }
    }
 
    UnmapViewOfFile(WinINI);
    CloseHandle(Mapping);
    CloseHandle(File);
В итоге получаю какие то постоянные но не осмысленные числа. Запутался со смещениями, правильно ли я получил значения до PIMAGE_RESOURCE_DIRECTORY?
0
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
08.01.2017, 21:18
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Брожение по структурам PE файла (C++ WinAPI):

Задание по структурам и классам - C++
Есть вот такой код: #include &quot;stdafx.h&quot; #include &lt;iostream&gt; #include &lt;iomanip&gt; #include &lt;conio.h&gt; #include &lt;string.h&gt; #include...

программа по структурам - C++
помогите написать программу В файл base.txt поместить информацию о писателях и их произведениях (20…30 наименований), например: ...

Задачка по структурам - C++
Добрый вечер! Есть такая задачка... С помощью структуры соорудить что-то типа базы данных. Три поля (имя,фамилия, возраст).Ввод с...

Курсовая по структурам - C++
Подскажите какую-нибудь интересную тему для курсовой. Главная тема сема списки и структуры , можно с уклоном на тему безопасности. Спасибо

вопрос по структурам - C++
Я начал писать программу на следующию задачу Описать структуру с именем STUDENT, содержащую следующие поля: -Фамилия и инициалы -Номер...

Программа по структурам! - C++
У меня такая задача: Ввести несколько структур типа «Товары на складе» с полями { название товара закупочная цена товарная...

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
zombivadim
8 / 8 / 1
Регистрация: 03.04.2016
Сообщений: 198
14.01.2017, 01:20  [ТС] #2
Видимо мало кто разбирается в этом к сожалению, большому!!
0
gazlan
3131 / 1906 / 285
Регистрация: 27.08.2010
Сообщений: 5,132
Записей в блоге: 1
14.01.2017, 15:24 #3
В сети выложены десятки библиотек с открытым кодом для работы с PE. Можете начать с Updated PEDUMP.
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
14.01.2017, 15:24
Привет! Вот еще темы с ответами:

влпрос по структурам - C++
есть код #include &lt;stdio.h&gt; #include &lt;conio.h&gt; #include &lt;locale.h&gt; #include &lt;malloc.h&gt; struct data { float key; float...

Вопрос по структурам - C++
Насколько я знаю можно заполнить структуру &quot;наложив её на память&quot;, например struct A { int a; char b; char c; } ...

проги по структурам на С++ - C++
1)даны координаты трех точек, проверить лежат ли точки на одной прямой, если лежат, то определить является ли какая-либо из точек серединой...

задания по структурам - C++
помогите пожалуйста новичку... буду ОЧЕНЬ благодарен


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru