Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

Как достать имена функций из dll

10K
27 апреля 2006 года
-Df-
24 / / 11.03.2006
subj.
пробовал с dumpbin, такое чувство, что оно не работает..
P.S. если можна, то раскажите, как получить еще параметры фукнции
________
VC++2005
9.5K
28 апреля 2006 года
Damarus
101 / / 08.04.2006
Плохо пробовал.

dumpbin /EXPORTS твоя_dll'ка

Параметры получить нельзя.
10K
28 апреля 2006 года
-Df-
24 / / 11.03.2006
Цитата:
Originally posted by Damarus
Плохо пробовал.

dumpbin /EXPORTS твоя_dll'ка

Параметры полочить нельзя.


Я так и набираю.. но ничего не происходит:

c:\Program Files\Microsoft Visual Studio 8\VC\bin>dumpbin.exe /exports pro.dll

c:\Program Files\Microsoft Visual Studio 8\VC\bin>
просто выходит и никаких сообщений

9.5K
28 апреля 2006 года
Damarus
101 / / 08.04.2006
Попробуй так:

c:\Program Files\Microsoft Visual Studio 8\Common7\IDE>dumpbin.exe /exports "путь\pro.dll"

Вот работающий у меня пример:
 
Код:
D:\Microsoft Visual Studio 8\Common7\IDE>dumpbin.exe /exports "C:\Windows\System32\user32.dll" > C:\user32.txt


После выполнения файл C:\user32.txt
Код:
Microsoft (R) COFF/PE Dumper Version 8.00.50727.42
Copyright (C) Microsoft Corporation.  All rights reserved.


Dump of file C:\Windows\System32\user32.dll

File Type: DLL

  Section contains the following exports for USER32.dll

    00000000 characteristics
    41107EEC time date stamp Wed Aug 04 10:15:08 2004
        0.00 version
           1 ordinal base
         732 number of functions
         732 number of names

    ordinal hint RVA      name

          1    0 0002F794 ActivateKeyboardLayout
          2    1 0003016E AdjustWindowRect
          3    2 000120A2 AdjustWindowRectEx
          4    3 0005D07D AlignRects
          5    4 000460ED AllowForegroundActivation
          6    5 0002A239 AllowSetForegroundWindow
          7    6 0002869C AnimateWindow
          8    7 000597CF AnyPopup
          9    8 0001716C AppendMenuA
         10    9 0002C170 AppendMenuW
         11    A 00045C1F ArrangeIconicWindows
         12    B 0001674F AttachThreadInput
         13    C 0000CDCB BeginDeferWindowPos
         14    D 0000B4B1 BeginPaint
         15    E 0005C61A BlockInput
         ............................................
        720  2CF 0003F815 WaitForInputIdle
        721  2D0 000093E9 WaitMessage
        722  2D1 0005CB9E Win32PoolAllocationStats
        723  2D2 000250CF WinHelpA
        724  2D3 000517D4 WinHelpW
        725  2D4 0000D757 WindowFromDC
        726  2D5 0000C57E WindowFromPoint
        727  2D6 00056365 keybd_event
        728  2D7 00056321 mouse_event
        729  2D8 0000A2DE wsprintfA
        730  2D9 0000A862 wsprintfW
        731  2DA 0000A041 wvsprintfA
        732  2DB 0000A87D wvsprintfW

  Summary

        2000 .data
        3000 .reloc
       2B000 .rsrc
       5F000 .text
10K
28 апреля 2006 года
-Df-
24 / / 11.03.2006
Все, я нашел в чем была проблема. При простом запуске dumpbin мне выдало, что нет mspdb80.dll. Я просто скопировал его в ту дерикторию и после этого программа начала работать, начали появляться используемые ключи при вызове dumpbin /?, хотя до этого вобще ничего не происходило и программа просто завершалась без каких-либо сообщений об ошибке.
9.5K
28 апреля 2006 года
Damarus
101 / / 08.04.2006
Цитата:
Originally posted by -Df-
Все, я нашел в чем была проблема. При простом запуске dumpbin мне выдало, что нет mspdb80.dll. Я просто скопировал его в ту дерикторию и после этого программа начала работать, начали появляться используемые ключи при вызове dumpbin /?, хотя до этого вобще ничего не происходило и программа просто завершалась без каких-либо сообщений об ошибке.



Я не совсем понял, что ты скопировал, но, не в коем случае не кидай mspdb80.dll в .\Microsoft Visual Studio 8\VC\bin. После этого у тебя проекты в студии компилироваться не будут.

10K
29 апреля 2006 года
-Df-
24 / / 11.03.2006
Цитата:
Originally posted by Damarus
Я не совсем понял, что ты скопировал, но, не в коем случае не кидай mspdb80.dll в .\Microsoft Visual Studio 8\VC\bin. После этого у тебя проекты в студии компилироваться не будут.


Действительно не компилит.. а как тогда по другому?

534
30 апреля 2006 года
HarryAxe
448 / / 19.01.2006
Цитата:
Originally posted by -Df-
Действительно не компилит.. а как тогда по другому?

Оно тебе надо, с консольными приложениями возиться? Dependency walker рулит. (D:\Microsoft Visual Studio 8\Common7\Tools\Bin\Depends.Exe)

534
01 мая 2006 года
HarryAxe
448 / / 19.01.2006
Наваял вчера код, извлекающий имена экспортируемых функций в runtime. Всё оказалось очень просто, Microsoft написала кучу функций для работы с PE. Кому интересно, вот непосредственно код:
Код:
#include <Imagehlp.h>
#pragma comment(lib, "Imagehlp.lib")

...
PLOADED_IMAGE pImage = ImageLoad(szLibName, NULL);
   
if (!pImage)
{
    MessageBox(TEXT("Couldn't load a library"), NULL, MB_OK);
    return;
}

ULONG ulSize = 0;
PIMAGE_EXPORT_DIRECTORY ped = (PIMAGE_EXPORT_DIRECTORY) ImageDirectoryEntryToData(pImage->MappedAddress,
    FALSE,
    IMAGE_DIRECTORY_ENTRY_EXPORT,
    &ulSize
);

LPDWORD pdwNames = (LPDWORD) ImageRvaToVa(pImage->FileHeader,
    pImage->MappedAddress,
    ped->AddressOfNames,
    NULL
);

for (DWORD i = 0; i < ped->NumberOfNames; i++)
{
    LPSTR szName = (LPSTR) ImageRvaToVa(pImage->FileHeader,
        pImage->MappedAddress,
        pdwNames,
        NULL
    );
    // Здесь сохраняем имя функции
}

ImageUnload(pImage);

EntryPoints для функций можно получить аналогично через ped->AddressOfFunctions, индексация ведётся параллельно с таблицей имён.
10K
01 мая 2006 года
-Df-
24 / / 11.03.2006
2HarryAxe: thnk
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог