首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ >

怎么获取内存加载DLL中的类型

2013-01-28 
如何获取内存加载DLL中的类型。FARPROC MemoryGetProcAddress(HMEMORYMODULE module, const char *name){un

如何获取内存加载DLL中的类型。
FARPROC MemoryGetProcAddress(HMEMORYMODULE module, const char *name)
{
unsigned char *codeBase = ((PMEMORYMODULE)module)->codeBase;
int idx=-1;
DWORD i, *nameRef;
WORD *ordinal;
PIMAGE_EXPORT_DIRECTORY exports;
PIMAGE_DATA_DIRECTORY directory = GET_HEADER_DICTIONARY((PMEMORYMODULE)module, IMAGE_DIRECTORY_ENTRY_EXPORT);
if (directory->Size == 0)
// no export table found
return NULL;

exports = (PIMAGE_EXPORT_DIRECTORY)(codeBase + directory->VirtualAddress);
if (exports->NumberOfNames == 0 || exports->NumberOfFunctions == 0)
// DLL doesn't export anything
return NULL;

// search function name in list of exported names
nameRef = (DWORD *)(codeBase + exports->AddressOfNames);
ordinal = (WORD *)(codeBase + exports->AddressOfNameOrdinals);
for (i=0; i<exports->NumberOfNames; i++, nameRef++, ordinal++)
if (_stricmp(name, (const char *)(codeBase + *nameRef)) == 0)
{
idx = *ordinal;
break;
}

if (idx == -1)
// exported symbol not found
return NULL;

if ((DWORD)idx > exports->NumberOfFunctions)
// name <-> ordinal number don't match
return NULL;

// AddressOfFunctions contains the RVAs to the "real" functions
return (FARPROC)(codeBase + *(DWORD *)(codeBase + exports->AddressOfFunctions + (idx*4)));
}

以上函数能获取DLL中的指定函数,但我不知道如何获取DLL中的类型,以及如何使用。
[解决办法]
不太明白你的问题。dll还分类型?
[解决办法]
楼主指的应该是DLL中的对象,因为楼主那个函数是获取DLL中函数的,我猜楼主可能是想获取DLL中的对象。
[解决办法]
路過,等別人來回答。。
[解决办法]
好像是自己寫的内存模塊對象。

热点排行