Как найти функцию в dll

I have a DLL file. How can I view the functions in that DLL?

Mark Amery's user avatar

Mark Amery

140k78 gold badges402 silver badges457 bronze badges

asked Dec 14, 2010 at 11:58

sumit's user avatar

1

For native code it’s probably best to use Dependency Walker. It also possible to use dumpbin command line utility that comes with Visual Studio.

answered Dec 14, 2010 at 12:03

detunized's user avatar

detunizeddetunized

15k3 gold badges47 silver badges64 bronze badges

4

Use the free DLL Export Viewer, it is very easy to use.

mrswadge's user avatar

mrswadge

1,6491 gold badge20 silver badges41 bronze badges

answered Dec 14, 2010 at 12:04

Ken D's user avatar

Ken DKen D

5,8402 gold badges35 silver badges58 bronze badges

4

You may try the Object Browser in Visual Studio.

Select Edit Custom Component Set. From there, you can choose from a variety of .NET, COM or project libraries or just import external DLLs via Browse.

bad_coder's user avatar

bad_coder

10.9k20 gold badges42 silver badges70 bronze badges

answered May 4, 2012 at 10:25

cslewy's user avatar

cslewycslewy

6075 silver badges3 bronze badges

7

Use dumpbin command-line.

  • dumpbin /IMPORTS <path-to-file> should provide the function imported into that DLL.
  • dumpbin /EXPORTS <path-to-file> should provide the functions it exports.

kenorb's user avatar

kenorb

153k85 gold badges674 silver badges738 bronze badges

answered Oct 30, 2012 at 18:47

jmcarter9t's user avatar

jmcarter9tjmcarter9t

7216 silver badges11 bronze badges

0

For .NET DLLs you can use ildasm

answered Sep 6, 2016 at 7:05

altumano's user avatar

altumanoaltumano

2,6662 gold badges26 silver badges20 bronze badges

2

Use dotPeek by JetBrains.

https://www.jetbrains.com/decompiler/

dotPeek is a free tool based on ReSharper. It can reliably decompile
any .NET assembly into C# or IL code.

answered Dec 9, 2018 at 16:08

Shayan's user avatar

ShayanShayan

6801 gold badge15 silver badges31 bronze badges

1

Without telling us what language this DLL/assembly is from, we can only guess.

So how about .NET Reflector.

bad_coder's user avatar

bad_coder

10.9k20 gold badges42 silver badges70 bronze badges

answered Dec 14, 2010 at 11:59

Adriaan Stander's user avatar

Adriaan StanderAdriaan Stander

162k30 gold badges287 silver badges283 bronze badges

3

If a DLL is written in one of the .NET languages and if you only want to view what functions, there is a reference to this DLL in the project.

Then doubleclick the DLL in the references folder and then you will see what functions it has in the OBJECT EXPLORER window.

If you would like to view the source code of that DLL file you can use a decompiler application such as .NET reflector.

bad_coder's user avatar

bad_coder

10.9k20 gold badges42 silver badges70 bronze badges

answered May 4, 2012 at 10:36

gwt's user avatar

gwtgwt

2,3314 gold badges36 silver badges59 bronze badges

For non .NET dlls, installing binutils on a Linux system presents the objdump command that can be used to display information of a dll.

objdump --private-headers <file.dll>

Look for the Export Address Table section in the output.

answered Sep 13, 2022 at 21:31

Robert Brisita's user avatar

Robert BrisitaRobert Brisita

5,3913 gold badges35 silver badges35 bronze badges

.NET ildasm

ildasm helped and even dumped methods body, but to edit .DLL you also need any hex editor.

ildasm example to fix Help Viewer v2.x issue:
error: “An error occurred while updating content: File ‘???.cab’ was not signed by Microsoft”

here could be image
more example files

answered Nov 3, 2021 at 19:24

grizlyk's user avatar

1

Try this (Linux) C code:

#include <fcntl.h>
#include <stdio.h>
#include <sys/mman.h>
#include <sys/stat.h>
#include <sys/types.h>
#include <unistd.h>

