Экспортируемые из DLL функции

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

Аватара пользователя
Decoder
Сообщения: 303
Зарегистрирован: 19 фев 2008, 23:11
Откуда: Moscow

03 окт 2008, 12:24

Всем привет! Мне нужно самому написать утилиту, которая получает список экспортируемых функций из DLL и сохраняет этот список в текстовом файле. Что-то на подобии Dependency Walker из VC++, только для запуска из командной строки. Кто-нибудь может подсказать как это можно сделать?
Аватара пользователя
WinMain
Сообщения: 913
Зарегистрирован: 14 янв 2005, 10:30
Откуда: Москва
Контактная информация:

03 окт 2008, 12:40

А так ли уж нужно тебе самому писать эту утилиту? Можно воспользоваться утилитой DUMPBIN.EXE с опцией /EXPORT из того же VC++. А выводимый на консоль список можно перенаправить в текстовый файл, например:
DUMPBIN.EXE /EXPORT USER32.DLL > USER32.TXT
Один недостаток этой утилиты - это её зависимость от других модулей VC++, т.е автономно она не может работать.

Можешь так же воспользоваться моей утилитой EnumFunc.exe
Она работает автономно и не требует дополнительных модулей.
Запускается она тоже из командной строки, например:
EnumFunc.exe WinHttp.dll

Если нужно, чтобы список оказался в текстовом файле, то запускаешь её таким образом:
EnumFunc.exe WinHttp.dll > WinHttp.txt
У вас нет необходимых прав для просмотра вложений в этом сообщении.
Аватара пользователя
Decoder
Сообщения: 303
Зарегистрирован: 19 фев 2008, 23:11
Откуда: Moscow

03 окт 2008, 17:47

WinMain, огромное тебе спасибо за твою утилиту.
Теперь мне не нужно её самому писать.
Аватара пользователя
Romeo
Сообщения: 3091
Зарегистрирован: 02 мар 2004, 17:25
Откуда: Крым, Севастополь
Контактная информация:

04 окт 2008, 09:24

WinMain, поделись идеей, как она работает. Не то, что мне это сейчас необходимо. Просто ради расширения кругозора :)
Entites should not be multiplied beyond necessity @ William Occam
---
Для выделения С++ кода используйте конструкцию [ code=cpp ] Код [ /code ] (без пробелов)
---
Сообщение "Спасибо" малоинформативно. Благодарность правильнее высказать, воспользовавшись кнопкой "Reputation" в виде звёздочки, расположенной в левом нижнем углу рамки сообщения.
Аватара пользователя
WinMain
Сообщения: 913
Зарегистрирован: 14 янв 2005, 10:30
Откуда: Москва
Контактная информация:

04 окт 2008, 18:37

Доступ к нужным данным получаем с помощью функции ImageDirectoryEntryToData()
Перед этим нужно загрузить модуль в память с помощью функции ImageLoad() (Не путать с LoadImage()!). В данном контексте под термином Image подразумевается не графический файл с некой картинкой, а исполняемый модуль Win32 (EXE, DLL, OCX).
Аватара пользователя
Romeo
Сообщения: 3091
Зарегистрирован: 02 мар 2004, 17:25
Откуда: Крым, Севастополь
Контактная информация:

04 окт 2008, 23:46

Очень познавательно, спасибо.
Entites should not be multiplied beyond necessity @ William Occam
---
Для выделения С++ кода используйте конструкцию [ code=cpp ] Код [ /code ] (без пробелов)
---
Сообщение "Спасибо" малоинформативно. Благодарность правильнее высказать, воспользовавшись кнопкой "Reputation" в виде звёздочки, расположенной в левом нижнем углу рамки сообщения.
Аватара пользователя
Decoder
Сообщения: 303
Зарегистрирован: 19 фев 2008, 23:11
Откуда: Moscow

06 окт 2008, 08:06

Попробовал я воспользоваться функцией ImageDirectoryEntryToData().
Она передаёт мне какой-то бинарный массив данных, но как в этом массиве добраться до списка с названиями функций, я так и не понял. WinMain, может объяснишь?
Аватара пользователя
WinMain
Сообщения: 913
Зарегистрирован: 14 янв 2005, 10:30
Откуда: Москва
Контактная информация:

06 окт 2008, 10:24

Действительно, эта функция предоставляет доступ к данным, но описания формата этих данных нет (может и есть где-то, но я не нашёл). Поэтому пришлось самому разбираться в бинарном массиве, определять структуру данных, находить поля, по которым можно вычислить смещение внутри массива.
Аватара пользователя
Decoder
Сообщения: 303
Зарегистрирован: 19 фев 2008, 23:11
Откуда: Moscow

27 дек 2008, 22:45

WinMain, а как на счёт исходника твоей утилиты? Можешь его здесь выложить?
Аватара пользователя
WinMain
Сообщения: 913
Зарегистрирован: 14 янв 2005, 10:30
Откуда: Москва
Контактная информация:

28 дек 2008, 11:23

Держи, Decoder. С тебя пиво...
У вас нет необходимых прав для просмотра вложений в этом сообщении.
Ответить