计算Windows Server 2008R2上的Dll入口点

时间:2011-08-18 03:21:51

标签: c++ windows dll windows-server-2008

我有一些代码,我多年来一直使用将Windows应用程序中嵌入的DLL加载到内存中,将内存地址作为指针返回。 (这也是指向用于查找成员函数地址的IMAGE_DOS_HEADER结构的指针)

一旦DLL在内存中我DLL_PROCESS_ATTACH。要在Dll中找到函数的地址,我找到导出目录:

lpImageExportDirectory = @lpImageNtHeaders.OptionalHeader.D`ataDirectory(%IMAGE_DIRECTORY_ENTRY_EXPORT).VirtualAddress

添加标题:

lpImageExportDirectory = lpImageExportDirectory + lpImageDosHeader

然后使用:

lpImageExportDirectory.AddressOfNameOrdinals
lpImageExportDirectory.AddressOfNames       
lpImageExportDirectory.AddressOfFunctions   

循环比较名称的功能,直到找到我想要的名字 (无法发布确切的代码,其受限制)

这一切在XP Win7,NT,Windows Server 2003R2上工作正常但在Windows Server 2008R2 64位上 NOT 。 (尚未在32位上测试)

无论我尝试加载什么Dll,当我附加Dll时应用程序GPF。

伪代码:

函数原型:

int EntryPoint( BYVAL hInstance AS DWORD, BYVAL Reason AS DWORD, BYVAL Reserved AS DWORD) 

...

pEntry = @lpImageNtHeaders.OptionalHeader.AddressOfEntryPoint + lpImageDosHeader 

CALL DWORD pEntry USING EntryPoint(lpImageDosHeader, %DLL_PROCESS_ATTACH, 0)

也许WS2008R2在内存中“虚拟化”Dll?如果是这样我如何计算新地址?

添加了:

嵌入式示例 - 131k

https://www.transferbigfiles.com/57e6932e-d7ae-1381-40d0-ed953716d44d?rid=gInPZcZ6%2bqHswyTnCElLdg%3d%3d

8月22日到期

0 个答案:

没有答案