Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 24.09.2010, 17:28   #1
wmzvov
Пользователь
 
Аватар для wmzvov
 
Регистрация: 16.03.2010
Сообщений: 12
По умолчанию получение списка экспортируемых из dll

Необходимо получить список экспортируемых функций при помощи уже готовой функции, но при компилировании выдает ошибку:

Error 2 error C3861: 'NTSIGNATURE': identifier not found
указывает на выделение

помогите чем можете.

Вот код функции:

Код:
void PrintExportTable(char* hMap)
{
	PIMAGE_NT_HEADERS pPE=(PIMAGE_NT_HEADERS)NTSIGNATURE(hMap);
	short NumberOfSection=pPE->FileHeader.NumberOfSections;
	DWORD ExportRVA=pPE->OptionalHeader.DataDirectory[0].VirtualAddress;

	PIMAGE_EXPORT_DIRECTORY Export=(PIMAGE_EXPORT_DIRECTORY)RVAtoOffset((long)hMap,ExportRVA);
	Export=(PIMAGE_EXPORT_DIRECTORY)((long)Export+(long)hMap);
	
	WORD* AddressOfNameOrdinals=(unsigned short *)RVAtoOffset((long)hMap,Export->AddressOfNameOrdinals);

	AddressOfNameOrdinals=(WORD*)((long)AddressOfNameOrdinals+(long)hMap);

	DWORD* AddressOfNames=(unsigned long *)
	       RVAtoOffset((long)hMap,Export->AddressOfNames);
	AddressOfNames=(DWORD*)((long)AddressOfNames+(long)hMap);

	DWORD* AddressOfFunctions=(unsigned long *)
	       RVAtoOffset((long)hMap,Export->AddressOfFunctions);
	AddressOfFunctions=(DWORD*)((long)AddressOfFunctions+(long)hMap);

	WORD index;
	printf("%4s      %-40s       %s\n-------------------------------------"\
	       "----------------------------------\n","Ordinal","NameOfFunctions",
		   "EntryPoint");
	for (unsigned int i=0;i<Export->NumberOfFunctions-1;i++)
	{
		index=0xFFFF;
		for (unsigned int j=0;j<Export->NumberOfNames;j++)
		{
			if (AddressOfNameOrdinals[j]==(i+Export->Base))
			{
				index=j;continue;
			}
		}
		if ((AddressOfFunctions[i]>=
		     pPE->OptionalHeader.DataDirectory[0].VirtualAddress)&&
			 (AddressOfFunctions[i]<=
			 pPE->OptionalHeader.DataDirectory[0].VirtualAddress+pPE -> 
			 OptionalHeader.DataDirectory[0].Size))
		{
			if (index!=0xFFFF) printf("%4d         |%-35s       |Forw->%s\n",
			   i+Export->Base,(long)hMap+RVAtoOffset((long)hMap,
			   AddressOfNames[index]),(long)hMap+RVAtoOffset((long)hMap,
			   AddressOfFunctions[i]));
			else printf("%4d         |OrdinalOnly       |Forw->%s\n",
			   i+Export->Base,(long)hMap+RVAtoOffset((long)hMap,
			   AddressOfNames[index]),(long)hMap+RVAtoOffset((long)hMap,
			   AddressOfFunctions[i]));
		}
		if (index!=0xFFFF) printf("%4d         |%-35s       |%X\n",
		    i+Export->Base,(long)hMap+RVAtoOffset((long)hMap,
			AddressOfNames[index]),AddressOfFunctions[i]);
		else printf("%4d         |OrdinalOnly       |%X\n",
		     i+Export->Base,AddressOfFunctions[i]);
	}
}

Последний раз редактировалось JTG; 24.09.2010 в 19:22. Причина: тег [code]
wmzvov вне форума Ответить с цитированием
Старый 24.09.2010, 19:17   #2
JTG
я получил эту роль
Старожил
 
Аватар для JTG
 
Регистрация: 25.05.2007
Сообщений: 3,694
По умолчанию

Код:
#define NTSIGNATURE(a) ((LPVOID)((BYTE *)a + ((PIMAGE_DOS_HEADER)a)->e_lfanew))
(кодес отсюда, если что)
пыщь

Последний раз редактировалось JTG; 24.09.2010 в 19:21.
JTG вне форума Ответить с цитированием
Старый 24.09.2010, 19:22   #3
p51x
Старожил
 
Регистрация: 15.02.2010
Сообщений: 15,709
По умолчанию

При сдирании кода сдирайте все нужное... а не абы как.

Код:
#define NTSIGNATURE(a) ((LPVOID)((BYTE *)a + ((PIMAGE_DOS_HEADER)a)->e_lfanew))
p51x вне форума Ответить с цитированием
Старый 24.09.2010, 19:28   #4
wmzvov
Пользователь
 
Аватар для wmzvov
 
Регистрация: 16.03.2010
Сообщений: 12
По умолчанию

Спасибо большое)
wmzvov вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Получение списка процеcсов legendary Win Api 12 02.09.2010 18:06
Получение списка файлов кроссплатформа kin63camapa Общие вопросы C/C++ 2 13.02.2010 00:24
ADllExports - программа для получения экспортируемых функций из .dll Terran Софт 4 18.05.2009 13:48
Получение списка файлов Костян Пират Общие вопросы Delphi 11 16.02.2009 09:58
получение 1 списка из 2-х Neznau Помощь студентам 0 10.12.2008 22:16