Форум программистов, компьютерный форум, киберфорум
Visual C++
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.78/9: Рейтинг темы: голосов - 9, средняя оценка - 4.78
 Аватар для Зеленый1
2 / 2 / 2
Регистрация: 21.04.2011
Сообщений: 100

dll импортируемые функции

06.05.2011, 20:24. Показов 1960. Ответов 1
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Подскажите, как можно получить из dll имена импортируемых функций?
0
Лучшие ответы (1)
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
06.05.2011, 20:24
Ответы с готовыми решениями:

Импортируемые классы idea
вот допустим я импортировал класс стрингбилдер или ещё какой... могу ли я из среды разработки посмотреть как класс выглядет глянуть на его...

Maya 2016: Импортируемые элементы под углом в 90
Всем привет! Такая проблема: всё что импортируется или создаётся в сцене, появляется с наклоном в 90 градусов. Как с этим быть?

Почему импортируемые модули подсвечиваются красным, хотя код исполняется
Установил библиотеку PyQt5 в PyCharm. View=>Tool Windows=>Terminal. Код исполняется, но импортируемые модули подсвечиваются красным....

1
 Аватар для Зеленый1
2 / 2 / 2
Регистрация: 21.04.2011
Сообщений: 100
08.05.2011, 16:56  [ТС]
Лучший ответ Сообщение было отмечено Зеленый1 как решение

Решение

