Как достать имена функций из dll
пробовал с dumpbin, такое чувство, что оно не работает..
P.S. если можна, то раскажите, как получить еще параметры фукнции
________
VC++2005
dumpbin /EXPORTS твоя_dll'ка
Параметры получить нельзя.
Цитата:
Originally posted by Damarus
Плохо пробовал.
dumpbin /EXPORTS твоя_dll'ка
Параметры полочить нельзя.
Плохо пробовал.
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>
просто выходит и никаких сообщений
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
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
Все, я нашел в чем была проблема. При простом запуске dumpbin мне выдало, что нет mspdb80.dll. Я просто скопировал его в ту дерикторию и после этого программа начала работать, начали появляться используемые ключи при вызове dumpbin /?, хотя до этого вобще ничего не происходило и программа просто завершалась без каких-либо сообщений об ошибке.
Цитата:
Originally posted by -Df-
Все, я нашел в чем была проблема. При простом запуске dumpbin мне выдало, что нет mspdb80.dll. Я просто скопировал его в ту дерикторию и после этого программа начала работать, начали появляться используемые ключи при вызове dumpbin /?, хотя до этого вобще ничего не происходило и программа просто завершалась без каких-либо сообщений об ошибке.
Все, я нашел в чем была проблема. При простом запуске dumpbin мне выдало, что нет mspdb80.dll. Я просто скопировал его в ту дерикторию и после этого программа начала работать, начали появляться используемые ключи при вызове dumpbin /?, хотя до этого вобще ничего не происходило и программа просто завершалась без каких-либо сообщений об ошибке.
Я не совсем понял, что ты скопировал, но, не в коем случае не кидай mspdb80.dll в .\Microsoft Visual Studio 8\VC\bin. После этого у тебя проекты в студии компилироваться не будут.
Цитата:
Originally posted by Damarus
Я не совсем понял, что ты скопировал, но, не в коем случае не кидай mspdb80.dll в .\Microsoft Visual Studio 8\VC\bin. После этого у тебя проекты в студии компилироваться не будут.
Я не совсем понял, что ты скопировал, но, не в коем случае не кидай mspdb80.dll в .\Microsoft Visual Studio 8\VC\bin. После этого у тебя проекты в студии компилироваться не будут.
Действительно не компилит.. а как тогда по другому?
Цитата:
Originally posted by -Df-
Действительно не компилит.. а как тогда по другому?
Действительно не компилит.. а как тогда по другому?
Оно тебе надо, с консольными приложениями возиться? Dependency walker рулит. (D:\Microsoft Visual Studio 8\Common7\Tools\Bin\Depends.Exe)
Код:
#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);
#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, индексация ведётся параллельно с таблицей имён.
2HarryAxe: thnk