Форум программистов, компьютерный форум, киберфорум
C/C++: WinAPI
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 5.00/7: Рейтинг темы: голосов - 7, средняя оценка - 5.00
21 / 21 / 3
Регистрация: 29.04.2012
Сообщений: 214

Dll модули и соответствующих функции из IMAGE_DIRECTORY_ENTRY_IMPORT для PE-файла шалят

21.08.2014, 10:03. Показов 1479. Ответов 2
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Доброе утро.

Имеется путь к исполняемому файлу notepad.exe.
Необходимо вывести на экран dll модули и соответствующие функции.

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
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
 int InitWork()
{
    LPCWSTR fileName = L"C:\\Windows\\System32\\notepad.exe";
 
    PEinfo.handle = CreateFile(fileName, GENERIC_READ, 0, 0, OPEN_EXISTING,  FILE_ATTRIBUTE_NORMAL, 0); 
 
    /*....*/
    PVOID pVirtual = VirtualAlloc(NULL, size, MEM_COMMIT, PAGE_READWRITE);
    /*...*/
    // Get pointer to headers
    PEinfo. pNTHeader = (PIMAGE_NT_HEADERS)(PCHAR(pVirtual) + PEinfo.pDOSHead->e_lfanew);   
    PEinfo.pSech = IMAGE_FIRST_SECTION(PEinfo.pNTHeader);
    PEinfo.OptHeader32 = (IMAGE_OPTIONAL_HEADER32) PEinfo.pNTHeader->OptionalHeader; 
 
    WCHAR* funcname = (wchar_t*)malloc(sizeof(wchar_t));
 
    size_t i=0;
    LPSTR libname = (char*)malloc(sizeof(char));
 
    if(PEinfo.OptHeader32.DataDirectory[IMAGE_DIRECTORY_ENTRY_IMPORT].Size != 0)
    {
        PEinfo.pImportDescriptor = (PIMAGE_IMPORT_DESCRIPTOR)((DWORD_PTR)pVirtual +\
            Rva2Offset(PEinfo.OptHeader32.DataDirectory[IMAGE_DIRECTORY_ENTRY_IMPORT].VirtualAddress,PEinfo.pSech,PEinfo.pNTHeader));
 
        printf("DLLName.FunctionName\n");
 
        while(PEinfo.pImportDescriptor->Name != NULL)
        {           
            //Get the name of each DLL
            libname = (PCHAR)((DWORD_PTR)pVirtual + Rva2Offset(PEinfo.pImportDescriptor->Name,PEinfo.pSech,PEinfo.pNTHeader));
 
            funcname = ANSItoUnicode(libname, funcname);
 
            ImportFuncList(funcname);
            PEinfo.pImportDescriptor++;
            i++;
        }
    }
    return 0;
}
 
/*Convert Virtual Address to File Offset */
DWORD Rva2Offset(DWORD rva,PIMAGE_SECTION_HEADER psh,PIMAGE_NT_HEADERS pnt)
{
    size_t i = 0;
    PIMAGE_SECTION_HEADER pSeh;
    if(rva == 0)
    {
        return (rva);
    }
    pSeh = psh;
    for(i = 0; i < pnt->FileHeader.NumberOfSections; i++)
    {
        if(rva >= pSeh->VirtualAddress && rva < pSeh->VirtualAddress +
            pSeh->Misc.VirtualSize)
        {
            break;
        }
        pSeh++;
    }
    return (rva - pSeh->VirtualAddress + pSeh->PointerToRawData);
} 
 
int ImportFuncList(LPWSTR dllName)
{
    PEinfo.DLLModule = NULL;
    PEinfo.DLLModule = GetModuleHandle(dllName);
 
    if (PEinfo.DLLModule == NULL)
    {
        wprintf(L"Error Load %s\n", dllName);
        return 1;
    }
 
}
Результат:
ADVAPI32.dll.
KERNEL32.dll.
GDI32.dll.
USER32.dll.
msvcrt.dll.
Error Load COMDLG32.dll
Error Load SHELL32.dll
Error Load WINSPOOL.DRV
Error Load ole32.dll
Error Load SHLWAPI.dll
Error Load COMCTL32.dll
Error Load OLEAUT32.dll
ntdll.dll.
Error Load VERSION.dll


