Экспортируемые из DLL функции
Модераторы: Hawk, Romeo, Absurd, DeeJayC, WinMain
Всем привет! Мне нужно самому написать утилиту, которая получает список экспортируемых функций из DLL и сохраняет этот список в текстовом файле. Что-то на подобии Dependency Walker из VC++, только для запуска из командной строки. Кто-нибудь может подсказать как это можно сделать?
А так ли уж нужно тебе самому писать эту утилиту? Можно воспользоваться утилитой DUMPBIN.EXE с опцией /EXPORT из того же VC++. А выводимый на консоль список можно перенаправить в текстовый файл, например:
DUMPBIN.EXE /EXPORT USER32.DLL > USER32.TXT
Один недостаток этой утилиты - это её зависимость от других модулей VC++, т.е автономно она не может работать.
Можешь так же воспользоваться моей утилитой EnumFunc.exe
Она работает автономно и не требует дополнительных модулей.
Запускается она тоже из командной строки, например:
EnumFunc.exe WinHttp.dll
Если нужно, чтобы список оказался в текстовом файле, то запускаешь её таким образом:
EnumFunc.exe WinHttp.dll > WinHttp.txt
DUMPBIN.EXE /EXPORT USER32.DLL > USER32.TXT
Один недостаток этой утилиты - это её зависимость от других модулей VC++, т.е автономно она не может работать.
Можешь так же воспользоваться моей утилитой EnumFunc.exe
Она работает автономно и не требует дополнительных модулей.
Запускается она тоже из командной строки, например:
EnumFunc.exe WinHttp.dll
Если нужно, чтобы список оказался в текстовом файле, то запускаешь её таким образом:
EnumFunc.exe WinHttp.dll > WinHttp.txt
У вас нет необходимых прав для просмотра вложений в этом сообщении.
WinMain, огромное тебе спасибо за твою утилиту.
Теперь мне не нужно её самому писать.
Теперь мне не нужно её самому писать.
- Romeo
- Сообщения: 3091
- Зарегистрирован: 02 мар 2004, 17:25
- Откуда: Крым, Севастополь
- Контактная информация:
WinMain, поделись идеей, как она работает. Не то, что мне это сейчас необходимо. Просто ради расширения кругозора
Entites should not be multiplied beyond necessity @ William Occam
---
Для выделения С++ кода используйте конструкцию [ code=cpp ] Код [ /code ] (без пробелов)
---
Сообщение "Спасибо" малоинформативно. Благодарность правильнее высказать, воспользовавшись кнопкой "Reputation" в виде звёздочки, расположенной в левом нижнем углу рамки сообщения.
---
Для выделения С++ кода используйте конструкцию [ code=cpp ] Код [ /code ] (без пробелов)
---
Сообщение "Спасибо" малоинформативно. Благодарность правильнее высказать, воспользовавшись кнопкой "Reputation" в виде звёздочки, расположенной в левом нижнем углу рамки сообщения.
Доступ к нужным данным получаем с помощью функции ImageDirectoryEntryToData()
Перед этим нужно загрузить модуль в память с помощью функции ImageLoad() (Не путать с LoadImage()!). В данном контексте под термином Image подразумевается не графический файл с некой картинкой, а исполняемый модуль Win32 (EXE, DLL, OCX).
Перед этим нужно загрузить модуль в память с помощью функции ImageLoad() (Не путать с LoadImage()!). В данном контексте под термином Image подразумевается не графический файл с некой картинкой, а исполняемый модуль Win32 (EXE, DLL, OCX).
- Romeo
- Сообщения: 3091
- Зарегистрирован: 02 мар 2004, 17:25
- Откуда: Крым, Севастополь
- Контактная информация:
Очень познавательно, спасибо.
Entites should not be multiplied beyond necessity @ William Occam
---
Для выделения С++ кода используйте конструкцию [ code=cpp ] Код [ /code ] (без пробелов)
---
Сообщение "Спасибо" малоинформативно. Благодарность правильнее высказать, воспользовавшись кнопкой "Reputation" в виде звёздочки, расположенной в левом нижнем углу рамки сообщения.
---
Для выделения С++ кода используйте конструкцию [ code=cpp ] Код [ /code ] (без пробелов)
---
Сообщение "Спасибо" малоинформативно. Благодарность правильнее высказать, воспользовавшись кнопкой "Reputation" в виде звёздочки, расположенной в левом нижнем углу рамки сообщения.
Попробовал я воспользоваться функцией ImageDirectoryEntryToData().
Она передаёт мне какой-то бинарный массив данных, но как в этом массиве добраться до списка с названиями функций, я так и не понял. WinMain, может объяснишь?
Она передаёт мне какой-то бинарный массив данных, но как в этом массиве добраться до списка с названиями функций, я так и не понял. WinMain, может объяснишь?
Действительно, эта функция предоставляет доступ к данным, но описания формата этих данных нет (может и есть где-то, но я не нашёл). Поэтому пришлось самому разбираться в бинарном массиве, определять структуру данных, находить поля, по которым можно вычислить смещение внутри массива.
WinMain, а как на счёт исходника твоей утилиты? Можешь его здесь выложить?
Держи, Decoder. С тебя пиво...
У вас нет необходимых прав для просмотра вложений в этом сообщении.