Хочу вывести список имен ф-ций,но он не то что не выводиться,но еще и при парсинге IMAGE_EXPORT_DIRECTORY::AddressOfNames происходит креш. Код (Text): int _tmain(int argc, _TCHAR* argv[]) { DWORD baselib=(DWORD)LoadLibrary(L"ntdll.dll"); DWORD toNT=((IMAGE_DOS_HEADER*)baselib)->e_lfanew; IMAGE_NT_HEADERS *NT=(IMAGE_NT_HEADERS*)(baselib+toNT); IMAGE_EXPORT_DIRECTORY *exp=(IMAGE_EXPORT_DIRECTORY *)(baselib+NT->OptionalHeader.DataDirectory[IMAGE_DIRECTORY_ENTRY_EXPORT].VirtualAddress); DWORD cntFuncs=0; if(exp->NumberOfNames > exp->NumberOfFunctions) { cntFuncs = exp->NumberOfNames; } else { cntFuncs = exp->NumberOfFunctions; } char *funcName; for(DWORD i=0;i<cntFuncs;i++) { if(i<exp->NumberOfFunctions) { funcName=(char*) ( ( (DWORD*) exp->AddressOfNames )[i] + baselib ); printf("%s\n",funcName); } else { break; } } getch(); return 0; } Как правильно отпарсить IMAGE_EXPORT_DIRECTORY::AddressOfNames ?
_nic В нашем селе список имён не выводят, а компилируют. Код (Text): format binary as 'txt' include 'enumexport.inc' enumExport '%WinDir%\system32\kernel32.dll' enumexport.inc приложен. Теперь по Вашему коду. Вот это заведомо неверно: Код (Text): if(exp->NumberOfNames > exp->NumberOfFunctions) { cntFuncs = exp->NumberOfNames; } else { cntFuncs = exp->NumberOfFunctions; } Получается, что имена берутся из одного массива, а размер берётся от другого (большего) массива. Естесственно, будет падение.