unsigned int vpe2offset(void * base, unsigned int vpe) {
    unsigned int * ptr = base;
    unsigned int pe_offset;
    unsigned short num_sections;

    pe_offset = ptr[0x3c/4];                             //PE header offset
    ptr = base + pe_offset;                              //PE header address
    num_sections = ((unsigned short*)ptr)[6/2];          //Section count
    ptr = ((void*)base) + 0x18 + 0x60 + 16*8 + pe_offset;//Address of first section

    while (num_sections--) {
        if (vpe >= ptr[0x0c/4] && vpe < ptr[0x0c/4] + ptr[0x10/4]) {
            return vpe - ptr[0x0c/4] + ptr[0x14/4];
        }
        ptr += 0x28/4;
    }

    return 0;
}

void iterate_exports(void * base, int(*iterator)(char*)) {
    unsigned int * ptr = base;
    unsigned int pe_offset,
                 exports_offset,
                 number_of_names,
                 address_of_names;

    pe_offset = ptr[0x3c/4];
    ptr = base + pe_offset;
    exports_offset = ptr[0x78/4];
    ptr = base + vpe2offset(base, exports_offset);
    number_of_names = ptr[0x18/4];
    address_of_names = ptr[0x20/4];
    ptr = base + vpe2offset(base, address_of_names);
    while (number_of_names-- && iterator((char*)(base + vpe2offset(base, ptr++[0])))) {
        /* Do nothing */
    }
}

int print_symbol_name(char * name) {
    printf("%sn", name);
    return 1;
}

int main(int argc, char const *argv[]) {
    int fd;
    struct stat st;
    void * base;

    if (argc == 1) {
        printf("Usage: %s <dll>n", argv[0]);
    } else if (stat(argv[1], &st) == 0 && (fd = open(argv[1], O_RDONLY)) >= 0) {
        base = mmap(NULL, st.st_size, PROT_READ, MAP_PRIVATE, fd, 0);
        if (base != MAP_FAILED) {
            iterate_exports(base, print_symbol_name);
            munmap(base, st.st_size);
        } else {
            fprintf(stderr, "Could not map "%s".n", argv[1]);
        }
        close(fd);
    } else {
        fprintf(stderr, "Could not open "%s" for reading.n", argv[1]);
    }
    return 0;
}

It follows references inside the PE file and finally calls a callback function for each exported symbol. For an overview of the PE file format see this: http://www.openrce.org/reference_library/files/reference/PE%20Format.pdf

Не пинайте если вопрос сильно не корректен,но собсвенно,как узнать какие функции можно использовать из dll?Вот есть у меня например некая программка,у нее есть dll от автора.Я например точно знаю откуда то,что там есть нужный мне функционал,но не знаю,что это,и как его использовать.Ну или точнее.Допустим стандартная библиотека C stdio.h это не .h а .so ну или .dll.Допустим я знаю что в ней есть функция вывод в в stdout.но что это за функция(printf) я не знаю.Как мне узнать что есть у нашего воображаемого stdio.so/.dll функция printf.Я сейчас не говорю о том как потом использовать ее,хотя и такой информации был бы рад,только начал осваивать работу с dll.Мне понятно что сатндартные dll например user32, kernel32 описаны на MSDN.Но что делать в случае с неизвесными от Васи Пупкина.


  • Вопрос задан

    более трёх лет назад

  • 5192 просмотра

У меня есть файл DLL. Как я могу просмотреть функции в этой DLL?

Для нативного кода, вероятно, лучше всего использовать Dependency Walker . Также можно использовать утилиту командной строки dumpbin , поставляемую с Visual Studio.

Используйте бесплатную программу просмотра экспорта DLL , она очень проста в использовании.

Вы можете попробовать браузер объектов в Visual Studio.

Выберите » Редактировать набор пользовательских компонентов» . Оттуда вы можете выбрать одну из множества библиотек .NET, COM или проектов или просто импортировать внешние библиотеки DLL через Обзор.

  • dumpbin /IMPORTS <path-to-file> должен предоставить функцию, импортированную в эту DLL.
  • dumpbin /EXPORTS <path-to-file> должен предоставлять функции, которые он экспортирует.