Сам нашел 2 варианта, может кому пригодится
Вариант 1
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
#include <stdio.h>
#include <windows.h>
void ShowImportFunction()
{
BYTE *pImage = (BYTE*)GetModuleHandle(NULL);
IMAGE_DOS_HEADER *idh;
IMAGE_OPTIONAL_HEADER *ioh;
IMAGE_SECTION_HEADER *ish;
IMAGE_IMPORT_DESCRIPTOR *iid;
IMAGE_IMPORT_BY_NAME *ibn;
IMAGE_THUNK_DATA *thunk;
int i = 0;
DWORD j = 0;
char lib[] = "Импортируемая библиотека: ";
HANDLE file = CreateFile(TEXT("FunctionList.txt"),GENERIC_READ|GENERIC_WRITE,
0,0,CREATE_ALWAYS,FILE_ATTRIBUTE_NORMAL|FILE_FLAG_RANDOM_ACCESS,0);
idh = (IMAGE_DOS_HEADER*)pImage;
ioh = (IMAGE_OPTIONAL_HEADER*)
(pImage + idh->e_lfanew + 4 +
sizeof(IMAGE_FILE_HEADER));
ish = (IMAGE_SECTION_HEADER*)((DWORD)ioh + sizeof(IMAGE_OPTIONAL_HEADER));
for(i = 0; i < 16; i++)
if(strcmp((char*)(ish + i)->Name, ".idata") == 0)
break;
iid =
(IMAGE_IMPORT_DESCRIPTOR*)(pImage +(ish + i)->VirtualAddress);
while(iid->Name)
{
WriteFile(file,lib,strlen(lib)+1, &j,0);
WriteFile(file,
strcat((char*)(pImage + iid->Name),"\x0D\x0A"),
strlen((char*)(pImage + iid->Name))+2, &j,0);
thunk =
(IMAGE_THUNK_DATA*)(pImage + (DWORD)iid->Characteristics);
while(thunk->u1.AddressOfData)
{
ibn = (IMAGE_IMPORT_BY_NAME*)
(pImage + thunk->u1.AddressOfData);
WriteFile(file,strcat((char*)(ibn->Name),"\x0D\x0A"),
strlen((char*)(ibn->Name)) + 2, &j, 0);
thunk = (IMAGE_THUNK_DATA*)((DWORD)
thunk+sizeof(IMAGE_THUNK_DATA));
}
iid++;
}
CloseHandle(file);
}
int main()
{
    ShowImportFunction();
    return 0;
}
Вариант 2
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
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
#include <windows.h>
#include <stdio.h>
#include <iostream>
PIMAGE_SECTION_HEADER GetEnclosingSectionHeader(DWORD rva, PIMAGE_NT_HEADERS pNTHeader)
{
    PIMAGE_SECTION_HEADER section = IMAGE_FIRST_SECTION(pNTHeader);
    for (unsigned i=0; i<pNTHeader->FileHeader.NumberOfSections; i++, section++)
    {
        if ((rva >= section->VirtualAddress) && (rva < (section->VirtualAddress + section->Misc.VirtualSize)))
        return section;
    }
    return 0;
}
void DumpFile(LPSTR filename)
{
    HANDLE hFile;
    HANDLE hFileMapping;
    LPVOID lpFileBase;
    ULONG ulSize;
    PIMAGE_THUNK_DATA thunk;
    PIMAGE_IMPORT_BY_NAME pOrdinalName;
    PIMAGE_DOS_HEADER pDOSHeader;
    PIMAGE_NT_HEADERS pNTHeader;
    PIMAGE_IMPORT_DESCRIPTOR importDesc;
    PIMAGE_SECTION_HEADER pSection;
//открываем файл
    hFile = CreateFile(filename, GENERIC_READ, FILE_SHARE_READ, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, 0);
    if (hFile == INVALID_HANDLE_VALUE) return;
//отображаем файл в память
    hFileMapping = CreateFileMapping(hFile, NULL, PAGE_READONLY, 0, 0, NULL);
    if (!hFileMapping)
    {
        CloseHandle(hFile);
        return;
    }
// преобразовать в указатель
    lpFileBase = MapViewOfFile(hFileMapping, FILE_MAP_READ, 0, 0, 0);
    if (!lpFileBase)
    {
        CloseHandle(hFileMapping);
    CloseHandle(hFile);
    return;
    }
    printf("Dump of file %s:\n", filename);
//указатель на DOS-заголовок
    pDOSHeader = (PIMAGE_DOS_HEADER)lpFileBase;
    if (pDOSHeader->e_magic != IMAGE_DOS_SIGNATURE) return;
//находим адрес NT заголовка
    pNTHeader = (PIMAGE_NT_HEADERS)((DWORD)pDOSHeader + pDOSHeader->e_lfanew);
    if (pNTHeader->Signature != IMAGE_NT_SIGNATURE) return;
//RVA-адрес таблицы импорта
    int importsStartRVA = pNTHeader-> OptionalHeader.DataDirectory[IMAGE_DIRECTORY_ENTRY_IMPORT].VirtualAddress;
    if (!importsStartRVA) return;
//определяем адрес секции
    pSection = GetEnclosingSectionHeader(importsStartRVA, pNTHeader);
    if (!pSection) return;
    int delta = pSection->VirtualAddress - pSection->PointerToRawData;
    importDesc = (PIMAGE_IMPORT_DESCRIPTOR) (importsStartRVA - delta +(DWORD)lpFileBase);
//перебираем список dll
    while (importDesc->TimeDateStamp || importDesc->Name)
    {
//название dll
        printf("%s\n", (PBYTE)(importDesc->Name) - delta + (DWORD)lpFileBase);
//RVA-смещение на массив указателей на функции
        thunk = (PIMAGE_THUNK_DATA)importDesc->Characteristics;
        if (!thunk) thunk = (PIMAGE_THUNK_DATA)importDesc->FirstThunk;
        thunk = (PIMAGE_THUNK_DATA)( (PBYTE)thunk - delta + (DWORD)lpFileBase);
//перебираем функции
        while (thunk->u1.AddressOfData)
        {
            if (!(thunk->u1.Ordinal & IMAGE_ORDINAL_FLAG))
            {
                pOrdinalName = (PIMAGE_IMPORT_BY_NAME)thunk->u1.AddressOfData;
                pOrdinalName = (PIMAGE_IMPORT_BY_NAME)((PBYTE)pOrdinalName  +(DWORD)lpFileBase-delta);
//выводим имя функции
                printf(" %s\n", pOrdinalName->Name);
            }
            thunk++;
        }
        importDesc++;
    }       
    UnmapViewOfFile(lpFileBase);
    CloseHandle(hFileMapping);
    CloseHandle(hFile);
}
int main(int argc, char *argv[])
{
    argv[1]="C:\\Windows\\system32\\GDI32.dll"; DumpFile( argv[1] );
    getchar();
}
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
08.05.2011, 16:56
Помогаю со студенческими работами здесь

