2012-07-17 182 views
0

我有问题为我的黑客做代码洞穴。Windows xp 32位d3d9.dll与Windows 7 64位d3d9.dll

的Windows XP 32位d3d9.dll运行时的返回地址

4fe50000 (base address) 
4fe58840 (drawindexedprimitive virtual table address) 
4fe571b0 (endscene virtual table address) 

Windows 7的64位d3d9.dll运行时的返回地址

72c30000 (base address) 
72c5b6b1 (drawindexedprimitive virtual table address) 
72c5279f (endscene virtual table address) 

,如果你在它仔细看,大小似乎有所不同。

好,我甚至试图调试此=> “Windows 7的64位的C:\ WINDOWS \ SysWow64资料\ d3d9.dll”,它返回不同的地址5e1cxxxx

我不知道我错过了什么。但返回为“72c30000”,我可以保证它是32位d3d9.dll

有什么解释?

+2

主要问题可能是**你为什么要检查函数地址?**它们可能会有所不同,因为地址是虚拟的,因为地址空间随机化和......因为服务包,修补程序或其他任何东西。这就是为什么我们有GetProcAddress()... – 2012-07-17 11:52:35

回答

2

DirectX是当今Windows不可分割的一部分。特别是Aero依赖于它,d3d9.dll是预先安装的。所以简单的解释是地址是不同的,因为DLL是不同的。您可以通过查看Windows资源管理器中的“特性+详细信息”选项卡轻松查看这些内容。请注意不同的文件版本。

没有一种情况可以指望不同Windows版本的函数的一致地址。或者就此而言,在一个版本中,安全修补程序或Service Pack将会更改地址。或者就此而言,在一个特定的文件版本中,地址空间布局随机化功能专门用于阻止您尝试执行的操作。

+0

当我打开ida专业版来反转Windows 7 d3d9.dll和比较到Windows XP d3d9.dll,说明是不一样的...所以如果我做codecave for Windows XP中,我可能会遇到麻烦运行在Windows 7,是吗? – lannyboy 2012-07-17 14:01:25

+0

好了代码洞穴的成功,确实地址是从Windows XP不同 – lannyboy 2012-07-19 13:21:00

相关问题