Используйте dotPeek от JetBrains.

dotPeek — это бесплатный инструмент, основанный на ReSharper. Он может надежно декомпилировать любую сборку .NET в код C # или IL.

Для .NET DLL вы можете использовать ildasm

Не сообщая нам, на каком языке эта dll / сборка, мы можем только догадываться.

Если DLL написана на одном из языков .NET и вы хотите только просмотреть, какие функции, в проекте есть ссылка на эту DLL.

Затем дважды щелкните DLL в папке ссылок, и вы увидите, какие функции она выполняет в окне OBJECT EXPLORER.

Если вы хотите просмотреть исходный код этого файла DLL, вы можете использовать приложение декомпиляции, такое как рефлектор .NET. надеюсь, это поможет вам.

Как узнать, какие функции содержит в себе файл .dll (вопрос новичка)?

Вопрос состоит в другом: а что Вы будете делать с этим списком? Безусловно, Вы не сможете воспользоваться ни одной недокументированной функцией из длл-ки.
В VS — утилита DUMPBIN.EXE
В Delphi — утилита TDump.exe
P.S. Не ленитесь гуглить, прежде чем задавать на форуме такие вопросы. 😎

Просто список — это на крайний случай. В идеале я ищу список + описание к каждой функции что она делает.
Перед тем, как писать на форум, я копался в интернете — находил статьи о том, что такое длл, для чего нужны, как создать свой длл, как экспортировать оттуда функции и тд, но самого списка функций с описанием не нашел даже к самым известным dll файлам типа user32, kernel и тд.
P.S. В конце концов ведь каждый программист когда-то узнавал, какие функции содержатся в длл файлах и что эти функции делают. Кто, как и откуда брал эту инфу?)

Ну, этот вопрос простителен для новичка. В DLL копаться не нужно, тем более в системных. MSDN вам в руки.

А если просто просмотреть список ф-ций в DLL (да и для много другого) можно заюзать HIEW.

Evg64, а какая у Вас вообще цель? Создать свою DLL, просто спортивный интерес или что-то иное? Если Вы хотите использовать функции Win API, то Вам не нужно вообще заботиться о загрузке функции из DLL: за Вас всё уже сделано в виде библиотек. В этом случае, как сказал Lerkin, смотрите MSDN относительно Вашей задачи.

Если же всё-таки нужен список, есть утилита, правда шараварная: PE Explorer. Можно слить триалку на 30 дней, но, думаю, этого хватит, чтобы удовлетворить любопытство 🙂

Цель — ознакомиться с возможностями функций из одного-двух файлов длл. Получить начальное представление о то, что функции из длл «умеют». А главное, понять, как получать информацию о возможностях функций конкретного файла длл.

А вообще узнать больше о длл меня сподвигла банальная мысль о том, что знание возможностей длл файлов расширит возможности программирования)

Насчет MSDN я не совсем понял: ведь не может же там содержаться информации по всему многообразию функций из всего многообразия длл файлов? Я там смотрел, да можно было и не смотреть) Может я что-то понял не так?

Прикинь, может, особенно если учесть что объем МСДН 1.5 гига, и все ф-ции, содержащиеся в длл-ках виндов там описаны.
А вообще работают от обратного: ищут функцию для решения определенных задач, а потом смотрят что надо подключить для вызова этой ф-ции.

И не смотри, не трать время. dll-ку в Блокноте открываешь, и читаешь. Нормальным, русским языком написано.

P.S. Есть начинающие, которым желательно тут же стать заканчивающими.

Попробую развернуто закрыть эту тему.

Итак. По задумке аффтора, стать дико навороченным программистом, можно с помощью получения списка всех функций изо всех dll, которые юзает ОС Windows. Для этого, автору страшно нужен способ получения этих функций из конкретно указанной dll. Хорошо, попробуем промоделировать ситуацию, в которой автор добыл подходящий инструментарий (а хотя бы и Dependency Walker) и приступил к реализации задуманного.
Запустив этот, без сомнения достойный viewer, он стал думать, с чего же ему начать. Очевидно, что не найдя точки отсчета, он открыл каталог system32. Про то, что основной dll фонд находится там, он уже знает, или узнал только что. Испортив свой решительный настрой тем, что кроме dll-файлов, в указанном каталоге полно каких-то папок с загадочными названиями, немеряно файлов с какими-то левыми расширениями, типа ocx, txt, log, nls и т.п., аффтор идет по пути наименьшего сопротивления. Посомневавшись немного, он сортирует список по алфавиту и открывает первый попавшийся dll файл. Это будет, к примеру, acledit.dll. По чудовищно счастливой случайности, этот файл относится непосредственно к пакету операционной системы, а не является компонентом нестандартного драйвера какого-то из многочисленных устройств в составе аппаратной конфигурации, ни библиотекой от установленных во множестве дополнительных прикладных программ, игрушек и прочего программного обеспечения, без сомнения установленного на компьютере пытливого исследователя.
Получив список функций, автор воодушевился и записал название первой функции. Это будет, допустим, функция EditAuditInfo. Сколько из этого полезной информации получил автор, сказать не представляется возможным. Сказать можно только то, что теперь он знает, что в динамической библиотеке acledit есть функция EditAuditInfo. Что она делает, и как её можно использовать, автор пока еще не знает, но это в данный момент для него не важно. Сколько новой информации. Чума! А вот еще в той же таблице есть какие-то дополнительные поля — ordinal, hint, entry point. Да фигня какая-нибудь, потом разберемся.
Когда рука бойца устала от переписывания названий функций, автор посмотрел на дерево зависимостей и опять погрустнел, поскольку не понял, зачем ему еще какие-то dll показывают. Пощелкав мышом по этому списку и совершенно скиснув, поскольку количество негатива от возрастающего количества вопросов начало превышать позитив от начала сбычи мечт о получении всех-всех функций, автор вышел из программы, дав себе твердую установку вернуться к каталогизации функций немного позже.
Но вспоминая, что когда он щелкнул по названию функции, программа попыталась загрузить какую-то фигню под названием MSDN — » Блин, опять эта MSDN, о которой говорили эти унылые придурки с форума. Я же был там, там ничего не сказано о том, как сделать то, что я задумал. «, — аффтор полностью теряет интерес к воплощению великой идеи.
Вот так, человечество теряет еще одного талантливого набиральщика названий функций, и ущерб причиненный науке — не поддаётся осмыслению.

Как же избежать таких потерь? А достаточно изложить на хорошем форуме свой вариант постижения таинств программирования, и стоически выдержав первую волну сарказма со стороны участников, начать задавать наводящие вопросы, когда посоветуют, например, обратиться к MSDN. Попросить посоветовать доступную для понимания литературу по программированию в WinAPI, и много чего еще.
А самое главное, нужно четко понимать, ЧТО человек собрался программировать и ДЛЯ ЧЕГО.

это все надо вставить в капчу при регистрации на форуме. Наберет человек такой текст, глядишь и научиться чему нибудь, точнее разучиться рассматривать длл-ки в блокноте.

Дебажить утилитудрайвер производителя, как же ещё. Нажимать на кнопочку вклвыкл подсветки и дебажить. Одними именами функций не обойдёшься.

Кто-нибудь может дать ссылку на MSDN, где подробно описана хоть одна функция?
В таком стиле:

int StringGetChar ( string text, int pos )
Возвращает значение символа, расположенного в указанной позиции строки.
Параметры :
text — Строка.
pos — Позиция символа в строке. Может быть от 0 до StringLen ( text ) — 1 .

Пример :
int char_code = StringGetChar ( «abcdefgh» , 3 ) ;
// символьный код ‘c’ = 99

Как посмотреть функции в dll

Gray Pipe

Лучший отвечающий

Вопрос

я начинающий программист на VB2010

я просматривал учебники которые есть тут на сайте и наткнулся на статью в которой описывалось вызов API функции “MessageBox” из библиотеки User32.dll. И мне стало интересно а какие ещё функции скрывает эта библиотека. Например мне бы хотелось открыть таким образом другие виды msg Box’а. Например как не будь ErrorBox или что-то в этом духе.