Вызов функции из dll. Dll не определена в коде и подключается программно
Я написал простую функцию которая возвращает негатив bitmap'а Function Negative(ByVal Bmp As Bitmap) Dim Bmp2 As New...

Inject dll, а также вызов функции из этой же dll
Всем привет, заинжектить dll в другой процесс получилось, но еще необходимо вызвать функцию в этой длл, каким образом это реализовать? ...

Вызов функции DLL VB.NET в DLL C++
Как вызывать функции dll VB.NET через dll С++, которая приинжекчена к процессу проводника?

Вызов программой, написанной на С++, функции из dll, написанной на Assembler (явное подключение dll)
Доброго времени суток!Задали лабораторную работу: программа, написанная на с++ должна подключать dll, написанную на Assembler и вызывать...

Ошибка об отсутствии MSVCP140D.dll, ucrtbased.dll, CONCRT140D.dll, VCRUNTIME140D.dll
Добрый день, товарищи. Возникла проблема. Делаю программу с использованием openCV 3.1 на Visual Studio 2013. При компиляции выдает ошибку...


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

Или воспользуйтесь поиском по форуму:
2
Ответ Создать тему
Новые блоги и статьи
Хочу заставить корпорации вкладываться в здоровье сотрудников: делаю мат модель здравосохранения
anaschu 22.03.2026
e7EYtONaj8Y Z4Tv2zpXVVo https:/ / github. com/ shumilovas/ med2. git
1С: Программный отбор элементов справочника по группе
Maks 22.03.2026
Установка программного отбора элементов справочника "Номенклатура" из модуля формы документа. В качестве фильтра для отбора справочника служит группа номенклатуры. Отбор по наименованию группы. . .
Как я обхитрил таблицу Word
Alexander-7 21.03.2026
Когда мигает курсор у внешнего края таблицы, и нам надо перейти на новую строку, а при нажатии Enter создается новый ряд таблицы с ячейками, то мы вместо нервных нажатий Энтеров мы пишем любые буквы. . .
Krabik - рыболовный бот для WoW 3.3.5a
AmbA 21.03.2026
без регистрации и смс. Это не торговля, приложение не содержит рекламы. Выполняет свою непосредственную задачу - автоматизацию рыбалки в WoW - и ничего более. Однако если админы будут против -. . .
1С: Программный отбор элементов справочника по значению перечисления
Maks 21.03.2026
Установка программного отбора элементов справочника "Сотрудники" из модуля формы документа. В качестве фильтра для отбора служит значение перечислений. / / Событие "НачалоВыбора" реквизита на форме. . .
Переходник USB-CAN-GPIO
Eddy_Em 20.03.2026
Достаточно давно на работе возникла необходимость в переходнике CAN-USB с гальваноразвязкой, оный и был разработан. Однако, все меня терзала совесть, что аж 48-ногий МК используется так тупо: просто. . .
Оттенки серого
Argus19 18.03.2026
Оттенки серого Нашёл в интернете 3 прекрасных модуля: Модуль класса открытия диалога открытия/ сохранения файла на Win32 API; Модуль класса быстрого перекодирования цветного изображения в оттенки. . .
SDL3 для Desktop (MinGW): Рисуем цветные прямоугольники с помощью рисовальщика SDL3 на Си и C++
8Observer8 17.03.2026
Содержание блога Финальные проекты на Си и на C++: finish-rectangles-sdl3-c. zip finish-rectangles-sdl3-cpp. zip
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru