Анализ информации из DLL

Модераторы: Hawk, Romeo, Absurd, DeeJayC, WinMain

Ответить
Den
Сообщения: 62
Зарегистрирован: 09 сен 2004, 15:10

Доброе время суток!

DLL - библиотека типов (является хранилищем COM объектов). В DLL необходимо выяснить типы аргументов четырех ф-ций (ф-ции я вижу через Depends). Пишу программку используя:

Код: Выделить всё

CoInitialize(NULL);
CraphmatFile GraphmatFile;
BOOL res = GraphmatFile.CreateDispatch("Graphan.GraphmatFile");
if(res)
{
     GraphmatFile.LoadFileToGraphan("C:\\graphan.dll");

      и т.д.
}
CoUninitialize();
В диалоговом окне в EditBox следующая информация, вернее часть:

Код: Выделить всё

0 0 BEG DOC MZ                              0 2 LLE AA                                2 1 PUN                                3 1 PUN CLS                                4 1 DEL EMSYM                                5 1 PUN CLS                                6 1 PUN CLS                                7 1 PUN CLS                                8 1 DEL EMSYM                                9 1 PUN CLS                                10 1 PUN CLS                                11 1 PUN CLS ÿÿ                              12 2 RLE aa                                14 1 PUN CLS                                15 1 PUN CLS ¸                               16 1 RLE aa                                17 1 PUN CLS                                18 1 PUN CLS                                19 1 PUN CLS                                20 1 PUN CLS                                21 1 PUN CLS                                22 1 PUN CLS                                23 1 PUN CLS @                               24 1 PUN                                25 1 PUN CLS                                26 1 PUN CLS                                27 1 PUN CLS                                28 1 PUN CLS                                29 1 PUN CLS                                30 1 PUN CLS                                31 1 PUN CLS                                32 1 PUN CLS                                33 1 PUN CLS                                34 1 PUN CLS                                35 1 PUN CLS                                36 1 PUN CLS                                37 1 PUN CLS                                38 1 PUN CLS                                39 1 PUN CLS                                40 1 PUN CLS                                41 1 PUN CLS                                42 1 PUN CLS                                43 1 PUN CLS                                44 1 PUN CLS                                45 1 PUN CLS                                46 1 PUN CLS                                47 1 PUN CLS                                48 1 PUN CLS                                49 1 PUN CLS                                50 1 PUN CLS                                51 1 PUN CLS                                52 1 PUN CLS                                53 1 PUN CLS                                54 1 PUN CLS                                55 1 PUN CLS                                56 1 PUN CLS                                57 1 PUN CLS                                58 1 PUN CLS                                59 1 PUN CLS                                60 1 DEL EMSYM                                61 1 DEL EMSYM                                62 1 PUN CLS                                63 1 PUN CLS                                64 1 DEL EMSYM                                65 1 DEL EMSYM º                               66 1 PUN                                67 1 DEL EMSYM                                68 1 PUN CLS ´                               69 1 PUN                                 70 1 DEL SPC Í                               71 1 RLE AA !                               72 1 PUN ¸                               73 1 RLE aa                                74 1 DEL EMSYM LÍ                              75 2 _UNK_ AA !        
.................................


Как проанализировать эту информацию, поняв типы? Или есть какой-то еще способ?

Если кто возьмется ответить, пожалуйста подробнее? Работаю как правило в Visual C++ 6.0, реже в Visual C++.NET 2003.

С уважением, Den!
Аватара пользователя
WinMain
Сообщения: 929
Зарегистрирован: 14 янв 2005, 10:30
Откуда: Москва
Контактная информация:

Для работы с библиотеками типов CОМ-объектов применяются специальные средства. Можно воспользоваться директивой #import или использовать ClassWizard в MFC, который сгенерит С++ обёртку для СОМ-объекта
Absurd
Сообщения: 1228
Зарегистрирован: 26 фев 2004, 13:24
Откуда: Pietari, Venäjä
Контактная информация:

В самой DLL такая информация не содержится. AFAIK она лежит в tlb (TypeLib) файле и/или в IDL файлах.
2B OR NOT(2B) = FF
Den
Сообщения: 62
Зарегистрирован: 09 сен 2004, 15:10

Absurd писал(а):В самой DLL такая информация не содержится. AFAIK она лежит в tlb (TypeLib) файле и/или в IDL файлах.
Хорошо, но какими средствами ее оттуда выудить?

WinMain, по ClassWizard. Ты имел ввиду ClassWizard->Add Class->From a type library... Это сделано ... извини, видимо я, что-то не так понял.

Всем спасибо за сотрудничество.
Аватара пользователя
WinMain
Сообщения: 929
Зарегистрирован: 14 янв 2005, 10:30
Откуда: Москва
Контактная информация:

В DLL необходимо выяснить типы аргументов четырех ф-ций (ф-ции я вижу через Depends).
Если ты имеешь в виду функции DllGetClassObject, DllCanUnloadNow и другие, то зачем из извлекать из бинарного модуля? Их аргумены и так известны. Для всех СОМ-модулей они одинаковые.
Den
Сообщения: 62
Зарегистрирован: 09 сен 2004, 15:10

1) Project -> Add class... -> MFC class from ActiveX control ->
Add class from file -> указать DLL -> выбрать интерфейсы (а в данном
случае интерфейс только один) -> Finish -> готово!
2) stdafx.h - > пишем #import "тра-ля-ля.dll" -> Build solution ->
готово, компилятор сгенерировал два файла (*.tlh, *.tli)!
Сделано в Visual C++.NET 2003.
Типы атрибутов и ф-ции нужны, что бы использовать в программе через…

Код: Выделить всё

HINSTANCE dllHandle = LoadLibrary(“*.dll”); 
typedef xxx(*Analysis)(ууу);
Analysis ф-ция = (Analysis)GetProcAddress(dllHandle,"ф-ция");
и т.д. и т.п.
Насколько мне известно из *.tlh, *.tli можно узнать информацию для замены ххх, ууу, ф-ция. Как это сделать? То, что я просто там вижу…очень много ф-ций с разными типами атрибутов, не знаю как использовать. Или должна быть какая-то одна конечная ф-ция … ее то и использовать? Много др. какой-то информации.

Извиняюсь за «гениально» заданный вопрос. Но, может, кто ответит!?!?

С уважением, Den!
Аватара пользователя
WinMain
Сообщения: 929
Зарегистрирован: 14 янв 2005, 10:30
Откуда: Москва
Контактная информация:

Чтобы использовать в приложении СОМ-интерфейсы, не нужно вызывать функции LoadLibrary и GetProcAddress.
Это делается совсем по-другому. Примеры можешь посмотреть на этом же форуме.

forum/topic5173.html
или
forum/topic5446.html
Den
Сообщения: 62
Зарегистрирован: 09 сен 2004, 15:10

Да мне не нужно использовать СОМ-интерфейсы. Нужно выяснить какие(ая) ф-ции(я) и тип(ы) атрибутов в этой длл (она не мной написана). Что бы в приложении использовать GetProcAddress, которой это нужно. Т.е. вытянуть из длл информацию, то что она делает, и записать в текстовой файл.
Думаю придется воспользоваться дизассемблером...вроде бы IDA Pro самый продвинутый.
DeeJayC
Сообщения: 497
Зарегистрирован: 17 фев 2004, 11:26
Откуда: Ленинград (который Город на Неве)
Контактная информация:

Den писал(а):Да мне не нужно использовать СОМ-интерфейсы. Нужно выяснить какие(ая) ф-ции(я) и тип(ы) атрибутов в этой длл (она не мной написана). Что бы в приложении использовать GetProcAddress, которой это нужно. Т.е. вытянуть из длл информацию, то что она делает, и записать в текстовой файл.
Думаю придется воспользоваться дизассемблером...вроде бы IDA Pro самый продвинутый.

dumpbin
"Особое внимание начинающих аквариумистов хотим обратить на то, что рыбки никогда не спят на спинке!" (c)

viel spass, DeeJayC
Ответить