Я искал по интернету с похожими запросами однако все они ссылаются на depends.exe (который якобы должен быть вшит в VS) однако его у меня нет. Искал где скачать и набрёл на depends22_x64. Однако не смог разобраться с ней так как моё познание английского очень низко!

Помогите пожалуйста! Как узнать функции которые хранятся в User32.dll другими методами

Или подскажите самые часто используемые функции из этой библиотеки (желательно с синтаксисом объявления и вызова)

9

20 августа 2009 года

Lerkin

3.0K / / 25.03.2003

Попробую развернуто закрыть эту тему.

Итак. По задумке аффтора, стать дико навороченным программистом, можно с помощью получения списка всех функций изо всех dll, которые юзает ОС Windows. Для этого, автору страшно нужен способ получения этих функций из конкретно указанной dll. Хорошо, попробуем промоделировать ситуацию, в которой автор добыл подходящий инструментарий (а хотя бы и Dependency Walker) и приступил к реализации задуманного.
Запустив этот, без сомнения достойный viewer, он стал думать, с чего же ему начать. Очевидно, что не найдя точки отсчета, он открыл каталог system32. Про то, что основной dll фонд находится там, он уже знает, или узнал только что. Испортив свой решительный настрой тем, что кроме dll-файлов, в указанном каталоге полно каких-то папок с загадочными названиями, немеряно файлов с какими-то левыми расширениями, типа ocx, txt, log, nls и т.п., аффтор идет по пути наименьшего сопротивления. Посомневавшись немного, он сортирует список по алфавиту и открывает первый попавшийся dll файл. Это будет, к примеру, acledit.dll. По чудовищно счастливой случайности, этот файл относится непосредственно к пакету операционной системы, а не является компонентом нестандартного драйвера какого-то из многочисленных устройств в составе аппаратной конфигурации, ни библиотекой от установленных во множестве дополнительных прикладных программ, игрушек и прочего программного обеспечения, без сомнения установленного на компьютере пытливого исследователя.
Получив список функций, автор воодушевился и записал название первой функции. Это будет, допустим, функция EditAuditInfo. Сколько из этого полезной информации получил автор, сказать не представляется возможным. Сказать можно только то, что теперь он знает, что в динамической библиотеке acledit есть функция EditAuditInfo. Что она делает, и как её можно использовать, автор пока еще не знает, но это в данный момент для него не важно. Сколько новой информации!!! Чума! А вот еще в той же таблице есть какие-то дополнительные поля – ordinal, hint, entry point… Да фигня какая-нибудь, потом разберемся…
Когда рука бойца устала от переписывания названий функций, автор посмотрел на дерево зависимостей и опять погрустнел, поскольку не понял, зачем ему еще какие-то dll показывают. Пощелкав мышом по этому списку и совершенно скиснув, поскольку количество негатива от возрастающего количества вопросов начало превышать позитив от начала сбычи мечт о получении всех-всех функций, автор вышел из программы, дав себе твердую установку вернуться к каталогизации функций немного позже.
Но вспоминая, что когда он щелкнул по названию функции, программа попыталась загрузить какую-то фигню под названием MSDN – ” Блин, опять эта MSDN, о которой говорили эти унылые придурки с форума. Я же был там, там ничего не сказано о том, как сделать то, что я задумал…”, – аффтор полностью теряет интерес к воплощению великой идеи.
Вот так, человечество теряет еще одного талантливого набиральщика названий функций, и ущерб причиненный науке – не поддаётся осмыслению.

Как же избежать таких потерь? А достаточно изложить на хорошем форуме свой вариант постижения таинств программирования, и стоически выдержав первую волну сарказма со стороны участников, начать задавать наводящие вопросы, когда посоветуют, например, обратиться к MSDN. Попросить посоветовать доступную для понимания литературу по программированию в WinAPI, и много чего еще…
А самое главное, нужно четко понимать, ЧТО человек собрался программировать и ДЛЯ ЧЕГО.

Добавить комментарий