Что за беспредел? Почему такая выборочность?
0
Лучшие ответы (1)
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
21.08.2014, 10:03
Ответы с готовыми решениями:

Вывести на экран значение функции для соответствующих значений x,y,z
Составить программу для вычисления значений функции для заданных значений переменной x и y(задаются с клавиатуры), постоянной z. Вывести...

.dll модули
Всем привет! Как дела? Я вот сижу в гугле и наткнулся я на одном форуме на тему, которая вызвала у меня бурный интерес! Там писали мол dll...

Библиотека Dll, модули и классы!
Ребята, всем привет! Предупреждаю сразу: я новичок в программировании, поэтому не кидайтесь помидорами. А вопрос у меня следующий: есть dll...

2
Maniac
Эксперт С++
 Аватар для ISergey
1465 / 966 / 160
Регистрация: 02.01.2009
Сообщений: 2,820
Записей в блоге: 1
21.08.2014, 11:33
Лучший ответ Сообщение было отмечено SatanaXIII как решение

Решение

Цитата Сообщение от Ilyaa Посмотреть сообщение
Что за беспредел? Почему такая выборочность?
C
1
GetModuleHandle(dllName);
Наверно они попросту не загружены в память твоего процесса.
1
21 / 21 / 3
Регистрация: 29.04.2012
Сообщений: 214
21.08.2014, 12:28  [ТС]
Да, это я уже додумался. Спасибо.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
21.08.2014, 12:28
Помогаю со студенческими работами здесь

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

Модули. Ассоциативный массив. (DLL, EXE)
Добрый день, нужна помощь в следующем задании: написать программу. программа состоит из двух модулей (не понимаю, как они...


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

Или воспользуйтесь поиском по форуму:
3
Ответ Создать тему
Новые блоги и статьи
SDL3 для Desktop (MinGW): Рисуем цветные прямоугольники с помощью рисовальщика SDL3 на Си и C++
8Observer8 17.03.2026
Содержание блога Финальные проекты на Си и на C++: finish-rectangles-sdl3-c. zip finish-rectangles-sdl3-cpp. zip
Символические и жёсткие ссылки в Linux.
algri14 15.03.2026
Существует два типа ссылок — символические и жёсткие. Ссылка в Linux — это запись в каталоге, которая может указывать либо на inode «файла-ИСТОЧНИКА», тогда это будет «жёсткая ссылка» (hard link),. . .
[Owen Logic] Поддержание уровня воды в резервуаре количеством включённых насосов: моделирование и выбор регулятора
ФедосеевПавел 14.03.2026
Поддержание уровня воды в резервуаре количеством включённых насосов: моделирование и выбор регулятора ВВЕДЕНИЕ Выполняя задание на управление насосной группой заполнения резервуара,. . .
делаю науч статью по влиянию грибов на сукцессию
anaschu 13.03.2026
прикрепляю статью
SDL3 для Desktop (MinGW): Создаём пустое окно с нуля для 2D-графики на SDL3, Си и C++
8Observer8 10.03.2026
Содержание блога Финальные проекты на Си и на C++: hello-sdl3-c. zip hello-sdl3-cpp. zip Результат:
Установка CMake и MinGW 13.1 для сборки С и C++ приложений из консоли и из Qt Creator в EXE
8Observer8 10.03.2026
Содержание блога MinGW - это коллекция инструментов для сборки приложений в EXE. CMake - это система сборки приложений. Здесь описаны базовые шаги для старта программирования с помощью CMake и. . .
Как дизайн сайта влияет на конверсию: 7 решений, которые реально повышают заявки
Neotwalker 08.03.2026
Многие до сих пор воспринимают дизайн сайта как “красивую оболочку”. На практике всё иначе: дизайн напрямую влияет на то, оставит человек заявку или уйдёт через несколько секунд. Даже если у вас. . .
Модульная разработка через nuget packages
DevAlt 07.03.2026
Сложившийся в . Net-среде способ разработки чаще всего предполагает монорепозиторий в котором находятся все исходники. При создании нового решения, мы просто добавляем нужные проекты и имеем. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru