Страница 1 из 2

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

Добавлено: 03 окт 2008, 12:24
Decoder
Всем привет! Мне нужно самому написать утилиту, которая получает список экспортируемых функций из DLL и сохраняет этот список в текстовом файле. Что-то на подобии Dependency Walker из VC++, только для запуска из командной строки. Кто-нибудь может подсказать как это можно сделать?

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

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

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

Если нужно, чтобы список оказался в текстовом файле, то запускаешь её таким образом:
EnumFunc.exe WinHttp.dll > WinHttp.txt

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

Добавлено: 03 окт 2008, 17:47
Decoder
WinMain, огромное тебе спасибо за твою утилиту.
Теперь мне не нужно её самому писать.

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

Добавлено: 04 окт 2008, 09:24
Romeo
WinMain, поделись идеей, как она работает. Не то, что мне это сейчас необходимо. Просто ради расширения кругозора :)

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

Добавлено: 04 окт 2008, 18:37
WinMain
Доступ к нужным данным получаем с помощью функции ImageDirectoryEntryToData()
Перед этим нужно загрузить модуль в память с помощью функции ImageLoad() (Не путать с LoadImage()!). В данном контексте под термином Image подразумевается не графический файл с некой картинкой, а исполняемый модуль Win32 (EXE, DLL, OCX).

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

Добавлено: 04 окт 2008, 23:46
Romeo
Очень познавательно, спасибо.

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

Добавлено: 06 окт 2008, 08:06
Decoder
Попробовал я воспользоваться функцией ImageDirectoryEntryToData().
Она передаёт мне какой-то бинарный массив данных, но как в этом массиве добраться до списка с названиями функций, я так и не понял. WinMain, может объяснишь?

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

Добавлено: 06 окт 2008, 10:24
WinMain
Действительно, эта функция предоставляет доступ к данным, но описания формата этих данных нет (может и есть где-то, но я не нашёл). Поэтому пришлось самому разбираться в бинарном массиве, определять структуру данных, находить поля, по которым можно вычислить смещение внутри массива.

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

Добавлено: 27 дек 2008, 22:45
Decoder
WinMain, а как на счёт исходника твоей утилиты? Можешь его здесь выложить?

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

Добавлено: 28 дек 2008, 11:23
WinMain
Держи, Decoder. С тебя пиво...